- fixed: The check for virtual function overrides was never done if the overriding function had no qualifier at all.

- fixed several occurences where an 'override' qualifier was missing.
This commit is contained in:
Christoph Oelckers 2017-01-08 19:07:26 +01:00
commit 7a5171a2e9
8 changed files with 16 additions and 8 deletions

View file

@ -2336,6 +2336,7 @@ void ZCCCompiler::CompileFunction(ZCC_StructWork *c, ZCC_FuncDeclarator *f, bool
sym->Variants[0].Implementation->DefaultArgs = std::move(argdefaults);
}
PClass *clstype = static_cast<PClass *>(c->Type());
if (varflags & VARF_Virtual)
{
if (sym->Variants[0].Implementation == nullptr)
@ -2349,7 +2350,6 @@ void ZCCCompiler::CompileFunction(ZCC_StructWork *c, ZCC_FuncDeclarator *f, bool
}
if (forclass)
{
PClass *clstype = static_cast<PClass *>(c->Type());
int vindex = clstype->FindVirtualIndex(sym->SymbolName, sym->Variants[0].Proto);
// specifying 'override' is necessary to prevent one of the biggest problem spots with virtual inheritance: Mismatching argument types.
if (varflags & VARF_Override)
@ -2383,6 +2383,14 @@ void ZCCCompiler::CompileFunction(ZCC_StructWork *c, ZCC_FuncDeclarator *f, bool
Error(p, "Virtual functions can only be defined for classes");
}
}
else if (forclass)
{
int vindex = clstype->FindVirtualIndex(sym->SymbolName, sym->Variants[0].Proto);
if (vindex != -1)
{
Error(f, "Function %s attempts to override parent function without 'override' qualifier", FName(f->Name).GetChars());
}
}
}
}