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

Method GetActiveTypeGenericParamInstances

IDEHelper/Compiler/BfModuleTypeUtils.cpp:9688–9740  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9686}
9687
9688void BfModule::GetActiveTypeGenericParamInstances(SizedArray<BfGenericParamInstance*, 4>& genericParamInstances)
9689{
9690 // When we're evaluating a method, make sure the params refer back to that method context
9691 auto curTypeInstance = mCurTypeInstance;
9692 if (mCurMethodInstance != NULL)
9693 curTypeInstance = mCurMethodInstance->mMethodInstanceGroup->mOwner;
9694
9695 BfTypeInstance* genericTypeInst = curTypeInstance->ToGenericTypeInstance();
9696 if ((genericTypeInst->IsIncomplete()) && (genericTypeInst->mGenericTypeInfo->mGenericParams.size() == 0))
9697 {
9698 // Set this to NULL so we don't recurse infinitely
9699 SetAndRestoreValue<BfTypeInstance*> prevTypeInst(mCurTypeInstance, NULL);
9700 PopulateType(genericTypeInst, BfPopulateType_Declaration);
9701 }
9702
9703 if (genericTypeInst->mGenericTypeInfo->mGenericExtensionInfo != NULL)
9704 {
9705 // Note: original version had useMixinDecl set. Was there a reason for that? Causes issue 2118
9706 auto activeTypeDef = GetActiveTypeDef(NULL);
9707
9708 if ((activeTypeDef->mTypeDeclaration != genericTypeInst->mTypeDef->mTypeDeclaration) && (activeTypeDef->IsExtension()))
9709 {
9710 BfTypeDef* lookupTypeDef = activeTypeDef;
9711 while (lookupTypeDef->mNestDepth > genericTypeInst->mTypeDef->mNestDepth)
9712 lookupTypeDef = lookupTypeDef->mOuterType;
9713
9714 BfGenericExtensionEntry* genericExEntry;
9715 if (genericTypeInst->mGenericTypeInfo->mGenericExtensionInfo->mExtensionMap.TryGetValue(lookupTypeDef, &genericExEntry))
9716 {
9717 for (auto entry : genericExEntry->mGenericParams)
9718 genericParamInstances.Add(entry);
9719
9720 auto genericTypeInfo = genericTypeInst->mGenericTypeInfo;
9721
9722 // Add root extern constraints - they don't get extended
9723 for (int genericParamIdx = (int)genericTypeInst->mGenericTypeInfo->mTypeGenericArguments.size(); genericParamIdx < genericTypeInst->mGenericTypeInfo->mGenericParams.size(); genericParamIdx++)
9724 genericParamInstances.Add(genericTypeInst->mGenericTypeInfo->mGenericParams[genericParamIdx]);
9725 return;
9726 }
9727 else
9728 {
9729 if ((mCompiler->mResolvePassData == NULL) || (mCompiler->mResolvePassData->mAutoComplete == NULL))
9730 {
9731 BFMODULE_FATAL(this, "Invalid GetGenericParamInstance with extension");
9732 }
9733 }
9734 }
9735 }
9736
9737 BF_ASSERT(genericTypeInst != NULL);
9738 for (auto entry : genericTypeInst->mGenericTypeInfo->mGenericParams)
9739 genericParamInstances.Add(entry);
9740}
9741
9742BfGenericParamInstance* BfModule::GetMergedGenericParamData(BfType* type, BfGenericParamFlags& outFlags, BfType*& outTypeConstraint)
9743{

Callers 1

Calls 6

IsExtensionMethod · 0.80
TryGetValueMethod · 0.80
ToGenericTypeInstanceMethod · 0.45
IsIncompleteMethod · 0.45
sizeMethod · 0.45
AddMethod · 0.45

Tested by

no test coverage detected