MCPcopy Create free account
hub / github.com/beefytech/Beef / CompareDeclTypes

Method CompareDeclTypes

IDEHelper/Compiler/BfModule.cpp:26099–26138  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

26097}
26098
26099void 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
26140bool BfModule::SlotVirtualMethod(BfMethodInstance* methodInstance, BfAmbiguityContext* ambiguityContext)
26141{

Callers 2

TryDevirtualizeCallMethod · 0.80

Calls 4

IsExtensionMethod · 0.80
ContainsReferenceMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected