| 10940 | //int sResolveTypeRefIdx = 0; |
| 10941 | |
| 10942 | BfTypedValue 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) |
no test coverage detected