@@ -342,28 +342,50 @@ class EssentialBinaryOperationSubjectToUsualConversions extends EssentialExpr, B
342342 then result = leftEssentialType
343343 else result = rightEssentialType
344344 )
345- else
346- if
347- this instanceof AddExpr and
348- (
349- leftEssentialTypeCategory = EssentiallyCharacterType ( )
350- or
351- rightEssentialTypeCategory = EssentiallyCharacterType ( )
352- ) and
353- (
354- leftEssentialTypeCategory =
355- [ EssentiallySignedType ( ) , EssentiallyUnsignedType ( ) .( TEssentialTypeCategory ) ]
356- or
357- rightEssentialTypeCategory =
358- [ EssentiallySignedType ( ) , EssentiallyUnsignedType ( ) .( TEssentialTypeCategory ) ]
359- )
360- or
361- this instanceof SubExpr and
362- leftEssentialTypeCategory = EssentiallyCharacterType ( ) and
363- rightEssentialTypeCategory =
364- [ EssentiallySignedType ( ) , EssentiallyUnsignedType ( ) .( TEssentialTypeCategory ) ]
365- then result instanceof PlainCharType
366- else result = this .getStandardType ( )
345+ else result = this .getStandardType ( )
346+ )
347+ }
348+ }
349+
350+ /**
351+ * An add expression, with essential type behaviour as specified by D.7.9.
352+ */
353+ class EssentialAddExpr extends EssentialBinaryOperationSubjectToUsualConversions , AddExpr {
354+ override Type getEssentialType ( ) {
355+ exists (
356+ EssentialTypeCategory operandTypeCategory , EssentialTypeCategory otherOperandTypeCategory
357+ |
358+ operandTypeCategory = getEssentialTypeCategory ( getEssentialType ( getAnOperand ( ) ) ) and
359+ otherOperandTypeCategory = getEssentialTypeCategory ( getEssentialType ( getAnOperand ( ) ) )
360+ |
361+ if
362+ operandTypeCategory = EssentiallyCharacterType ( ) and
363+ otherOperandTypeCategory =
364+ [ EssentiallySignedType ( ) , EssentiallyUnsignedType ( ) .( TEssentialTypeCategory ) ]
365+ then result instanceof PlainCharType
366+ else result = super .getEssentialType ( )
367+ )
368+ }
369+ }
370+
371+ /**
372+ * A sub expression, with essential type behaviour as specified by D.7.9.
373+ */
374+ class EssentialSubExpr extends EssentialBinaryOperationSubjectToUsualConversions , SubExpr {
375+ override Type getEssentialType ( ) {
376+ exists (
377+ EssentialTypeCategory leftEssentialTypeCategory ,
378+ EssentialTypeCategory rightEssentialTypeCategory
379+ |
380+ leftEssentialTypeCategory = getEssentialTypeCategory ( getEssentialType ( getLeftOperand ( ) ) ) and
381+ rightEssentialTypeCategory = getEssentialTypeCategory ( getEssentialType ( getRightOperand ( ) ) )
382+ |
383+ if
384+ leftEssentialTypeCategory = EssentiallyCharacterType ( ) and
385+ rightEssentialTypeCategory =
386+ [ EssentiallySignedType ( ) , EssentiallyUnsignedType ( ) .( TEssentialTypeCategory ) ]
387+ then result instanceof PlainCharType
388+ else result = super .getEssentialType ( )
367389 )
368390 }
369391}
0 commit comments