1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 20:12:21 +02:00

Allow static method overrides in extensions

This commit is contained in:
Brian Fiete 2020-11-17 23:19:56 -08:00
parent 16a4b36b17
commit bd3fa65692

View file

@ -21542,16 +21542,6 @@ void BfModule::DoMethodDeclaration(BfMethodDeclaration* methodDeclaration, bool
else if (methodDeclaration != NULL)
virtualToken = methodDeclaration->mVirtualSpecifier;
if ((methodDef->mIsVirtual) && (methodDef->mIsStatic))
{
Fail("Static members cannot be marked as override, virtual, or abstract", virtualToken, true);
}
else if (methodDef->mIsVirtual)
{
if ((methodDef->mProtection == BfProtection_Private) && (virtualToken != NULL))
Fail("Virtual or abstract members cannot be private", virtualToken, true);
}
// Don't compare specialized generic methods against normal methods
if ((((mCurMethodInstance->mIsUnspecialized) || (mCurMethodInstance->mMethodDef->mGenericParams.size() == 0))) &&
(!methodDef->mIsLocalMethod))
@ -21748,6 +21738,19 @@ void BfModule::DoMethodDeclaration(BfMethodDeclaration* methodDeclaration, bool
}
}
if ((methodDef->mIsVirtual) && (methodDef->mIsStatic) && (!methodInstance->mIsInnerOverride))
{
if ((virtualToken != NULL) && (virtualToken->mToken == BfToken_Override) && (methodDef->mDeclaringType->mTypeCode == BfTypeCode_Extension))
Fail("No suitable method found to override", virtualToken, true);
else
Fail("Static members cannot be marked as override, virtual, or abstract", virtualToken, true);
}
else if (methodDef->mIsVirtual)
{
if ((methodDef->mProtection == BfProtection_Private) && (virtualToken != NULL))
Fail("Virtual or abstract members cannot be private", virtualToken, true);
}
mCompiler->mStats.mMethodDeclarations++;
mCompiler->UpdateCompletion();
}