@@ -31,17 +31,19 @@ class EssentialTypeCategory extends TEssentialTypeCategory {
3131 }
3232}
3333
34+ class EssentiallySignedOrUnsignedType extends EssentialTypeCategory {
35+ EssentiallySignedOrUnsignedType ( ) {
36+ this = EssentiallySignedType ( ) or this = EssentiallyUnsignedType ( )
37+ }
38+ }
39+
3440/**
3541 * An expression in the program that evaluates to a compile time constant signed or unsigned integer.
3642 */
3743private class ConstantIntegerExpr extends Expr {
3844 pragma [ noinline]
3945 ConstantIntegerExpr ( ) {
40- getEssentialTypeCategory ( this .getType ( ) ) =
41- [
42- EssentiallyUnsignedType ( ) .( EssentialTypeCategory ) ,
43- EssentiallySignedType ( ) .( EssentialTypeCategory )
44- ] and
46+ getEssentialTypeCategory ( this .getType ( ) ) instanceof EssentiallySignedOrUnsignedType and
4547 exists ( this .getValue ( ) .toFloat ( ) ) and
4648 not this instanceof Conversion
4749 }
@@ -235,9 +237,7 @@ class EssentialUnaryPlusExpr extends EssentialExpr, UnaryPlusExpr {
235237 operandEssentialType = getEssentialType ( getOperand ( ) ) and
236238 operandEssentialTypeCategory = getEssentialTypeCategory ( operandEssentialType )
237239 |
238- if
239- operandEssentialTypeCategory =
240- [ EssentiallyUnsignedType ( ) .( TEssentialTypeCategory ) , EssentiallySignedType ( ) ]
240+ if operandEssentialTypeCategory instanceof EssentiallySignedOrUnsignedType
241241 then result = operandEssentialType
242242 else result = getStandardType ( )
243243 )
@@ -321,8 +321,7 @@ class EssentialBinaryOperationSubjectToUsualConversions extends EssentialExpr, B
321321 |
322322 if
323323 leftEssentialTypeCategory = rightEssentialTypeCategory and
324- leftEssentialTypeCategory =
325- [ EssentiallyUnsignedType ( ) , EssentiallySignedType ( ) .( TEssentialTypeCategory ) ]
324+ leftEssentialTypeCategory instanceof EssentiallySignedOrUnsignedType
326325 then
327326 if exists ( getValue ( ) )
328327 then (
@@ -352,8 +351,7 @@ class EssentialAddExpr extends EssentialBinaryOperationSubjectToUsualConversions
352351 |
353352 if
354353 operandTypeCategory = EssentiallyCharacterType ( ) and
355- otherOperandTypeCategory =
356- [ EssentiallySignedType ( ) , EssentiallyUnsignedType ( ) .( TEssentialTypeCategory ) ]
354+ otherOperandTypeCategory instanceof EssentiallySignedOrUnsignedType
357355 then result instanceof PlainCharType
358356 else result = super .getEssentialType ( )
359357 )
@@ -374,8 +372,7 @@ class EssentialSubExpr extends EssentialBinaryOperationSubjectToUsualConversions
374372 |
375373 if
376374 leftEssentialTypeCategory = EssentiallyCharacterType ( ) and
377- rightEssentialTypeCategory =
378- [ EssentiallySignedType ( ) , EssentiallyUnsignedType ( ) .( TEssentialTypeCategory ) ]
375+ rightEssentialTypeCategory instanceof EssentiallySignedOrUnsignedType
379376 then result instanceof PlainCharType
380377 else result = super .getEssentialType ( )
381378 )
0 commit comments