Mercurial > octave
diff src/pt-unop.cc @ 3203:bc61b0e8d60e
[project @ 1998-10-30 20:26:27 by jwe]
author | jwe |
---|---|
date | Fri, 30 Oct 1998 20:26:31 +0000 |
parents | 20f5cec4f11c |
children | 096ad38d7ab5 |
line wrap: on
line diff
--- a/src/pt-unop.cc Thu Oct 29 20:28:02 1998 +0000 +++ b/src/pt-unop.cc Fri Oct 30 20:26:31 1998 +0000 @@ -35,6 +35,14 @@ #include "pt-unop.h" #include "pt-walk.h" +// Unary expressions. + +string +tree_unary_expression::oper (void) const +{ + return octave_value::unary_op_as_string (etype); +} + // Prefix expressions. octave_value_list @@ -61,46 +69,40 @@ if (op) { - if (etype == unot || etype == uminus) + if (etype == octave_value::incr || etype == octave_value::decr) + { + octave_lvalue ref = op->lvalue (); + + if (error_state) + eval_error (); + else if (ref.is_defined ()) + { + ref.do_unary_op (etype); + + retval = ref.value (); + } + else + eval_error (); + } + else { octave_value val = op->rvalue (); - if (! error_state) + if (error_state) + eval_error (); + else if (val.is_defined ()) { - if (val.is_defined ()) - { - if (etype == unot) - retval = val.not (); - else - retval = val.uminus (); - } - else - error ("argument to prefix operator `%s' undefined", - oper () . c_str ()); - } - } - else if (etype == increment || etype == decrement) - { - octave_lvalue ref = op->lvalue (); + retval = ::do_unary_op (etype, val); - if (! error_state) - { - if (ref.is_defined ()) + if (error_state) { - if (etype == increment) - ref.increment (); - else - ref.decrement (); - - retval = ref.value (); + retval = octave_value (); + eval_error (); } - else - error ("argument to prefix operator `%s' undefined", - oper () . c_str ()); } + else + eval_error (); } - else - error ("prefix operator %d not implemented", etype); } return retval; @@ -114,36 +116,6 @@ oper () . c_str (), line (), column ()); } -string -tree_prefix_expression::oper (void) const -{ - string retval = "<unknown>"; - - switch (etype) - { - case unot: - retval = "!"; - break; - - case uminus: - retval = "-"; - break; - - case increment: - retval = "++"; - break; - - case decrement: - retval = "--"; - break; - - default: - break; - } - - return retval; -} - void tree_prefix_expression::accept (tree_walker& tw) { @@ -176,47 +148,43 @@ if (op) { - if (etype == transpose || etype == hermitian) + if (etype == octave_value::incr || etype == octave_value::decr) + { + octave_lvalue ref = op->lvalue (); + + if (error_state) + eval_error (); + else if (ref.is_defined ()) + { + retval = ref.value (); + + ref.do_unary_op (etype); + } + else + eval_error (); + } + else { octave_value val = op->rvalue (); - if (! error_state) + if (error_state) + eval_error (); + else if (val.is_defined ()) { - if (val.is_defined ()) - { - if (etype == transpose) - retval = val.transpose (); - else - retval = val.hermitian (); - } - else - error ("argument to postfix operator `%s' undefined", - oper () . c_str ()); - } - } - else if (etype == increment || etype == decrement) - { - octave_lvalue ref = op->lvalue (); + retval = ::do_unary_op (etype, val); - if (! error_state) - { - if (ref.is_defined ()) + if (error_state) { - retval = ref.value (); - - if (etype == increment) - ref.increment (); - else - ref.decrement (); + retval = octave_value (); + eval_error (); } - else - error ("argument to postfix operator `%s' undefined", - oper () . c_str ()); } + else + eval_error (); } - else - error ("postfix operator %d not implemented", etype); } + else + eval_error (); return retval; } @@ -229,36 +197,6 @@ oper () . c_str (), line (), column ()); } -string -tree_postfix_expression::oper (void) const -{ - string retval = "<unknown>"; - - switch (etype) - { - case transpose: - retval = ".'"; - break; - - case hermitian: - retval = "'"; - break; - - case increment: - retval = "++"; - break; - - case decrement: - retval = "--"; - break; - - default: - break; - } - - return retval; -} - void tree_postfix_expression::accept (tree_walker& tw) {