| 8519 | } |
| 8520 | |
| 8521 | BfType* BfModule::ResolveTypeDef(BfTypeDef* typeDef, BfPopulateType populateType, BfResolveTypeRefFlags resolveFlags) |
| 8522 | { |
| 8523 | BF_ASSERT(typeDef->mDefState != BfTypeDef::DefState_Emitted); |
| 8524 | |
| 8525 | if (typeDef->mTypeDeclaration == NULL) |
| 8526 | { |
| 8527 | BF_ASSERT(!typeDef->mIsDelegate && !typeDef->mIsFunction); |
| 8528 | } |
| 8529 | |
| 8530 | //BF_ASSERT(typeDef->mTypeCode != BfTypeCode_Extension); |
| 8531 | BF_ASSERT(!typeDef->mIsPartial || typeDef->mIsCombinedPartial); |
| 8532 | |
| 8533 | BF_ASSERT(typeDef->mDefState != BfTypeDef::DefState_Deleted); |
| 8534 | BF_ASSERT((typeDef->mOuterType == NULL) || (typeDef->mOuterType->mDefState != BfTypeDef::DefState_Deleted)); |
| 8535 | |
| 8536 | if (typeDef->mGenericParamDefs.size() != 0) |
| 8537 | return ResolveTypeDef(typeDef, BfTypeVector(), populateType, resolveFlags); |
| 8538 | |
| 8539 | auto typeDefTypeRef = mContext->mTypeDefTypeRefPool.Get(); |
| 8540 | typeDefTypeRef->mTypeDef = typeDef; |
| 8541 | auto resolvedtypeDefType = ResolveTypeRef(typeDefTypeRef, populateType, resolveFlags); |
| 8542 | if (resolvedtypeDefType == NULL) |
| 8543 | { |
| 8544 | mContext->mTypeDefTypeRefPool.GiveBack(typeDefTypeRef); |
| 8545 | return NULL; |
| 8546 | } |
| 8547 | |
| 8548 | mContext->mTypeDefTypeRefPool.GiveBack(typeDefTypeRef); |
| 8549 | //BF_ASSERT(resolvedtypeDefType->IsTypeInstance() || resolvedtypeDefType->IsPrimitiveType()); |
| 8550 | return resolvedtypeDefType; |
| 8551 | } |
| 8552 | |
| 8553 | // Get BaseClass even when we haven't populated the type yet |
| 8554 | BfTypeInstance* BfModule::GetBaseType(BfTypeInstance* typeInst) |
no test coverage detected