| 3557 | } |
| 3558 | |
| 3559 | void BfSystem::CopyTypeDef(BfTypeDef* typeDef, BfTypeDef* fromTypeDef) |
| 3560 | { |
| 3561 | BfLogSys(this, "CopyTypeDef %p from %p Hash: %d\n", typeDef, fromTypeDef, fromTypeDef->mHash); |
| 3562 | |
| 3563 | for (auto fromMethodDef : fromTypeDef->mMethods) |
| 3564 | { |
| 3565 | BfMethodDef* methodDef; |
| 3566 | if (fromMethodDef->mIsOperator) |
| 3567 | { |
| 3568 | auto fromOperatorDef = (BfOperatorDef*)fromMethodDef; |
| 3569 | auto operatorDef = new BfOperatorDef(); |
| 3570 | methodDef = operatorDef; |
| 3571 | *operatorDef = *fromOperatorDef; |
| 3572 | } |
| 3573 | else |
| 3574 | { |
| 3575 | methodDef = new BfMethodDef(); |
| 3576 | *methodDef = *fromMethodDef; |
| 3577 | } |
| 3578 | fromMethodDef->mParamNameMap = NULL; |
| 3579 | |
| 3580 | if (methodDef->mDeclaringType == fromTypeDef) |
| 3581 | methodDef->mDeclaringType = typeDef; |
| 3582 | |
| 3583 | for (int paramIdx = 0; paramIdx < fromMethodDef->mParams.mSize; paramIdx++) |
| 3584 | { |
| 3585 | auto fromParamDef = fromMethodDef->mParams[paramIdx]; |
| 3586 | BfParameterDef* paramDef = new BfParameterDef(); |
| 3587 | *paramDef = *fromParamDef; |
| 3588 | methodDef->mParams[paramIdx] = paramDef; |
| 3589 | } |
| 3590 | |
| 3591 | for (int genericParamIdx = 0; genericParamIdx < fromMethodDef->mGenericParams.mSize; genericParamIdx++) |
| 3592 | { |
| 3593 | auto fromGenericParam = fromMethodDef->mGenericParams[genericParamIdx]; |
| 3594 | BfGenericParamDef* genericParam = new BfGenericParamDef(); |
| 3595 | *genericParam = *fromGenericParam; |
| 3596 | methodDef->mGenericParams[genericParamIdx] = genericParam; |
| 3597 | } |
| 3598 | |
| 3599 | methodDef->mNextWithSameName = NULL; |
| 3600 | typeDef->mMethods.Add(methodDef); |
| 3601 | } |
| 3602 | |
| 3603 | for (auto operatorDef : fromTypeDef->mOperators) |
| 3604 | { |
| 3605 | auto methodDef = typeDef->mMethods[operatorDef->mIdx]; |
| 3606 | BF_ASSERT(methodDef->mIsOperator); |
| 3607 | if (methodDef->mIsOperator) |
| 3608 | typeDef->mOperators.Add((BfOperatorDef*)methodDef); |
| 3609 | } |
| 3610 | |
| 3611 | for (auto fromPropDef : fromTypeDef->mProperties) |
| 3612 | { |
| 3613 | BfPropertyDef* propDef = new BfPropertyDef(); |
| 3614 | *propDef = *fromPropDef; |
| 3615 | if (propDef->mDeclaringType == fromTypeDef) |
| 3616 | propDef->mDeclaringType = typeDef; |
no test coverage detected