@@ -257,6 +257,13 @@ class EssentialUnaryMinusExpr extends EssentialExpr, UnaryMinusExpr {
257257 }
258258}
259259
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+
260267class EssentialConditionalExpr extends EssentialExpr , ConditionalExpr {
261268 override Type getEssentialType ( ) {
262269 exists ( Type thenEssentialType , Type elseEssentialType |
@@ -269,10 +276,7 @@ class EssentialConditionalExpr extends EssentialExpr, ConditionalExpr {
269276 if
270277 getEssentialTypeCategory ( thenEssentialType ) = getEssentialTypeCategory ( elseEssentialType ) and
271278 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 )
276280 else result = this .getStandardType ( )
277281 )
278282 }
@@ -316,15 +320,11 @@ class EssentialBinaryOperationSubjectToUsualConversions extends EssentialExpr, B
316320 leftEssentialTypeCategory instanceof EssentiallySignedOrUnsignedType
317321 then
318322 if exists ( getValue ( ) )
319- then (
323+ then
320324 leftEssentialTypeCategory = EssentiallySignedType ( ) and result = stlr ( this )
321325 or
322326 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 )
328328 else result = this .getStandardType ( )
329329 )
330330 }
0 commit comments