@@ -16,8 +16,32 @@ import type * as NodeType from './NodeType';
1616import { type LiteralValueOrUnknown , UnknownValue } from './shared/Expression' ;
1717import { type ExpressionNode , NodeBase } from './shared/Node' ;
1818
19+ type Operator =
20+ | '!='
21+ | '!=='
22+ | '%'
23+ | '&'
24+ | '*'
25+ | '**'
26+ | '+'
27+ | '-'
28+ | '/'
29+ | '<'
30+ | '<<'
31+ | '<='
32+ | '=='
33+ | '==='
34+ | '>'
35+ | '>='
36+ | '>>'
37+ | '>>>'
38+ | '^'
39+ | '|'
40+ | 'in'
41+ | 'instanceof' ;
42+
1943const binaryOperators : {
20- [ operator : string ] : ( left : LiteralValue , right : LiteralValue ) => LiteralValueOrUnknown ;
44+ [ operator in Operator ] ? : ( left : LiteralValue , right : LiteralValue ) => LiteralValueOrUnknown ;
2145} = {
2246 '!=' : ( left , right ) => left != right ,
2347 '!==' : ( left , right ) => left !== right ,
@@ -29,15 +53,13 @@ const binaryOperators: {
2953 '+' : ( left : any , right : any ) => left + right ,
3054 '-' : ( left : any , right : any ) => left - right ,
3155 '/' : ( left : any , right : any ) => left / right ,
32- '<' : ( left , right ) => ( left as NonNullable < LiteralValue > ) < ( right as NonNullable < LiteralValue > ) ,
56+ '<' : ( left , right ) => left ! < right ! ,
3357 '<<' : ( left : any , right : any ) => left << right ,
34- '<=' : ( left , right ) =>
35- ( left as NonNullable < LiteralValue > ) <= ( right as NonNullable < LiteralValue > ) ,
58+ '<=' : ( left , right ) => left ! <= right ! ,
3659 '==' : ( left , right ) => left == right ,
3760 '===' : ( left , right ) => left === right ,
38- '>' : ( left , right ) => ( left as NonNullable < LiteralValue > ) > ( right as NonNullable < LiteralValue > ) ,
39- '>=' : ( left , right ) =>
40- ( left as NonNullable < LiteralValue > ) >= ( right as NonNullable < LiteralValue > ) ,
61+ '>' : ( left , right ) => left ! > right ! ,
62+ '>=' : ( left , right ) => left ! >= right ! ,
4163 '>>' : ( left : any , right : any ) => left >> right ,
4264 '>>>' : ( left : any , right : any ) => left >>> right ,
4365 '^' : ( left : any , right : any ) => left ^ right ,
@@ -79,8 +101,9 @@ export default class BinaryExpression extends NodeBase implements DeoptimizableE
79101 this . operator === '+' &&
80102 this . parent instanceof ExpressionStatement &&
81103 this . left . getLiteralValueAtPath ( EMPTY_PATH , SHARED_RECURSION_TRACKER , this ) === ''
82- )
104+ ) {
83105 return true ;
106+ }
84107 return super . hasEffects ( context ) ;
85108 }
86109
0 commit comments