| 10378 | } |
| 10379 | |
| 10380 | BfTypeDef* 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 |
no test coverage detected