@@ -286,11 +286,26 @@ class EssentialConditionalExpr extends EssentialExpr, ConditionalExpr {
286
286
}
287
287
}
288
288
289
- class EssentialBinaryArithmeticExpr extends EssentialExpr , BinaryArithmeticOperation {
290
- EssentialBinaryArithmeticExpr ( ) {
291
- // GNU C extension has min/max which we can ignore
292
- not this instanceof MinExpr and
293
- not this instanceof MaxExpr
289
+ /**
290
+ * A binary operation subject to usual conversions, with essential type behaviour as specified by D.7.9.
291
+ */
292
+ class EssentialBinaryOperationSubjectToUsualConversions extends EssentialExpr , BinaryOperation {
293
+ EssentialBinaryOperationSubjectToUsualConversions ( ) {
294
+ this instanceof MulExpr
295
+ or
296
+ this instanceof DivExpr
297
+ or
298
+ this instanceof RemExpr
299
+ or
300
+ this instanceof AddExpr
301
+ or
302
+ this instanceof SubExpr
303
+ or
304
+ this instanceof BitwiseAndExpr
305
+ or
306
+ this instanceof BitwiseOrExpr
307
+ or
308
+ this instanceof BitwiseXorExpr
294
309
}
295
310
296
311
override Type getEssentialType ( ) {
@@ -353,51 +368,7 @@ class EssentialBinaryArithmeticExpr extends EssentialExpr, BinaryArithmeticOpera
353
368
}
354
369
}
355
370
356
- class EssentialBinaryBitwiseExpr extends EssentialExpr , BinaryBitwiseOperation {
357
- EssentialBinaryBitwiseExpr ( ) {
358
- not this instanceof LShiftExpr and
359
- not this instanceof RShiftExpr
360
- }
361
-
362
- override Type getEssentialType ( ) {
363
- exists (
364
- Type leftEssentialType , Type rightEssentialType ,
365
- EssentialTypeCategory leftEssentialTypeCategory ,
366
- EssentialTypeCategory rightEssentialTypeCategory
367
- |
368
- leftEssentialType = getEssentialType ( getLeftOperand ( ) ) and
369
- rightEssentialType = getEssentialType ( getRightOperand ( ) ) and
370
- leftEssentialTypeCategory = getEssentialTypeCategory ( leftEssentialType ) and
371
- rightEssentialTypeCategory = getEssentialTypeCategory ( rightEssentialType )
372
- |
373
- if
374
- leftEssentialTypeCategory = EssentiallySignedType ( ) and
375
- rightEssentialTypeCategory = EssentiallySignedType ( )
376
- then
377
- if exists ( getValue ( ) )
378
- then result = stlr ( this )
379
- else (
380
- if leftEssentialType .getSize ( ) > rightEssentialType .getSize ( )
381
- then result = leftEssentialType
382
- else result = rightEssentialType
383
- )
384
- else
385
- if
386
- leftEssentialTypeCategory = EssentiallyUnsignedType ( ) and
387
- rightEssentialTypeCategory = EssentiallyUnsignedType ( )
388
- then
389
- if exists ( getValue ( ) )
390
- then result = utlr ( this )
391
- else (
392
- if leftEssentialType .getSize ( ) > rightEssentialType .getSize ( )
393
- then result = leftEssentialType
394
- else result = rightEssentialType
395
- )
396
- else result = this .getStandardType ( )
397
- )
398
- }
399
- }
400
-
371
+ // }
401
372
/**
402
373
* A named Enum type, as per D.5.
403
374
*/
0 commit comments