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

Method InitGenericParams

IDEHelper/Compiler/BfModuleTypeUtils.cpp:121–158  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

119}
120
121bool BfModule::InitGenericParams(BfType* resolvedTypeRef)
122{
123 BfTypeState typeState;
124 typeState.mPrevState = mContext->mCurTypeState;
125 typeState.mResolveKind = BfTypeState::ResolveKind_BuildingGenericParams;
126 typeState.mType = resolvedTypeRef;
127 SetAndRestoreValue<BfTypeState*> prevTypeState(mContext->mCurTypeState, &typeState);
128
129 BF_ASSERT(mCurMethodInstance == NULL);
130
131 auto genericTypeInst = resolvedTypeRef->ToGenericTypeInstance();
132 genericTypeInst->mGenericTypeInfo->mInitializedGenericParams = true;
133
134 if (genericTypeInst->mGenericTypeInfo->mTypeGenericArguments.IsEmpty())
135 return true;
136
137 if (genericTypeInst->mGenericTypeInfo->mTypeGenericArguments[0]->IsGenericParam())
138 {
139 BF_ASSERT(genericTypeInst->mGenericTypeInfo->mIsUnspecialized);
140 }
141
142 auto typeDef = genericTypeInst->mTypeDef;
143 int startDefGenericParamIdx = (int)genericTypeInst->mGenericTypeInfo->mGenericParams.size();
144 for (int paramIdx = startDefGenericParamIdx; paramIdx < (int)genericTypeInst->mGenericTypeInfo->mTypeGenericArguments.size(); paramIdx++)
145 {
146 auto genericParamInstance = new BfGenericTypeParamInstance(typeDef, paramIdx);
147 genericParamInstance->mExternType = GetGenericParamType(BfGenericParamKind_Type, paramIdx);
148 genericTypeInst->mGenericTypeInfo->mGenericParams.push_back(genericParamInstance);
149 }
150
151 for (int externConstraintIdx = 0; externConstraintIdx < (int)typeDef->mExternalConstraints.size(); externConstraintIdx++)
152 {
153 auto genericParamInstance = new BfGenericTypeParamInstance(typeDef, externConstraintIdx + (int)typeDef->mGenericParamDefs.size());
154 genericTypeInst->mGenericTypeInfo->mGenericParams.push_back(genericParamInstance);
155 }
156
157 return true;
158}
159
160bool BfModule::FinishGenericParams(BfType* resolvedTypeRef)
161{

Callers

nothing calls this directly

Calls 5

ToGenericTypeInstanceMethod · 0.45
IsEmptyMethod · 0.45
IsGenericParamMethod · 0.45
sizeMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected