1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 19:48:20 +02:00

Extension classifier fix

This commit is contained in:
Brian Fiete 2020-08-31 14:16:22 -07:00
parent f008a98105
commit 95c876570f
3 changed files with 15 additions and 1 deletions

View file

@ -3894,7 +3894,7 @@ void BfCompiler::ProcessAutocompleteTempType()
}; };
if (tempTypeDef->mTypeCode == BfTypeCode_Extension) if (tempTypeDef->mTypeCode == BfTypeCode_Extension)
{ {
BfTypeInstance* outerTypeInstance = NULL; BfTypeInstance* outerTypeInstance = NULL;
if (tempTypeDef->mOuterType != NULL) if (tempTypeDef->mOuterType != NULL)
@ -3928,6 +3928,9 @@ void BfCompiler::ProcessAutocompleteTempType()
return; return;
} }
if (tempTypeDef->mTypeCode == BfTypeCode_Extension)
mResolvePassData->mSourceClassifier->SetElementType(tempTypeDef->mTypeDeclaration->mNameNode, actualTypeDef->mTypeCode);
if (tempTypeDef->mTypeDeclaration->mAttributes != NULL) if (tempTypeDef->mTypeDeclaration->mAttributes != NULL)
{ {
mResolvePassData->mSourceClassifier->VisitChild(tempTypeDef->mTypeDeclaration->mAttributes); mResolvePassData->mSourceClassifier->VisitChild(tempTypeDef->mTypeDeclaration->mAttributes);

View file

@ -47,6 +47,16 @@ void BfSourceClassifier::SetElementType(BfAstNode* node, BfSourceElementType ele
} }
} }
void BfSourceClassifier::SetElementType(BfAstNode * node, BfTypeCode typeCode)
{
BfSourceElementType elemType = BfSourceElementType_Type;
if (typeCode == BfTypeCode_Interface)
elemType = BfSourceElementType_Interface;
else if (typeCode == BfTypeCode_Object)
elemType = BfSourceElementType_RefType;
SetElementType(node, elemType);
}
void BfSourceClassifier::SetHighestElementType(int startPos, int endPos, BfSourceElementType elementType) void BfSourceClassifier::SetHighestElementType(int startPos, int endPos, BfSourceElementType elementType)
{ {
if (!mEnabled) if (!mEnabled)

View file

@ -73,6 +73,7 @@ public:
void ModifyFlags(BfAstNode* node, uint8 andFlags, uint8 orFlags); void ModifyFlags(BfAstNode* node, uint8 andFlags, uint8 orFlags);
void ModifyFlags(int startPos, int endPos, uint8 andFlags, uint8 orFlags); void ModifyFlags(int startPos, int endPos, uint8 andFlags, uint8 orFlags);
void SetElementType(BfAstNode* node, BfSourceElementType elementType); void SetElementType(BfAstNode* node, BfSourceElementType elementType);
void SetElementType(BfAstNode* node, BfTypeCode typeCode);
void SetElementType(int startPos, int endPos, BfSourceElementType elementType); void SetElementType(int startPos, int endPos, BfSourceElementType elementType);
void SetHighestElementType(BfAstNode* node, BfSourceElementType elementType); void SetHighestElementType(BfAstNode* node, BfSourceElementType elementType);
void SetHighestElementType(int startPos, int endPos, BfSourceElementType elementType); void SetHighestElementType(int startPos, int endPos, BfSourceElementType elementType);