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

Method FindTypeDef

IDEHelper/Compiler/BfModuleTypeUtils.cpp:10543–10668  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10541}
10542
10543BfTypeDef* BfModule::FindTypeDef(const BfAtomComposite& findName, int numGenericArgs, BfTypeInstance* typeInstanceOverride, BfTypeLookupError* error, BfResolveTypeRefFlags resolveFlags)
10544{
10545 //BP_ZONE("BfModule::FindTypeDef_1");
10546
10547 BfTypeInstance* typeInstance = (typeInstanceOverride != NULL) ? typeInstanceOverride : mCurTypeInstance;
10548 auto useTypeDef = GetActiveTypeDef(typeInstanceOverride, true);
10549
10550 if ((mCurMethodState != NULL) && (mCurMethodState->mMixinState != NULL))
10551 typeInstance = mCurMethodState->mMixinState->mMixinMethodInstance->GetOwner();
10552
10553 if (useTypeDef != NULL)
10554 useTypeDef = useTypeDef->GetDefinition();
10555
10556 if ((typeInstance == NULL) && (useTypeDef == NULL))
10557 {
10558 BfProject* project = NULL;
10559 if ((mContext->mCurTypeState != NULL) && (mContext->mCurTypeState->mActiveProject != NULL))
10560 project = mContext->mCurTypeState->mActiveProject;
10561 else if ((mCompiler->mResolvePassData != NULL) && (!mCompiler->mResolvePassData->mParsers.IsEmpty()))
10562 project = mCompiler->mResolvePassData->mParsers[0]->mProject;
10563
10564 //BP_ZONE("System.FindTypeDef_2");
10565 Array<BfAtomComposite> namespaceSearch;
10566 if (mContext->mCurNamespaceNodes != NULL)
10567 {
10568 String checkNamespace;
10569 for (auto namespaceNode : *mContext->mCurNamespaceNodes)
10570 {
10571 if (namespaceNode->mNameNode != NULL)
10572 {
10573 if (!checkNamespace.IsEmpty())
10574 checkNamespace += ".";
10575 namespaceNode->mNameNode->ToString(checkNamespace);
10576 }
10577 }
10578
10579 if (!checkNamespace.IsEmpty())
10580 {
10581 BfAtomCompositeT<16> atomComposite;
10582 if (mSystem->ParseAtomComposite(checkNamespace, atomComposite))
10583 namespaceSearch.Add(atomComposite);
10584 }
10585 }
10586
10587 BfFindTypeDefFlags findDefFlags = BfFindTypeDefFlag_None;
10588 if ((resolveFlags & BfResolveTypeRefFlag_AllowGlobalContainer) != 0)
10589 findDefFlags = (BfFindTypeDefFlags)(findDefFlags | BfFindTypeDefFlag_AllowGlobal);
10590
10591 BfTypeDef* ambiguousTypeDef = NULL;
10592 BfTypeDef *result = mSystem->FindTypeDef(findName, numGenericArgs, project, namespaceSearch, &ambiguousTypeDef, findDefFlags);
10593 if ((ambiguousTypeDef != NULL) && (error != NULL))
10594 {
10595 error->mErrorKind = BfTypeLookupError::BfErrorKind_Ambiguous;
10596 error->mAmbiguousTypeDef = ambiguousTypeDef;
10597 if (error->mRefNode != NULL)
10598 ShowAmbiguousTypeError(error->mRefNode, result, ambiguousTypeDef);
10599 }
10600

Callers 4

FindTypeDefRawMethod · 0.45
ValidateTypeWildcardMethod · 0.45

Calls 15

FailFunction · 0.85
GetDefinitionMethod · 0.80
ParseAtomCompositeMethod · 0.80
ContainsPartialMethod · 0.80
GetAtomUpdateIdxMethod · 0.80
TryGetValueMethod · 0.80
FilterDeletedTypeDefMethod · 0.80
GetOwnerMethod · 0.45
IsEmptyMethod · 0.45
ToStringMethod · 0.45
AddMethod · 0.45
ContainsMethod · 0.45

Tested by

no test coverage detected