mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2025-01-24 15:40:59 +00:00
Class abstractness should be inherited
This commit is contained in:
parent
3577e4eddc
commit
363990a105
2 changed files with 3 additions and 4 deletions
|
@ -194,7 +194,7 @@ PFunction *FindClassMemberFunction(PStruct *selfcls, PStruct *funccls, FName nam
|
||||||
{
|
{
|
||||||
sc.Message(MSG_ERROR, "%s is not a member function of %s", name.GetChars(), selfcls->TypeName.GetChars());
|
sc.Message(MSG_ERROR, "%s is not a member function of %s", name.GetChars(), selfcls->TypeName.GetChars());
|
||||||
}
|
}
|
||||||
else if (funcsym->Variants[0].Flags & VARF_Private && symtable != &funccls->Symbols)
|
else if ((funcsym->Variants[0].Flags & VARF_Private) && symtable != &funccls->Symbols)
|
||||||
{
|
{
|
||||||
// private access is only allowed if the symbol table belongs to the class in which the current function is being defined.
|
// private access is only allowed if the symbol table belongs to the class in which the current function is being defined.
|
||||||
sc.Message(MSG_ERROR, "%s is declared private and not accessible", symbol->SymbolName.GetChars());
|
sc.Message(MSG_ERROR, "%s is declared private and not accessible", symbol->SymbolName.GetChars());
|
||||||
|
|
|
@ -599,10 +599,9 @@ void ZCCCompiler::CreateClassTypes()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (c->Type() == nullptr) c->cls->Type = parent->FindClassTentative(c->NodeName());
|
if (c->Type() == nullptr) c->cls->Type = parent->FindClassTentative(c->NodeName());
|
||||||
if (c->cls->Flags & ZCC_Abstract)
|
// [ZZ] if parent class is abstract, this one should be abstract as well - otherwise we can subclass Actor and be able to new() our subclass
|
||||||
{
|
if ((c->cls->Flags & ZCC_Abstract) || (parent && parent->ObjectFlags & OF_Abstract))
|
||||||
c->Type()->ObjectFlags |= OF_Abstract;
|
c->Type()->ObjectFlags |= OF_Abstract;
|
||||||
}
|
|
||||||
c->Type()->bExported = true; // this class is accessible to script side type casts. (The reason for this flag is that types like PInt need to be skipped.)
|
c->Type()->bExported = true; // this class is accessible to script side type casts. (The reason for this flag is that types like PInt need to be skipped.)
|
||||||
c->cls->Symbol = new PSymbolType(c->NodeName(), c->Type());
|
c->cls->Symbol = new PSymbolType(c->NodeName(), c->Type());
|
||||||
OutNamespace->Symbols.AddSymbol(c->cls->Symbol);
|
OutNamespace->Symbols.AddSymbol(c->cls->Symbol);
|
||||||
|
|
Loading…
Reference in a new issue