MCPcopy Create free account
hub / github.com/beefytech/Beef / TryLookupGenericConstVaue

Method TryLookupGenericConstVaue

IDEHelper/Compiler/BfModuleTypeUtils.cpp:10942–11101  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10940//int sResolveTypeRefIdx = 0;
10941
10942BfTypedValue BfModule::TryLookupGenericConstVaue(BfIdentifierNode* identifierNode, BfType* expectingType)
10943{
10944 BfTypeInstance* contextTypeInstance = mCurTypeInstance;
10945 BfMethodInstance* contextMethodInstance = mCurMethodInstance;
10946 if ((mCurMethodState != NULL) && (mCurMethodState->mMixinState != NULL))
10947 {
10948 contextTypeInstance = mCurMethodState->mMixinState->mMixinMethodInstance->GetOwner();
10949 contextMethodInstance = mCurMethodState->mMixinState->mMixinMethodInstance;
10950 }
10951 BfTypeDef* curTypeDef = NULL;
10952 if (contextTypeInstance != NULL)
10953 {
10954 curTypeDef = contextTypeInstance->mTypeDef;
10955
10956 StringT<128> findName;
10957 identifierNode->ToString(findName);
10958
10959 auto genericCheckTypeInstance = contextTypeInstance;
10960 if (contextTypeInstance->IsBoxed())
10961 genericCheckTypeInstance = contextTypeInstance->GetUnderlyingType()->ToTypeInstance();
10962
10963 bool doUndefVal = false;
10964 if (genericCheckTypeInstance->IsUnspecializedTypeVariation())
10965 {
10966 genericCheckTypeInstance = GetUnspecializedTypeInstance(genericCheckTypeInstance);
10967 doUndefVal = true;
10968 }
10969
10970 BfGenericParamDef* genericParamDef = NULL;
10971 BfGenericParamDef* origGenericParamDef = NULL;
10972 BfType* genericParamResult = NULL;
10973 BfType* genericTypeConstraint = NULL;
10974 bool disallowConstExprValue = false;
10975 if ((genericCheckTypeInstance != NULL) && (genericCheckTypeInstance->IsGenericTypeInstance()))
10976 {
10977 auto genericTypeInst = (BfTypeInstance*)genericCheckTypeInstance;
10978 auto* genericParams = &curTypeDef->mGenericParamDefs;
10979 auto* origGenericParams = &curTypeDef->mGenericParamDefs;
10980
10981 if (genericTypeInst->mGenericTypeInfo->mGenericExtensionInfo != NULL)
10982 {
10983 auto activeTypeDef = GetActiveTypeDef(NULL, true);
10984 genericParams = &activeTypeDef->mGenericParamDefs;
10985 }
10986
10987 for (int genericParamIdx = (int)genericParams->size() - 1; genericParamIdx >= 0; genericParamIdx--)
10988 {
10989 auto checkGenericParamDef = (*genericParams)[genericParamIdx];
10990 String genericName = checkGenericParamDef->mName;
10991
10992 if (genericName == findName)
10993 {
10994 genericParamDef = checkGenericParamDef;
10995 origGenericParamDef = (*origGenericParams)[genericParamIdx];
10996 genericParamResult = genericTypeInst->mGenericTypeInfo->mTypeGenericArguments[genericParamIdx];
10997 genericTypeConstraint = genericTypeInst->mGenericTypeInfo->mGenericParams[genericParamIdx]->mTypeConstraint;
10998
10999 if (contextTypeInstance != genericCheckTypeInstance)

Callers 1

LookupIdentifierMethod · 0.80

Calls 15

BfTypedValueClass · 0.85
GetSourceDataMethod · 0.80
GetSourceClassifierMethod · 0.80
GetLiteralMethod · 0.80
GetOwnerMethod · 0.45
ToStringMethod · 0.45
IsBoxedMethod · 0.45
ToTypeInstanceMethod · 0.45
GetUnderlyingTypeMethod · 0.45
IsGenericTypeInstanceMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected