diff src/pt-exp.cc @ 2960:194b50e4725b

[project @ 1997-05-12 00:43:54 by jwe]
author jwe
date Mon, 12 May 1997 00:54:04 +0000
parents da62d3b91fa3
children f2be17e6f1ea
line wrap: on
line diff
--- a/src/pt-exp.cc
+++ b/src/pt-exp.cc
@@ -62,50 +62,46 @@
 
 // Prefix expressions.
 
-tree_prefix_expression::~tree_prefix_expression (void)
-{
-  delete id;
-}
-
 octave_value
-tree_prefix_expression::eval (bool print)
+tree_prefix_expression::eval (bool)
 {
   octave_value retval;
 
   if (error_state)
     return retval;
 
-  if (id)
+  if (op)
     {
-      switch (etype)
+      if (etype == unot || etype == uminus)
 	{
-	case increment:
-	  id->increment ();
-	  break;
-
-	case decrement:
-	  id->decrement ();
-	  break;
+	  octave_value val = op->eval ();
 
-	default:
-	  error ("prefix operator %d not implemented", etype);
-	  break;
-	}
-
-
-      if (error_state)
-	eval_error ();
-      else
-	{
-	  retval = id->eval (print);
-	  if (error_state)
+	  if (! error_state)
 	    {
-	      retval = octave_value ();
-	      if (error_state)
-		eval_error ();
+	      if (etype == unot)
+		retval = val.not ();
+	      else
+		retval = val.uminus ();
 	    }
 	}
+      else if (etype == increment || etype == decrement)
+	{
+	  octave_variable_reference ref = op->reference ();
+
+	  if (! error_state)
+	    {
+	      if (etype == increment)
+		ref.increment ();
+	      else
+		ref.decrement ();
+
+	      retval = ref.value ();
+	    }
+	}
+      else
+	error ("prefix operator %d not implemented", etype);
     }
+
   return retval;
 }
 
@@ -116,6 +112,14 @@
 
   switch (etype)
     {
+    case unot:
+      retval = "!";
+      break;
+
+    case uminus:
+      retval = "-";
+      break;
+
     case increment:
       retval = "++";
       break;
@@ -147,45 +151,46 @@
 
 // Postfix expressions.
 
-tree_postfix_expression::~tree_postfix_expression (void)
-{
-  delete id;
-}
-
 octave_value
-tree_postfix_expression::eval (bool print)
+tree_postfix_expression::eval (bool)
 {
   octave_value retval;
 
   if (error_state)
     return retval;
 
-  if (id)
+  if (op)
     {
-      retval = id->eval (print);
-
-      switch (etype)
+      if (etype == transpose || etype == hermitian)
 	{
-	case increment:
-	  id->increment ();
-	  break;
+	  octave_value val = op->eval ();
 
-	case decrement:
-	  id->decrement ();
-	  break;
-
-	default:
-	  error ("postfix operator %d not implemented", etype);
-	  break;
+	  if (! error_state)
+	    {
+	      if (etype == transpose)
+		retval = val.transpose ();
+	      else
+		retval = val.hermitian ();
+	    }
 	}
-
-      if (error_state)
+      else if (etype == increment || etype == decrement)
 	{
-	  retval = octave_value ();
-	  if (error_state)
-	    eval_error ();
+	  octave_variable_reference ref = op->reference ();
+
+	  if (! error_state)
+	    {
+	      retval = ref.value ();
+
+	      if (etype == increment)
+		ref.increment ();
+	      else
+		ref.decrement ();
+	    }
 	}
+      else
+	error ("postfix operator %d not implemented", etype);
     }
+
   return retval;
 }
 
@@ -196,6 +201,14 @@
 
   switch (etype)
     {
+    case transpose:
+      retval = ".'";
+      break;
+
+    case hermitian:
+      retval = "'";
+      break;
+
     case increment:
       retval = "++";
       break;
@@ -225,102 +238,6 @@
   tw.visit_postfix_expression (*this);
 }
 
-// Unary expressions.
-
-octave_value
-tree_unary_expression::eval (bool /* print */)
-{
-  octave_value retval;
-
-  if (error_state)
-    return retval;
-
-  if (op)
-    {
-      octave_value u = op->eval ();
-
-      if (error_state)
-	eval_error ();
-      else if (u.is_defined ())
-	{
-	  switch (etype)
-	    {
-	    case unot:
-	      retval = u.not ();
-	      break;
-
-	    case uminus:
-	      retval = u.uminus ();
-	      break;
-
-	    case transpose:
-	      retval = u.transpose ();
-	      break;
-
-	    case hermitian:
-	      retval = u.hermitian ();
-	      break;
-
-	    default:
-	      ::error ("unary operator %d not implemented", etype);
-	      break;
-	    }
-
-	  if (error_state)
-	    {
-	      retval = octave_value ();
-	      eval_error ();
-	    }
-	}
-    }
-
-  return retval;
-}
-
-string
-tree_unary_expression::oper (void) const
-{
-  string retval = "<unknown>";
-
-  switch (etype)
-    {
-    case unot:
-      retval = "!";
-      break;
-
-    case uminus:
-      retval = "-";
-      break;
-
-    case transpose:
-      retval = ".'";
-      break;
-
-    case hermitian:
-      retval = "'";
-      break;
-
-    default:
-      break;
-    }
-
-  return retval;
-}
-
-void
-tree_unary_expression::eval_error (void)
-{
-  if (error_state > 0)
-    ::error ("evaluating unary operator `%s' near line %d, column %d",
-	     oper () . c_str (), line (), column ());
-}
-
-void
-tree_unary_expression::accept (tree_walker& tw)
-{
-  tw.visit_unary_expression (*this);
-}
-
 // Binary expressions.
  
 octave_value