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

Method ResolveTypeRefAllowUnboundGenerics

IDEHelper/Compiler/BfModuleTypeUtils.cpp:13004–13029  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

13002}
13003
13004BfType* BfModule::ResolveTypeRefAllowUnboundGenerics(BfTypeReference* typeRef, BfPopulateType populateType, BfResolveTypeRefFlags resolveFlags, bool resolveGenericParam)
13005{
13006 if (auto genericTypeRef = BfNodeDynCast<BfGenericInstanceTypeRef>(typeRef))
13007 {
13008 if (genericTypeRef->mGenericArguments.size() == 0)
13009 {
13010 auto genericTypeDef = ResolveGenericInstanceDef(genericTypeRef);
13011 if (genericTypeDef == NULL)
13012 return NULL;
13013
13014 BfTypeVector typeVector;
13015 for (int i = 0; i < (int)genericTypeDef->mGenericParamDefs.size(); i++)
13016 typeVector.push_back(GetGenericParamType(BfGenericParamKind_Type, i));
13017 auto result = ResolveTypeDef(genericTypeDef, typeVector, populateType, resolveFlags);
13018 if ((result != NULL) && (genericTypeRef->mCommas.size() + 1 != genericTypeDef->mGenericParamDefs.size()))
13019 {
13020 SetAndRestoreValue<BfTypeInstance*> prevTypeInstance(mCurTypeInstance, result->ToTypeInstance());
13021 SetAndRestoreValue<BfMethodInstance*> prevMethodInstance(mCurMethodInstance, NULL);
13022 Fail(StrFormat("Type '%s' requires %d generic arguments", TypeToString(result).c_str(), genericTypeDef->mGenericParamDefs.size()), typeRef);
13023 }
13024 return result;
13025 }
13026 }
13027
13028 return ResolveTypeRef(typeRef, populateType, resolveGenericParam ? (BfResolveTypeRefFlags)0 : BfResolveTypeRefFlag_NoResolveGenericParam);
13029}
13030
13031// This finds non-default unspecialized generic type instances and converts them into a BfUnspecializedGenericTypeVariation
13032BfType* BfModule::CheckUnspecializedGenericType(BfTypeInstance* genericTypeInst, BfPopulateType populateType)

Callers 6

GetReflectTypeMethod · 0.80
LookupTypePropMethod · 0.80
VisitMethod · 0.80

Calls 6

FailFunction · 0.85
TypeToStringFunction · 0.85
sizeMethod · 0.45
push_backMethod · 0.45
ToTypeInstanceMethod · 0.45
c_strMethod · 0.45

Tested by

no test coverage detected