changeset 30328:a2397a85d7e5

deprecate .+ and .- operators * lex.ll (".+", ".-", ".+=", ".-="): Deprecate unnecessary operators. * oct-parse.yy (EPLUS, EMINUS): Eliminate tokens that are equivalent to '+' and '-'. * NEWS: Note change.
author John W. Eaton <jwe@octave.org>
date Tue, 23 Nov 2021 12:40:51 -0500
parents 256fad4ac653
children 81d26e8481a6
files NEWS libinterp/parse-tree/lex.ll libinterp/parse-tree/oct-parse.yy
diffstat 3 files changed, 9 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/NEWS	Tue Nov 23 12:36:52 2021 -0500
+++ b/NEWS	Tue Nov 23 12:40:51 2021 -0500
@@ -312,6 +312,8 @@
   ---------|-------------|------------
   **       | ^           | Matrix exponent
   .**      | .^          | Element-by-element exponent
+  .+       | +           | Element-by-element exponent
+  .-       | -           | Element-by-element exponent
 
 - Interpreter
 
--- a/libinterp/parse-tree/lex.ll	Tue Nov 23 12:36:52 2021 -0500
+++ b/libinterp/parse-tree/lex.ll	Tue Nov 23 12:40:51 2021 -0500
@@ -1644,8 +1644,8 @@
 %}
 
 ":"   { CMD_OR_OP (":", ':', true); }
-".+"  { CMD_OR_OP (".+", EPLUS, false); }
-".-"  { CMD_OR_OP (".-", EMINUS, false); }
+".+"  { CMD_OR_DEPRECATED_OP (".+", "+", 7, '+'); }
+".-"  { CMD_OR_DEPRECATED_OP (".-", "-", 7, '-'); }
 ".*"  { CMD_OR_OP (".*", EMUL, true); }
 "./"  { CMD_OR_OP ("./", EDIV, true); }
 ".\\" { CMD_OR_OP (".\\", ELEFTDIV, true); }
@@ -1817,8 +1817,8 @@
 "*="   { CMD_OR_OP ("*=", MUL_EQ, false); }
 "/="   { CMD_OR_OP ("/=", DIV_EQ, false); }
 "\\="  { CMD_OR_OP ("\\=", LEFTDIV_EQ, false); }
-".+="  { CMD_OR_OP (".+=", ADD_EQ, false); }
-".-="  { CMD_OR_OP (".-=", SUB_EQ, false); }
+".+="  { CMD_OR_DEPRECATED_OP (".+=", "+=", 7, ADD_EQ); }
+".-="  { CMD_OR_DEPRECATED_OP (".-=", "-=", 7, SUB_EQ); }
 ".*="  { CMD_OR_OP (".*=", EMUL_EQ, false); }
 "./="  { CMD_OR_OP ("./=", EDIV_EQ, false); }
 ".\\=" { CMD_OR_OP (".\\=", ELEFTDIV_EQ, false); }
@@ -2323,7 +2323,7 @@
             || tok == ':' || tok == '=' || tok == ADD_EQ
             || tok == AND_EQ || tok == DIV_EQ || tok == EDIV
             || tok == EDIV_EQ || tok == ELEFTDIV || tok == ELEFTDIV_EQ
-            || tok == EMINUS || tok == EMUL || tok == EMUL_EQ
+            || tok == EMUL || tok == EMUL_EQ
             || tok == EPOW || tok == EPOW_EQ || tok == EXPR_AND
             || tok == EXPR_AND_AND || tok == EXPR_EQ || tok == EXPR_GE
             || tok == EXPR_GT || tok == EXPR_LE || tok == EXPR_LT
@@ -3747,8 +3747,6 @@
       case EMUL: std::cerr << "EMUL\n"; break;
       case EDIV: std::cerr << "EDIV\n"; break;
       case ELEFTDIV: std::cerr << "ELEFTDIV\n"; break;
-      case EPLUS: std::cerr << "EPLUS\n"; break;
-      case EMINUS: std::cerr << "EMINUS\n"; break;
       case HERMITIAN: std::cerr << "HERMITIAN\n"; break;
       case TRANSPOSE: std::cerr << "TRANSPOSE\n"; break;
       case PLUS_PLUS: std::cerr << "PLUS_PLUS\n"; break;
--- a/libinterp/parse-tree/oct-parse.yy	Tue Nov 23 12:36:52 2021 -0500
+++ b/libinterp/parse-tree/oct-parse.yy	Tue Nov 23 12:40:51 2021 -0500
@@ -210,7 +210,7 @@
 %token <tok_val> EXPR_AND_AND EXPR_OR_OR
 %token <tok_val> EXPR_AND EXPR_OR EXPR_NOT
 %token <tok_val> EXPR_LT EXPR_LE EXPR_EQ EXPR_NE EXPR_GE EXPR_GT
-%token <tok_val> LEFTDIV EMUL EDIV ELEFTDIV EPLUS EMINUS
+%token <tok_val> LEFTDIV EMUL EDIV ELEFTDIV
 %token <tok_val> HERMITIAN TRANSPOSE
 %token <tok_val> PLUS_PLUS MINUS_MINUS POW EPOW
 %token <tok_val> NUMBER
@@ -323,7 +323,7 @@
 %left EXPR_AND
 %left EXPR_LT EXPR_LE EXPR_EQ EXPR_NE EXPR_GE EXPR_GT
 %left ':'
-%left '-' '+' EPLUS EMINUS
+%left '-' '+'
 %left '*' '/' LEFTDIV EMUL EDIV ELEFTDIV
 %right UNARY EXPR_NOT
 %left POW EPOW HERMITIAN TRANSPOSE
@@ -816,10 +816,6 @@
                   { $$ = parser.make_binary_op ('*', $1, $2, $3); }
                 | oper_expr '/' oper_expr
                   { $$ = parser.make_binary_op ('/', $1, $2, $3); }
-                | oper_expr EPLUS oper_expr
-                  { $$ = parser.make_binary_op ('+', $1, $2, $3); }
-                | oper_expr EMINUS oper_expr
-                  { $$ = parser.make_binary_op ('-', $1, $2, $3); }
                 | oper_expr EMUL oper_expr
                   { $$ = parser.make_binary_op (EMUL, $1, $2, $3); }
                 | oper_expr EDIV oper_expr