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

Method ResolveGenericType

IDEHelper/Compiler/BfModuleTypeUtils.cpp:9083–9571  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9081}
9082
9083BfType* BfModule::ResolveGenericType(BfType* unspecializedType, BfTypeVector* typeGenericArguments, BfTypeVector* methodGenericArguments, BfType* selfType, bool allowFail)
9084{
9085 if (unspecializedType->IsGenericParam())
9086 {
9087 auto genericParam = (BfGenericParamType*)unspecializedType;
9088 if ((genericParam->mGenericParamKind == BfGenericParamKind_Type) && (typeGenericArguments != NULL))
9089 {
9090 if (genericParam->mGenericParamIdx < (int)typeGenericArguments->size())
9091 return FixIntUnknown((*typeGenericArguments)[genericParam->mGenericParamIdx]);
9092 BF_ASSERT(allowFail);
9093 }
9094 if ((genericParam->mGenericParamKind == BfGenericParamKind_Method) && (methodGenericArguments != NULL))
9095 {
9096 if (genericParam->mGenericParamIdx < (int)methodGenericArguments->size())
9097 {
9098 auto resolvedType = FixIntUnknown((*methodGenericArguments)[genericParam->mGenericParamIdx]);
9099 if ((resolvedType != NULL) && (resolvedType->IsGenericParam()))
9100 {
9101 auto genericParamType = (BfGenericParamType*)resolvedType;
9102 //BF_ASSERT(genericParamType->mGenericParamKind != BfGenericParamKind_Method);
9103 }
9104 return resolvedType;
9105 }
9106 BF_ASSERT(allowFail);
9107 }
9108 return unspecializedType;
9109 }
9110
9111 if ((unspecializedType->IsSelf()) && (selfType != NULL))
9112 return selfType;
9113
9114 if (!unspecializedType->IsUnspecializedType())
9115 {
9116 return unspecializedType;
9117 }
9118
9119 if (unspecializedType->IsUnknownSizedArrayType())
9120 {
9121 auto* arrayType = (BfUnknownSizedArrayType*)unspecializedType;
9122 auto elementType = ResolveGenericType(arrayType->mElementType, typeGenericArguments, methodGenericArguments, selfType, allowFail);
9123 if (elementType == NULL)
9124 return NULL;
9125 if (elementType->IsVar())
9126 return elementType;
9127 auto sizeType = ResolveGenericType(arrayType->mElementCountSource, typeGenericArguments, methodGenericArguments, selfType, allowFail);
9128 if (sizeType == NULL)
9129 return NULL;
9130 if (sizeType->IsConstExprValue())
9131 {
9132 return CreateSizedArrayType(elementType, ((BfConstExprValueType*)sizeType)->mValue.mInt32);
9133 }
9134 return CreateUnknownSizedArrayType(elementType, sizeType);
9135 }
9136
9137 if (unspecializedType->IsSizedArray())
9138 {
9139 auto* arrayType = (BfSizedArrayType*)unspecializedType;
9140 auto elementType = ResolveGenericType(arrayType->mElementType, typeGenericArguments, methodGenericArguments, selfType, allowFail);

Callers

nothing calls this directly

Calls 15

GetFieldDefMethod · 0.80
SetResolvedTypeMethod · 0.80
GiveBackMethod · 0.80
GetDefinitionMethod · 0.80
IsGenericParamMethod · 0.45
sizeMethod · 0.45
IsSelfMethod · 0.45
IsUnspecializedTypeMethod · 0.45
IsVarMethod · 0.45
IsConstExprValueMethod · 0.45
IsSizedArrayMethod · 0.45

Tested by

no test coverage detected