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

Method CompareMethods

IDEHelper/DbgExprEvaluator.cpp:126–303  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

124}*/
125
126void DwMethodMatcher::CompareMethods(DbgSubprogram* prevMethodInstance, DwTypeVector* prevGenericArgumentsSubstitute,
127 DbgSubprogram* newMethodInstance, DwTypeVector* genericArgumentsSubstitute,
128 bool* outNewIsBetter, bool* outNewIsWorse, bool allowSpecializeFail)
129{
130 int numUsedParams = 0;
131 int prevNumUsedParams = 0;
132 bool usedExtendedForm = false;
133 bool prevUsedExtendedForm = false;
134
135 bool isBetter = false;
136 bool isWorse = false;
137 int argIdx = 0;
138
139 DbgSubprogram* prevMethodDef = prevMethodInstance;
140 DbgSubprogram* newMethodDef = newMethodInstance;
141
142#define SET_BETTER_OR_WORSE(lhs, rhs) \
143 if ((lhs) && !(rhs)) isBetter = true; \
144 if (!(lhs) && (rhs)) isWorse = true;
145
146 int newArgOffset = newMethodInstance->mHasThis ? 1 : 0;
147 int prevArgOffset = prevMethodInstance->mHasThis ? 1 : 0;
148
149 DbgVariable* param = newMethodInstance->mParams.mHead;
150 if (newMethodInstance->mHasThis)
151 param = param->mNext;
152 DbgVariable* prevParam = prevMethodInstance->mParams.mHead;
153 if (prevMethodInstance->mHasThis)
154 prevParam = prevParam->mNext;
155
156 for (argIdx = 0; argIdx < (int) mArguments.size(); argIdx++)
157 {
158 DbgTypedValue arg = mArguments[argIdx];
159 DbgType* paramType = param->mType;
160 DbgType* prevParamType = prevParam->mType;
161
162 numUsedParams++;
163 prevNumUsedParams++;
164
165 /*if ((genericArgumentsSubstitute != NULL) && (paramType->IsUnspecializedType()))
166 paramType = mModule->SpecializeMethodType(paramType, *genericArgumentsSubstitute, allowSpecializeFail);
167 if (prevParamType->IsUnspecializedType())
168 prevParamType = mModule->SpecializeMethodType(prevParamType, *prevGenericArgumentsSubstitute, allowSpecializeFail);*/
169
170 //paramType = paramType->RemoveModifiers();
171 //prevParamType = prevParamType->RemoveModifiers();
172
173 if (paramType != prevParamType)
174 {
175 /*if ((paramType->IsGenericParam()) || (prevParamType->IsGenericParam()))
176 {
177 BF_ASSERT(allowSpecializeFail);
178 if (!prevParamType->IsGenericParam())
179 isBetter = true;
180 else if (!paramType->IsGenericParam())
181 isWorse = true;
182 }
183 else*/ if ((paramType->IsInteger()) && (prevParamType->IsInteger()))

Callers

nothing calls this directly

Calls 5

sizeMethod · 0.45
IsIntegerMethod · 0.45
IsSignedMethod · 0.45
CanCastMethod · 0.45
IsConstMethod · 0.45

Tested by

no test coverage detected