Mercurial > hg > octave-avbm
changeset 4018:a8621d87fbf5
[project @ 2002-08-05 03:17:25 by jwe]
author | jwe |
---|---|
date | Mon, 05 Aug 2002 03:17:25 +0000 |
parents | 0eb247b9cc9b |
children | c6d7ae9fcdb9 |
files | src/ChangeLog src/lex.l src/ov.cc src/ov.h src/parse.y |
diffstat | 5 files changed, 47 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,15 @@ +2002-08-04 John W. Eaton <jwe@bevo.che.wisc.edu> + + * ov.h (octave_value::assign_op): New enum values, op_pow_eq and + op_el_pow_eq. + * ov.cc (octave_value::assign_op_as_string): Handle them here. + (ocatave_value::op_eq_to_binary_op): And here. + * parse.y (POW_EQ, EPOW_EQ): New tokens. + (assign_expr): Handle them here too. + (make_assign_op): And here. + + * lex.l: Recognize {POW}= and {EPOW}=. + 2002-08-02 John W. Eaton <jwe@bevo.che.wisc.edu> * ov-base-scalar.h (octave_base_scalar::all): New int arg.
--- a/src/lex.l +++ b/src/lex.l @@ -707,6 +707,8 @@ ".*=" { BIN_OP_RETURN (EMUL_EQ, false); } "./=" { BIN_OP_RETURN (EDIV_EQ, false); } ".\\=" { BIN_OP_RETURN (ELEFTDIV_EQ, false); } +{POW}= { BIN_OP_RETURN (POW_EQ, false); } +{EPOW}= { BIN_OP_RETURN (EPOW_EQ, false); } "&=" { BIN_OP_RETURN (AND_EQ, false); } "|=" { BIN_OP_RETURN (OR_EQ, false); } "<<=" { BIN_OP_RETURN (LSHIFT_EQ, false); }
--- a/src/ov.cc +++ b/src/ov.cc @@ -293,6 +293,10 @@ retval = "\\="; break; + case op_pow_eq: + retval = "^="; + break; + case op_lshift_eq: retval = "<<="; break; @@ -313,6 +317,10 @@ retval = ".\\="; break; + case op_el_pow_eq: + retval = ".^="; + break; + case op_el_and_eq: retval = "&="; break; @@ -1454,6 +1462,10 @@ binop = op_ldiv; break; + case op_pow_eq: + binop = op_pow; + break; + case op_lshift_eq: binop = op_lshift; break; @@ -1474,6 +1486,10 @@ binop = op_el_ldiv; break; + case op_el_pow_eq: + binop = op_el_pow; + break; + case op_el_and_eq: binop = op_el_and; break;
--- a/src/ov.h +++ b/src/ov.h @@ -132,11 +132,13 @@ op_mul_eq, op_div_eq, op_ldiv_eq, + op_pow_eq, op_lshift_eq, op_rshift_eq, op_el_mul_eq, op_el_div_eq, op_el_ldiv_eq, + op_el_pow_eq, op_el_and_eq, op_el_or_eq, num_assign_ops,
--- a/src/parse.y +++ b/src/parse.y @@ -373,8 +373,8 @@ // Tokens with line and column information. %token <tok_val> '=' ':' '-' '+' '*' '/' -%token <tok_val> ADD_EQ SUB_EQ MUL_EQ DIV_EQ LEFTDIV_EQ -%token <tok_val> EMUL_EQ EDIV_EQ ELEFTDIV_EQ AND_EQ OR_EQ +%token <tok_val> ADD_EQ SUB_EQ MUL_EQ DIV_EQ LEFTDIV_EQ POW_EQ +%token <tok_val> EMUL_EQ EDIV_EQ ELEFTDIV_EQ EPOW_EQ AND_EQ OR_EQ %token <tok_val> LSHIFT_EQ RSHIFT_EQ LSHIFT RSHIFT %token <tok_val> EXPR_AND_AND EXPR_OR_OR %token <tok_val> EXPR_AND EXPR_OR EXPR_NOT @@ -444,7 +444,7 @@ // Precedence and associativity. %left ';' ',' '\n' -%right '=' ADD_EQ SUB_EQ MUL_EQ DIV_EQ LEFTDIV_EQ EMUL_EQ EDIV_EQ ELEFTDIV_EQ OR_EQ AND_EQ LSHIFT_EQ RSHIFT_EQ +%right '=' ADD_EQ SUB_EQ MUL_EQ DIV_EQ LEFTDIV_EQ POW_EQ EMUL_EQ EDIV_EQ ELEFTDIV_EQ EPOW_EQ OR_EQ AND_EQ LSHIFT_EQ RSHIFT_EQ %left EXPR_AND_AND EXPR_OR_OR %left EXPR_AND EXPR_OR %left EXPR_LT EXPR_LE EXPR_EQ EXPR_NE EXPR_GE EXPR_GT @@ -823,6 +823,8 @@ { $$ = make_assign_op (DIV_EQ, $1, $2, $3); } | assign_lhs LEFTDIV_EQ expression { $$ = make_assign_op (LEFTDIV_EQ, $1, $2, $3); } + | assign_lhs POW_EQ expression + { $$ = make_assign_op (POW_EQ, $1, $2, $3); } | assign_lhs LSHIFT_EQ expression { $$ = make_assign_op (LSHIFT_EQ, $1, $2, $3); } | assign_lhs RSHIFT_EQ expression @@ -833,6 +835,8 @@ { $$ = make_assign_op (EDIV_EQ, $1, $2, $3); } | assign_lhs ELEFTDIV_EQ expression { $$ = make_assign_op (ELEFTDIV_EQ, $1, $2, $3); } + | assign_lhs EPOW_EQ expression + { $$ = make_assign_op (EPOW_EQ, $1, $2, $3); } | assign_lhs AND_EQ expression { $$ = make_assign_op (AND_EQ, $1, $2, $3); } | assign_lhs OR_EQ expression @@ -2384,6 +2388,10 @@ t = octave_value::op_ldiv_eq; break; + case POW_EQ: + t = octave_value::op_pow_eq; + break; + case LSHIFT_EQ: t = octave_value::op_lshift_eq; break; @@ -2404,6 +2412,10 @@ t = octave_value::op_el_ldiv_eq; break; + case EPOW_EQ: + t = octave_value::op_el_pow_eq; + break; + case AND_EQ: t = octave_value::op_el_and_eq; break;