@@ -31,17 +31,19 @@ class EssentialTypeCategory extends TEssentialTypeCategory {
31
31
}
32
32
}
33
33
34
+ class EssentiallySignedOrUnsignedType extends EssentialTypeCategory {
35
+ EssentiallySignedOrUnsignedType ( ) {
36
+ this = EssentiallySignedType ( ) or this = EssentiallyUnsignedType ( )
37
+ }
38
+ }
39
+
34
40
/**
35
41
* An expression in the program that evaluates to a compile time constant signed or unsigned integer.
36
42
*/
37
43
private class ConstantIntegerExpr extends Expr {
38
44
pragma [ noinline]
39
45
ConstantIntegerExpr ( ) {
40
- getEssentialTypeCategory ( this .getType ( ) ) =
41
- [
42
- EssentiallyUnsignedType ( ) .( EssentialTypeCategory ) ,
43
- EssentiallySignedType ( ) .( EssentialTypeCategory )
44
- ] and
46
+ getEssentialTypeCategory ( this .getType ( ) ) instanceof EssentiallySignedOrUnsignedType and
45
47
exists ( this .getValue ( ) .toFloat ( ) ) and
46
48
not this instanceof Conversion
47
49
}
@@ -235,9 +237,7 @@ class EssentialUnaryPlusExpr extends EssentialExpr, UnaryPlusExpr {
235
237
operandEssentialType = getEssentialType ( getOperand ( ) ) and
236
238
operandEssentialTypeCategory = getEssentialTypeCategory ( operandEssentialType )
237
239
|
238
- if
239
- operandEssentialTypeCategory =
240
- [ EssentiallyUnsignedType ( ) .( TEssentialTypeCategory ) , EssentiallySignedType ( ) ]
240
+ if operandEssentialTypeCategory instanceof EssentiallySignedOrUnsignedType
241
241
then result = operandEssentialType
242
242
else result = getStandardType ( )
243
243
)
@@ -321,8 +321,7 @@ class EssentialBinaryOperationSubjectToUsualConversions extends EssentialExpr, B
321
321
|
322
322
if
323
323
leftEssentialTypeCategory = rightEssentialTypeCategory and
324
- leftEssentialTypeCategory =
325
- [ EssentiallyUnsignedType ( ) , EssentiallySignedType ( ) .( TEssentialTypeCategory ) ]
324
+ leftEssentialTypeCategory instanceof EssentiallySignedOrUnsignedType
326
325
then
327
326
if exists ( getValue ( ) )
328
327
then (
@@ -352,8 +351,7 @@ class EssentialAddExpr extends EssentialBinaryOperationSubjectToUsualConversions
352
351
|
353
352
if
354
353
operandTypeCategory = EssentiallyCharacterType ( ) and
355
- otherOperandTypeCategory =
356
- [ EssentiallySignedType ( ) , EssentiallyUnsignedType ( ) .( TEssentialTypeCategory ) ]
354
+ otherOperandTypeCategory instanceof EssentiallySignedOrUnsignedType
357
355
then result instanceof PlainCharType
358
356
else result = super .getEssentialType ( )
359
357
)
@@ -374,8 +372,7 @@ class EssentialSubExpr extends EssentialBinaryOperationSubjectToUsualConversions
374
372
|
375
373
if
376
374
leftEssentialTypeCategory = EssentiallyCharacterType ( ) and
377
- rightEssentialTypeCategory =
378
- [ EssentiallySignedType ( ) , EssentiallyUnsignedType ( ) .( TEssentialTypeCategory ) ]
375
+ rightEssentialTypeCategory instanceof EssentiallySignedOrUnsignedType
379
376
then result instanceof PlainCharType
380
377
else result = super .getEssentialType ( )
381
378
)
0 commit comments