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)
 {