mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-09 03:52:19 +02:00
Fixed const generic param lookup in extensions
This commit is contained in:
parent
ca37d1d8af
commit
d3d6533976
1 changed files with 6 additions and 2 deletions
|
@ -7004,8 +7004,9 @@ BfTypedValue BfModule::TryLookupGenericConstVaue(BfIdentifierNode* identifierNod
|
||||||
genericCheckTypeInstance = GetUnspecializedTypeInstance(genericCheckTypeInstance);
|
genericCheckTypeInstance = GetUnspecializedTypeInstance(genericCheckTypeInstance);
|
||||||
doFakeVal = true;
|
doFakeVal = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue