@@ -43,6 +43,7 @@ public static Statement parse(List<Token> tokens) {
4343 assignOperator .put (TokenType .LTLTEQ , BinaryExpression .Operator .LSHIFT );
4444 assignOperator .put (TokenType .GTGTEQ , BinaryExpression .Operator .RSHIFT );
4545 assignOperator .put (TokenType .GTGTGTEQ , BinaryExpression .Operator .URSHIFT );
46+ assignOperator .put (TokenType .ATEQ , BinaryExpression .Operator .AT );
4647 }
4748
4849 private final List <Token > tokens ;
@@ -445,7 +446,9 @@ private Expression ternary() {
445446 final Expression falseExpr = expression ();
446447 return new TernaryExpression (result , trueExpr , falseExpr );
447448 }
448-
449+ if (match (TokenType .QUESTIONCOLON )) {
450+ return new BinaryExpression (BinaryExpression .Operator .ELVIS , result , expression ());
451+ }
449452 return result ;
450453 }
451454
@@ -574,6 +577,10 @@ private Expression shift() {
574577 expression = new BinaryExpression (BinaryExpression .Operator .URSHIFT , expression , additive ());
575578 continue ;
576579 }
580+ if (match (TokenType .DOTDOT )) {
581+ expression = new BinaryExpression (BinaryExpression .Operator .RANGE , expression , additive ());
582+ continue ;
583+ }
577584 break ;
578585 }
579586
@@ -596,6 +603,10 @@ private Expression additive() {
596603 result = new BinaryExpression (BinaryExpression .Operator .PUSH , result , multiplicative ());
597604 continue ;
598605 }
606+ if (match (TokenType .AT )) {
607+ result = new BinaryExpression (BinaryExpression .Operator .AT , result , multiplicative ());
608+ continue ;
609+ }
599610 break ;
600611 }
601612
@@ -618,6 +629,10 @@ private Expression multiplicative() {
618629 result = new BinaryExpression (BinaryExpression .Operator .REMAINDER , result , unary ());
619630 continue ;
620631 }
632+ if (match (TokenType .STARSTAR )) {
633+ result = new BinaryExpression (BinaryExpression .Operator .POWER , result , unary ());
634+ continue ;
635+ }
621636 break ;
622637 }
623638
0 commit comments