diff src/pt-cmd.cc @ 620:8e4e7e5f307e

[project @ 1994-08-16 04:36:32 by jwe]
author jwe
date Tue, 16 Aug 1994 04:36:32 +0000
parents 4057f845c1ee
children ba6acc6309ec
line wrap: on
line diff
--- a/src/pt-cmd.cc	Mon Aug 15 04:54:33 1994 +0000
+++ b/src/pt-cmd.cc	Tue Aug 16 04:36:32 1994 +0000
@@ -159,7 +159,8 @@
 	    warning ("while: empty matrix used in conditional");
 	  else if (flag == 0)
 	    {
-	      ::error ("while: empty matrix used in conditional");
+	      ::error ("empty matrix used in while condition near line\
+ %d, column %d", line (), column ()); 
 	      return;
 	    }
 	  t1 = tree_constant (0.0);
@@ -170,13 +171,16 @@
 	  t1 = t2.all ();
 	}
 
-      tree_constant_rep::constant_type t = t1.const_type ();
-      if (t == tree_constant_rep::scalar_constant)
+      if (t1.is_real_scalar ())
 	expr_value = (int) t1.double_value ();
-      else if (t == tree_constant_rep::complex_scalar_constant)
+      else if (t1.is_complex_scalar ())
 	expr_value = t1.complex_value () != 0.0;
       else
-	panic_impossible ();
+	{
+	  ::error ("invalid type used in while condition near line %d,\
+ column %d", line (), column ());
+	  return;
+	}
 
       if (expr_value)
 	{
@@ -253,90 +257,84 @@
       return;
     }
 
-  tree_constant_rep::constant_type expr_type = tmp_expr.const_type ();
-  switch (expr_type)
+  if (tmp_expr.is_scalar_type ())
+    {
+      tree_constant *rhs = new tree_constant (tmp_expr);
+      int quit = 0;
+      do_for_loop_once (rhs, quit);
+    }
+  else if (tmp_expr.is_matrix_type ())
     {
-    case tree_constant_rep::complex_scalar_constant:
-    case tree_constant_rep::scalar_constant:
-      {
-	tree_constant *rhs = new tree_constant (tmp_expr);
-	int quit = 0;
-	do_for_loop_once (rhs, quit);
-      }
-      break;
-    case tree_constant_rep::complex_matrix_constant:
-    case tree_constant_rep::matrix_constant:
-      {
-	Matrix m_tmp;
-	ComplexMatrix cm_tmp;
-	int nr;
-	int steps;
-	if (expr_type == tree_constant_rep::matrix_constant)
-	  {
-	    m_tmp = tmp_expr.matrix_value ();
-	    nr = m_tmp.rows ();
-	    steps = m_tmp.columns ();
-	  }
-	else
-	  {
-	    cm_tmp = tmp_expr.complex_matrix_value ();
-	    nr = cm_tmp.rows ();
-	    steps = cm_tmp.columns ();
-	  }
+      Matrix m_tmp;
+      ComplexMatrix cm_tmp;
+      int nr;
+      int steps;
+      if (tmp_expr.is_real_matrix ())
+	{
+	  m_tmp = tmp_expr.matrix_value ();
+	  nr = m_tmp.rows ();
+	  steps = m_tmp.columns ();
+	}
+      else
+	{
+	  cm_tmp = tmp_expr.complex_matrix_value ();
+	  nr = cm_tmp.rows ();
+	  steps = cm_tmp.columns ();
+	}
 
-	for (int i = 0; i < steps; i++)
-	  {
-	    tree_constant *rhs;
+      for (int i = 0; i < steps; i++)
+	{
+	  tree_constant *rhs;
 
-	    if (nr == 1)
-	      {
-		if (expr_type == tree_constant_rep::matrix_constant)
-		  rhs = new tree_constant (m_tmp (0, i));
-		else
-		  rhs = new tree_constant (cm_tmp (0, i));
-	      }
-	    else
-	      {
-		if (expr_type == tree_constant_rep::matrix_constant)
-		  rhs = new tree_constant (m_tmp.extract (0, i, nr-1, i));
-		else
-		  rhs = new tree_constant (cm_tmp.extract (0, i, nr-1, i));
-	      }
+	  if (nr == 1)
+	    {
+	      if (tmp_expr.is_real_matrix ())
+		rhs = new tree_constant (m_tmp (0, i));
+	      else
+		rhs = new tree_constant (cm_tmp (0, i));
+	    }
+	  else
+	    {
+	      if (tmp_expr.is_real_matrix ())
+		rhs = new tree_constant (m_tmp.extract (0, i, nr-1, i));
+	      else
+		rhs = new tree_constant (cm_tmp.extract (0, i, nr-1, i));
+	    }
 
-	    int quit = 0;
-	    do_for_loop_once (rhs, quit);
-	    if (quit)
-	      break;
-	  }
-      }
-      break;
-    case tree_constant_rep::string_constant:
+	  int quit = 0;
+	  do_for_loop_once (rhs, quit);
+	  if (quit)
+	    break;
+	}
+    }
+  else if (tmp_expr.is_string ())
+    {
       gripe_string_invalid ();
-      break;
-    case tree_constant_rep::range_constant:
-      {
-	Range rng = tmp_expr.range_value ();
+    }
+  else if (tmp_expr.is_range ())
+    {
+      Range rng = tmp_expr.range_value ();
 
-	int steps = rng.nelem ();
-	double b = rng.base ();
-	double increment = rng.inc ();
+      int steps = rng.nelem ();
+      double b = rng.base ();
+      double increment = rng.inc ();
 
-	for (int i = 0; i < steps; i++)
-	  {
-	    double tmp_val = b + i * increment;
+      for (int i = 0; i < steps; i++)
+	{
+	  double tmp_val = b + i * increment;
 
-	    tree_constant *rhs = new tree_constant (tmp_val);
+	  tree_constant *rhs = new tree_constant (tmp_val);
 
-	    int quit = 0;
-	    do_for_loop_once (rhs, quit);
-	    if (quit)
-	      break;
-	  }
-      }
-      break;
-    default:
-      panic_impossible ();
-      break;
+	  int quit = 0;
+	  do_for_loop_once (rhs, quit);
+	  if (quit)
+	    break;
+	}
+    }
+  else
+    {
+      ::error ("invalid type in for loop expression near line %d, column %d",
+	       line (), column ());
     }
 }