| 677 | } |
| 678 | |
| 679 | void BfModule::InitType(BfType* resolvedTypeRef, BfPopulateType populateType) |
| 680 | { |
| 681 | BP_ZONE("BfModule::InitType"); |
| 682 | |
| 683 | if (auto depType = resolvedTypeRef->ToDependedType()) |
| 684 | { |
| 685 | if ((mCurMethodInstance != NULL) && (mCurMethodInstance->mMethodInfoEx != NULL)) |
| 686 | { |
| 687 | depType->mDependencyMap.mMinDependDepth = mCurMethodInstance->mMethodInfoEx->mMinDependDepth + 1; |
| 688 | } |
| 689 | else if (mCurTypeInstance != NULL) |
| 690 | { |
| 691 | depType->mDependencyMap.mMinDependDepth = mCurTypeInstance->mDependencyMap.mMinDependDepth + 1; |
| 692 | } |
| 693 | } |
| 694 | |
| 695 | SetAndRestoreValue<BfTypeInstance*> prevTypeInstance(mCurTypeInstance, resolvedTypeRef->ToTypeInstance()); |
| 696 | SetAndRestoreValue<BfMethodInstance*> prevMethodInstance(mCurMethodInstance, NULL); |
| 697 | |
| 698 | if (mCompiler->mHotState != NULL) |
| 699 | mCompiler->mHotState->mHasNewTypes = true; |
| 700 | |
| 701 | auto typeInst = resolvedTypeRef->ToTypeInstance(); |
| 702 | if (typeInst != NULL) |
| 703 | { |
| 704 | CheckInjectNewRevision(typeInst); |
| 705 | |
| 706 | BF_ASSERT(!typeInst->mTypeDef->IsEmitted()); |
| 707 | |
| 708 | if (typeInst->mBaseType != NULL) |
| 709 | BF_ASSERT((typeInst->mBaseType->mRebuildFlags & BfTypeRebuildFlag_Deleted) == 0); |
| 710 | |
| 711 | if ((typeInst->mTypeDef != NULL) && (typeInst->mTypeDef->mDefState == BfTypeDef::DefState_New) && |
| 712 | (typeInst->mTypeDef->mNextRevision == NULL)) |
| 713 | { |
| 714 | mContext->HandleChangedTypeDef(typeInst->mTypeDef); |
| 715 | typeInst->mTypeDef->mDefState = BfTypeDef::DefState_Defined; |
| 716 | } |
| 717 | |
| 718 | typeInst->mIsReified = mIsReified; |
| 719 | |
| 720 | //BF_ASSERT(typeInst->mTypeDef->mTypeCode != BfTypeCode_Extension); |
| 721 | |
| 722 | typeInst->mRevision = mCompiler->mRevision; |
| 723 | if (typeInst->mTypeDef != NULL) |
| 724 | BF_ASSERT(typeInst->mTypeDef->mDefState != BfTypeDef::DefState_Deleted); |
| 725 | |
| 726 | if (resolvedTypeRef->IsTuple()) |
| 727 | { |
| 728 | auto tupleType = (BfTypeInstance*)resolvedTypeRef; |
| 729 | for (int fieldIdx = 0; fieldIdx < (int)tupleType->mFieldInstances.size(); fieldIdx++) |
| 730 | { |
| 731 | auto fieldInstance = (BfFieldInstance*)&tupleType->mFieldInstances[fieldIdx]; |
| 732 | // We need to make sure dependencies get set immediately since we already resolved the types |
| 733 | AddFieldDependency(typeInst, fieldInstance, fieldInstance->mResolvedType); |
| 734 | } |
| 735 | } |
| 736 | } |
no test coverage detected