mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 04:22:20 +02:00
Allow extensions to declare abstract methods
This commit is contained in:
parent
3cd94cbc8e
commit
16829900bc
2 changed files with 5 additions and 3 deletions
|
@ -447,8 +447,6 @@ BfMethodDef* BfDefBuilder::CreateMethodDef(BfMethodDeclaration* methodDeclaratio
|
||||||
|
|
||||||
if (methodDef->mIsAbstract)
|
if (methodDef->mIsAbstract)
|
||||||
{
|
{
|
||||||
if ((!mCurTypeDef->mIsAbstract) && (mCurTypeDef->mTypeCode != BfTypeCode_Interface))
|
|
||||||
Fail("Method is abstract but it is contained in non-abstract class", methodDeclaration);
|
|
||||||
if (methodDeclaration->mBody != NULL)
|
if (methodDeclaration->mBody != NULL)
|
||||||
Fail("Abstract method cannot declare a body", methodDeclaration);
|
Fail("Abstract method cannot declare a body", methodDeclaration);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5582,7 +5582,11 @@ void BfModule::DoTypeInstanceMethodProcessing(BfTypeInstance* typeInstance)
|
||||||
{
|
{
|
||||||
if (methodInstance->mMethodDef->mIsAbstract)
|
if (methodInstance->mMethodDef->mIsAbstract)
|
||||||
{
|
{
|
||||||
if (!typeInstance->IsUnspecializedTypeVariation())
|
if (typeInstance->mVirtualMethodTable[methodIdx].mDeclaringMethod.mTypeInstance == typeInstance)
|
||||||
|
{
|
||||||
|
Fail("Method is abstract but it is declared in non-abstract class", methodInstance->mMethodDef->GetRefNode());
|
||||||
|
}
|
||||||
|
else if (!typeInstance->IsUnspecializedTypeVariation())
|
||||||
{
|
{
|
||||||
if (Fail(StrFormat("'%s' does not implement inherited abstract method '%s'", TypeToString(typeInstance).c_str(), MethodToString(methodInstance).c_str()), typeDef->mTypeDeclaration->mNameNode, true) != NULL)
|
if (Fail(StrFormat("'%s' does not implement inherited abstract method '%s'", TypeToString(typeInstance).c_str(), MethodToString(methodInstance).c_str()), typeDef->mTypeDeclaration->mNameNode, true) != NULL)
|
||||||
mCompiler->mPassInstance->MoreInfo("Abstract method declared", methodInstance->mMethodDef->GetRefNode());
|
mCompiler->mPassInstance->MoreInfo("Abstract method declared", methodInstance->mMethodDef->GetRefNode());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue