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

Method FindTypeDefRaw

IDEHelper/Compiler/BfModuleTypeUtils.cpp:10380–10541  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10378}
10379
10380BfTypeDef* BfModule::FindTypeDefRaw(const BfAtomComposite& findName, int numGenericArgs, BfTypeInstance* typeInstance, BfTypeDef* useTypeDef, BfTypeLookupError* error, BfTypeLookupResultCtx* lookupResultCtx, BfResolveTypeRefFlags resolveFlags)
10381{
10382 if ((findName.mSize == 1) && (findName.mParts[0]->mIsSystemType))
10383 {
10384 //BP_ZONE("BfModule::FindTypeDefRaw_1");
10385 return mSystem->FindTypeDef(findName, 0, useTypeDef->mProject);
10386 }
10387
10388 BfTypeInstance* skipCheckBaseType = NULL;
10389 if (mContext->mCurTypeState != NULL)
10390 {
10391 if (mContext->mCurTypeState->mCurBaseTypeRef != NULL)
10392 skipCheckBaseType = mContext->mCurTypeState->mType->ToTypeInstance();
10393 if (mContext->mCurTypeState->mResolveKind == BfTypeState::ResolveKind_BuildingGenericParams)
10394 skipCheckBaseType = mContext->mCurTypeState->mType->ToTypeInstance();
10395 }
10396
10397 BfProject* useProject = useTypeDef->mProject;
10398
10399 BfTypeDefLookupContext lookupCtx;
10400 bool allowPrivate = true;
10401
10402 int curPri = 1000;
10403 auto checkTypeInst = typeInstance;
10404
10405 BfTypeDef* protErrorTypeDef = NULL;
10406 BfTypeInstance* protErrorOuterType = NULL;
10407
10408 BfTypeDef* foundInnerType = NULL;
10409
10410 if ((resolveFlags & BfResolveTypeRefFlag_SpecializedProject) != 0)
10411 {
10412 if (typeInstance->mGenericTypeInfo->mProjectsReferenced.empty())
10413 typeInstance->GenerateProjectsReferenced();
10414 lookupCtx.mCheckProjects = &typeInstance->mGenericTypeInfo->mProjectsReferenced;
10415 }
10416
10417 if ((lookupResultCtx != NULL) && (lookupResultCtx->mIsVerify))
10418 {
10419 if (lookupResultCtx->mResult->mFoundInnerType)
10420 return lookupCtx.mBestTypeDef;
10421 }
10422 else
10423 {
10424 if ((!lookupCtx.HasValidMatch()) && (typeInstance != NULL))
10425 {
10426 std::function<bool(BfTypeInstance*)> _CheckType = [&](BfTypeInstance* typeInstance)
10427 {
10428 auto checkTypeInst = typeInstance;
10429 allowPrivate = true;
10430 while (checkTypeInst != NULL)
10431 {
10432 if (!checkTypeInst->mTypeDef->mNestedTypes.IsEmpty())
10433 {
10434 if (mSystem->FindTypeDef(findName, numGenericArgs, useProject, checkTypeInst->mTypeDef->mFullNameEx, allowPrivate, &lookupCtx))
10435 {
10436 foundInnerType = lookupCtx.mBestTypeDef;
10437

Callers 1

VerifyTypeLookupsMethod · 0.80

Calls 14

BfAtomCompositeClass · 0.85
FailFunction · 0.85
TypeToStringFunction · 0.85
HasValidMatchMethod · 0.80
ContainsKeyMethod · 0.80
FindTypeDefMethod · 0.45
ToTypeInstanceMethod · 0.45
emptyMethod · 0.45
IsEmptyMethod · 0.45
TryGetMethod · 0.45
c_strMethod · 0.45

Tested by

no test coverage detected