1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 03:52:19 +02:00

Support for internal property overrides in extensions

This commit is contained in:
Brian Fiete 2020-10-26 13:52:04 -07:00
parent c4ff32826e
commit 71f5448f32

View file

@ -756,10 +756,10 @@ void BfModule::CheckMemberNames(BfTypeInstance* typeInst)
if (memberMap.TryGetValue(memberRef.mName, &prevMemberRef))
{
//auto& prevMemberRef = itr->second;
MemberRef* firstMemberRef = &memberRef;
MemberRef* secondMemberRef = prevMemberRef;
bool showPrevious = false;
bool showPrevious = false;
BfError* error = NULL;
if (prevMemberRef->mTypeInst != typeInst)
@ -801,6 +801,20 @@ void BfModule::CheckMemberNames(BfTypeInstance* typeInst)
{
std::swap(firstMemberRef, secondMemberRef);
}
if (typeInst->mTypeDef->mIsCombinedPartial)
{
if ((firstMemberRef->mKindName == "property") && (secondMemberRef->mKindName == "property"))
{
auto firstPropertyDef = (BfPropertyDef*)firstMemberRef->mMemberDef;
auto secondPropertyDef = (BfPropertyDef*)secondMemberRef->mMemberDef;
if (auto secondPropertyDeclaration = BfNodeDynCast<BfPropertyDeclaration>(secondPropertyDef->mFieldDeclaration))
{
if ((secondPropertyDeclaration->mVirtualSpecifier != NULL) && (secondPropertyDeclaration->mVirtualSpecifier->mToken == BfToken_Override))
continue;
}
}
}
if (secondMemberRef->mNameNode != NULL)
error = Fail(StrFormat("A %s named '%s' has already been declared.", secondMemberRef->mKindName.c_str(), memberRef.mName.c_str()), secondMemberRef->mNameNode, true);