@@ -257,6 +257,13 @@ class EssentialUnaryMinusExpr extends EssentialExpr, UnaryMinusExpr {
257
257
}
258
258
}
259
259
260
+ bindingset [ essentialTypeA, essentialTypeB]
261
+ private Type maxRankType ( Type essentialTypeA , Type essentialTypeB ) {
262
+ if essentialTypeA .getSize ( ) > essentialTypeB .getSize ( )
263
+ then result = essentialTypeA
264
+ else result = essentialTypeB
265
+ }
266
+
260
267
class EssentialConditionalExpr extends EssentialExpr , ConditionalExpr {
261
268
override Type getEssentialType ( ) {
262
269
exists ( Type thenEssentialType , Type elseEssentialType |
@@ -269,10 +276,7 @@ class EssentialConditionalExpr extends EssentialExpr, ConditionalExpr {
269
276
if
270
277
getEssentialTypeCategory ( thenEssentialType ) = getEssentialTypeCategory ( elseEssentialType ) and
271
278
getEssentialTypeCategory ( thenEssentialType ) instanceof EssentiallySignedOrUnsignedType
272
- then
273
- if thenEssentialType .getSize ( ) > elseEssentialType .getSize ( )
274
- then result = thenEssentialType
275
- else result = elseEssentialType
279
+ then result = maxRankType ( thenEssentialType , elseEssentialType )
276
280
else result = this .getStandardType ( )
277
281
)
278
282
}
@@ -316,15 +320,11 @@ class EssentialBinaryOperationSubjectToUsualConversions extends EssentialExpr, B
316
320
leftEssentialTypeCategory instanceof EssentiallySignedOrUnsignedType
317
321
then
318
322
if exists ( getValue ( ) )
319
- then (
323
+ then
320
324
leftEssentialTypeCategory = EssentiallySignedType ( ) and result = stlr ( this )
321
325
or
322
326
leftEssentialTypeCategory = EssentiallyUnsignedType ( ) and result = utlr ( this )
323
- ) else (
324
- if leftEssentialType .getSize ( ) > rightEssentialType .getSize ( )
325
- then result = leftEssentialType
326
- else result = rightEssentialType
327
- )
327
+ else result = maxRankType ( leftEssentialType , rightEssentialType )
328
328
else result = this .getStandardType ( )
329
329
)
330
330
}
0 commit comments