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

Fixed const generic param lookup in extensions

This commit is contained in:
Brian Fiete 2020-06-30 15:18:16 -07:00
parent ca37d1d8af
commit d3d6533976

View file

@ -7006,6 +7006,7 @@ BfTypedValue BfModule::TryLookupGenericConstVaue(BfIdentifierNode* identifierNod
} }
BfGenericParamDef* genericParamDef = NULL; BfGenericParamDef* genericParamDef = NULL;
BfGenericParamDef* origGenericParamDef = NULL;
BfType* genericParamResult = NULL; BfType* genericParamResult = NULL;
BfType* genericTypeConstraint = NULL; BfType* genericTypeConstraint = NULL;
bool disallowConstExprValue = false; bool disallowConstExprValue = false;
@ -7013,6 +7014,7 @@ BfTypedValue BfModule::TryLookupGenericConstVaue(BfIdentifierNode* identifierNod
{ {
auto genericTypeInst = (BfTypeInstance*)genericCheckTypeInstance; auto genericTypeInst = (BfTypeInstance*)genericCheckTypeInstance;
auto* genericParams = &curTypeDef->mGenericParamDefs; auto* genericParams = &curTypeDef->mGenericParamDefs;
auto* origGenericParams = &curTypeDef->mGenericParamDefs;
if (genericTypeInst->mGenericTypeInfo->mGenericExtensionInfo != NULL) if (genericTypeInst->mGenericTypeInfo->mGenericExtensionInfo != NULL)
{ {
@ -7028,6 +7030,7 @@ BfTypedValue BfModule::TryLookupGenericConstVaue(BfIdentifierNode* identifierNod
if (genericName == findName) if (genericName == findName)
{ {
genericParamDef = checkGenericParamDef; genericParamDef = checkGenericParamDef;
origGenericParamDef = (*origGenericParams)[genericParamIdx];
genericParamResult = genericTypeInst->mGenericTypeInfo->mTypeGenericArguments[genericParamIdx]; genericParamResult = genericTypeInst->mGenericTypeInfo->mTypeGenericArguments[genericParamIdx];
genericTypeConstraint = genericTypeInst->mGenericTypeInfo->mGenericParams[genericParamIdx]->mTypeConstraint; genericTypeConstraint = genericTypeInst->mGenericTypeInfo->mGenericParams[genericParamIdx]->mTypeConstraint;
@ -7045,6 +7048,7 @@ BfTypedValue BfModule::TryLookupGenericConstVaue(BfIdentifierNode* identifierNod
if (genericName == findName) if (genericName == findName)
{ {
genericParamDef = checkGenericParamDef; genericParamDef = checkGenericParamDef;
origGenericParamDef = checkGenericParamDef;
genericParamResult = contextMethodInstance->mMethodInfoEx->mMethodGenericArguments[genericParamIdx]; genericParamResult = contextMethodInstance->mMethodInfoEx->mMethodGenericArguments[genericParamIdx];
genericTypeConstraint = contextMethodInstance->mMethodInfoEx->mGenericParams[genericParamIdx]->mTypeConstraint; genericTypeConstraint = contextMethodInstance->mMethodInfoEx->mGenericParams[genericParamIdx]->mTypeConstraint;
@ -7077,7 +7081,7 @@ BfTypedValue BfModule::TryLookupGenericConstVaue(BfIdentifierNode* identifierNod
return BfTypedValue(mBfIRBuilder->GetFakeVal(), genericTypeConstraint); return BfTypedValue(mBfIRBuilder->GetFakeVal(), genericTypeConstraint);
} }
if ((genericParamDef->mGenericParamFlags & BfGenericParamFlag_Const) != 0) if (((genericParamDef->mGenericParamFlags | origGenericParamDef->mGenericParamFlags) & BfGenericParamFlag_Const) != 0)
{ {
BfTypedValue result; BfTypedValue result;
result.mType = genericParamResult; result.mType = genericParamResult;