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

Method ResolveGenericInstanceDef

IDEHelper/Compiler/BfModuleTypeUtils.cpp:8974–9081  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8972int checkIdx = 0;
8973
8974BfTypeDef* BfModule::ResolveGenericInstanceDef(BfGenericInstanceTypeRef* genericTypeRef, BfType** outType, BfResolveTypeRefFlags resolveFlags)
8975{
8976 if (outType != NULL)
8977 *outType = NULL;
8978
8979 BfTypeReference* typeRef = genericTypeRef->mElementType;
8980 int numGenericParams = genericTypeRef->GetGenericArgCount();
8981
8982 BfTypeDef* curTypeDef = NULL;
8983 if (mCurTypeInstance != NULL)
8984 curTypeDef = mCurTypeInstance->mTypeDef->GetDefinition();
8985
8986 if (auto directTypeDef = BfNodeDynCast<BfDirectTypeReference>(typeRef))
8987 {
8988 auto typeInst = directTypeDef->mType->ToTypeInstance();
8989 return typeInst->mTypeDef->GetDefinition();
8990 }
8991
8992 auto namedTypeRef = BfNodeDynCast<BfNamedTypeReference>(typeRef);
8993 auto directStrTypeDef = BfNodeDynCastExact<BfDirectStrTypeReference>(typeRef);
8994 if ((namedTypeRef != NULL) || (directStrTypeDef != NULL))
8995 {
8996 BfTypeLookupError error;
8997 error.mRefNode = typeRef;
8998 BfTypeDef* typeDef = FindTypeDef(typeRef, NULL, &error, numGenericParams, resolveFlags);
8999 if (typeDef != NULL)
9000 {
9001 BfAutoComplete* autoComplete = NULL;
9002 if (mCompiler->IsAutocomplete())
9003 autoComplete = mCompiler->mResolvePassData->mAutoComplete;
9004
9005 if ((autoComplete != NULL) && (autoComplete->mIsGetDefinition) && (autoComplete->IsAutocompleteNode(typeRef)))
9006 {
9007 if ((autoComplete->mDefMethod == NULL) && (autoComplete->mDefField == NULL) &&
9008 (autoComplete->mDefProp == NULL) && (typeDef->mTypeDeclaration != NULL))
9009 {
9010 autoComplete->mDefType = typeDef;
9011 autoComplete->SetDefinitionLocation(typeDef->mTypeDeclaration->mNameNode);
9012 }
9013 }
9014
9015 if (mCompiler->mResolvePassData != NULL)
9016 mCompiler->mResolvePassData->HandleTypeReference(typeRef, typeDef);
9017
9018 return typeDef;
9019 }
9020
9021 if (mCurTypeInstance != NULL)
9022 {
9023 bool wasGenericParam = false;
9024
9025 // Check generics first
9026 if (typeRef->IsA<BfNamedTypeReference>())
9027 {
9028 String findName = typeRef->ToString();
9029 if ((resolveFlags & BfResolveTypeRefFlag_Attribute) != 0)
9030 findName += "Attribute";
9031 if ((mCurTypeInstance != NULL) && (mCurTypeInstance->IsGenericTypeInstance()))

Callers 2

DoHashMethod · 0.80
GenericTypeEqualsMethod · 0.80

Calls 11

FailFunction · 0.85
GetDefinitionMethod · 0.80
IsAutocompleteMethod · 0.80
IsAutocompleteNodeMethod · 0.80
SetDefinitionLocationMethod · 0.80
HandleTypeReferenceMethod · 0.80
GetGenericArgCountMethod · 0.45
ToTypeInstanceMethod · 0.45
ToStringMethod · 0.45
IsGenericTypeInstanceMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected