1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

Circular dependency checking between generic constraints

This commit is contained in:
Brian Fiete 2022-04-25 17:53:54 -07:00
parent e307448363
commit 2bbe66cecc
7 changed files with 108 additions and 5 deletions

View file

@ -1204,6 +1204,7 @@ public:
virtual BfGenericParamDef* GetGenericParamDef() = 0;
virtual BfExternalConstraintDef* GetExternConstraintDef() = 0;
virtual String GetName() = 0;
virtual BfAstNode* GetRefNode() = NULL;
bool IsEnum();
};
@ -1255,6 +1256,13 @@ public:
return mTypeDef->mGenericParamDefs[mGenericIdx]->mName;
return mTypeDef->mExternalConstraints[mGenericIdx - (int)mTypeDef->mGenericParamDefs.size()].mTypeRef->ToString();
}
virtual BfAstNode* GetRefNode() override
{
if (mGenericIdx < (int)mTypeDef->mGenericParamDefs.size())
return mTypeDef->mGenericParamDefs[mGenericIdx]->mNameNodes[0];
return mTypeDef->mExternalConstraints[mGenericIdx - (int)mTypeDef->mGenericParamDefs.size()].mTypeRef;
}
};
class BfGenericMethodParamInstance : public BfGenericParamInstance
@ -1305,6 +1313,13 @@ public:
return mMethodDef->mGenericParams[mGenericIdx]->mName;
return mMethodDef->mExternalConstraints[mGenericIdx - (int)mMethodDef->mGenericParams.size()].mTypeRef->ToString();
}
virtual BfAstNode* GetRefNode() override
{
if (mGenericIdx < (int)mMethodDef->mGenericParams.size())
return mMethodDef->mGenericParams[mGenericIdx]->mNameNodes[0];
return mMethodDef->mExternalConstraints[mGenericIdx - (int)mMethodDef->mGenericParams.size()].mTypeRef;
}
};
#define BF_VALCOMP(val) if (val != 0) return val