| 26097 | } |
| 26098 | |
| 26099 | void BfModule::CompareDeclTypes(BfTypeInstance* typeInst, BfTypeDef* newDeclType, BfTypeDef* prevDeclType, bool& isBetter, bool& isWorse) |
| 26100 | { |
| 26101 | if ((!prevDeclType->IsExtension()) && (newDeclType->IsExtension())) |
| 26102 | { |
| 26103 | // When we provide an extension override in the same project a root type override |
| 26104 | isBetter = true; |
| 26105 | isWorse = false; |
| 26106 | } |
| 26107 | else |
| 26108 | { |
| 26109 | isBetter = newDeclType->mProject->ContainsReference(prevDeclType->mProject); |
| 26110 | isWorse = prevDeclType->mProject->ContainsReference(newDeclType->mProject); |
| 26111 | } |
| 26112 | |
| 26113 | if ((isBetter == isWorse) && (typeInst != NULL) && (newDeclType->IsExtension()) && (prevDeclType->IsExtension())) |
| 26114 | { |
| 26115 | if ((typeInst->mGenericTypeInfo != NULL) && (typeInst->mGenericTypeInfo->mGenericExtensionInfo != NULL)) |
| 26116 | { |
| 26117 | isBetter = false; |
| 26118 | isWorse = false; |
| 26119 | |
| 26120 | auto newConstraints = typeInst->GetGenericParamsVector(newDeclType); |
| 26121 | auto prevConstraints = typeInst->GetGenericParamsVector(prevDeclType); |
| 26122 | |
| 26123 | for (int genericIdx = 0; genericIdx < (int)newConstraints->size(); genericIdx++) |
| 26124 | { |
| 26125 | auto newConstraint = (*newConstraints)[genericIdx]; |
| 26126 | auto prevConstraint = (*prevConstraints)[genericIdx]; |
| 26127 | |
| 26128 | bool newIsSubset = AreConstraintsSubset(newConstraint, prevConstraint); |
| 26129 | bool prevIsSubset = AreConstraintsSubset(prevConstraint, newConstraint); |
| 26130 | |
| 26131 | if ((prevIsSubset) && (!newIsSubset)) |
| 26132 | isBetter = true; |
| 26133 | if ((!prevIsSubset) && (newIsSubset)) |
| 26134 | isWorse = true; |
| 26135 | } |
| 26136 | } |
| 26137 | } |
| 26138 | } |
| 26139 | |
| 26140 | bool BfModule::SlotVirtualMethod(BfMethodInstance* methodInstance, BfAmbiguityContext* ambiguityContext) |
| 26141 | { |
no test coverage detected