| 3711 | } |
| 3712 | |
| 3713 | void BfSystem::UpdateEmittedTypeDef(BfTypeDef* typeDef) |
| 3714 | { |
| 3715 | auto fromTypeDef = typeDef->mEmitParent; |
| 3716 | |
| 3717 | BF_ASSERT(fromTypeDef->mNextRevision == NULL); |
| 3718 | |
| 3719 | BfLogSys(this, "UpdateTypeDefCopy %p from %p (decl:%p)\n", typeDef, fromTypeDef, fromTypeDef->mTypeDeclaration); |
| 3720 | |
| 3721 | BF_ASSERT((typeDef->mDefState == BfTypeDef::DefState_Emitted) || (typeDef->mDefState == BfTypeDef::DefState_EmittedDirty)); |
| 3722 | BF_ASSERT((fromTypeDef->mDefState != BfTypeDef::DefState_Emitted) && (fromTypeDef->mDefState != BfTypeDef::DefState_EmittedDirty)); |
| 3723 | |
| 3724 | typeDef->mTypeDeclaration = fromTypeDef->mTypeDeclaration; |
| 3725 | typeDef->mOuterType = fromTypeDef->mOuterType; |
| 3726 | |
| 3727 | for (int methodIdx = 0; methodIdx < (int)typeDef->mMethods.size(); methodIdx++) |
| 3728 | { |
| 3729 | auto methodDef = typeDef->mMethods[methodIdx]; |
| 3730 | if (methodIdx >= fromTypeDef->mMethods.mSize) |
| 3731 | { |
| 3732 | BF_ASSERT(methodDef->mDeclaringType == typeDef); |
| 3733 | continue; |
| 3734 | } |
| 3735 | |
| 3736 | BF_ASSERT(methodDef->mDeclaringType != typeDef); |
| 3737 | |
| 3738 | for (auto param : methodDef->mParams) |
| 3739 | delete param; |
| 3740 | for (auto genericParam : methodDef->mGenericParams) |
| 3741 | delete genericParam; |
| 3742 | |
| 3743 | auto fromMethodDef = fromTypeDef->mMethods[methodIdx]; |
| 3744 | |
| 3745 | if ((fromMethodDef->mIsOperator) && (methodDef->mIsOperator)) |
| 3746 | { |
| 3747 | auto fromOperatorDef = (BfOperatorDef*)fromMethodDef; |
| 3748 | auto operatorDef = (BfOperatorDef*)methodDef; |
| 3749 | *operatorDef = *fromOperatorDef; |
| 3750 | } |
| 3751 | else |
| 3752 | { |
| 3753 | *methodDef = *fromMethodDef; |
| 3754 | } |
| 3755 | |
| 3756 | for (int paramIdx = 0; paramIdx < fromMethodDef->mParams.mSize; paramIdx++) |
| 3757 | { |
| 3758 | auto fromParamDef = fromMethodDef->mParams[paramIdx]; |
| 3759 | BfParameterDef* paramDef = new BfParameterDef(); |
| 3760 | *paramDef = *fromParamDef; |
| 3761 | methodDef->mParams[paramIdx] = paramDef; |
| 3762 | } |
| 3763 | |
| 3764 | for (int genericParamIdx = 0; genericParamIdx < fromMethodDef->mGenericParams.mSize; genericParamIdx++) |
| 3765 | { |
| 3766 | auto fromGenericParam = fromMethodDef->mGenericParams[genericParamIdx]; |
| 3767 | BfGenericParamDef* genericParam = new BfGenericParamDef(); |
| 3768 | *genericParam = *fromGenericParam; |
| 3769 | methodDef->mGenericParams[genericParamIdx] = genericParam; |
| 3770 | } |
no test coverage detected