diff src/DLD-FUNCTIONS/quad.cc @ 3323:511caaa5e98e

[project @ 1999-10-27 02:21:46 by jwe]
author jwe
date Wed, 27 Oct 1999 02:21:50 +0000
parents 6923abb04e16
children 2efa28a91e7a
line wrap: on
line diff
--- a/src/DLD-FUNCTIONS/quad.cc	Tue Oct 26 21:33:28 1999 +0000
+++ b/src/DLD-FUNCTIONS/quad.cc	Wed Oct 27 02:21:50 1999 +0000
@@ -92,6 +92,30 @@
   return retval;
 }
 
+#define QUAD_ABORT() \
+  do \
+    { \
+      unwind_protect::run_frame ("Fquad"); \
+      return retval; \
+    } \
+  while (0)
+
+#define QUAD_ABORT1(msg) \
+  do \
+    { \
+      ::error ("quad: " ## msg); \
+      QUAD_ABORT (); \
+    } \
+  while (0)
+
+#define QUAD_ABORT2(fmt, arg) \
+  do \
+    { \
+      ::error ("quad: " ## fmt, arg); \
+      QUAD_ABORT (); \
+    } \
+  while (0)
+
 DEFUN_DLD (quad, args, nargout,
   "[V, IER, NFUN] = quad (F, A, B [, TOL] [, SING])\n\
 \n\
@@ -121,10 +145,7 @@
   call_depth++;
 
   if (call_depth > 1)
-    {
-      error ("quad: invalid recursive call");
-      return retval;
-    }
+    QUAD_ABORT1 ("invalid recursive call");
 
   int nargin = args.length ();
 
@@ -134,23 +155,17 @@
 				   "function y = __quad_fcn__ (x) y = ",
 				   "; endfunction");
       if (! quad_fcn)
-	return retval;
+	QUAD_ABORT ();
 
       double a = args(1).double_value ();
 
       if (error_state)
-	{
-	  error ("quad: expecting second argument to be a scalar");
-	  return retval;
-	}
+	QUAD_ABORT1 ("expecting second argument to be a scalar");
 
       double b = args(2).double_value ();
 
       if (error_state)
-	{
-	  error ("quad: expecting third argument to be a scalar");
-	  return retval;
-	}
+	QUAD_ABORT1 ("expecting third argument to be a scalar");
 
       int indefinite = 0;
       IndefQuad::IntegralType indef_type = IndefQuad::doubly_infinite;
@@ -186,29 +201,20 @@
 	{
 	case 5:
 	  if (indefinite)
-	    {
-	      error("quad: singularities not allowed on infinite intervals");
-	      return retval;
-	    }
+	    QUAD_ABORT1 ("singularities not allowed on infinite intervals");
 
 	  have_sing = 1;
 
 	  sing = args(4).vector_value ();
 
 	  if (error_state)
-	    {
-	      error ("quad: expecting vector of singularities as fourth argument");
-	      return retval;
-	    }
+	    QUAD_ABORT1 ("expecting vector of singularities as fourth argument");
 
 	case 4:
 	  tol = args(3).vector_value ();
 
 	  if (error_state)
-	    {
-	      error ("quad: expecting vector of tolerances as fifth argument");
-	      return retval;
-	    }
+	    QUAD_ABORT1 ("expecting vector of tolerances as fifth argument");
 
 	  switch (tol.capacity ())
 	    {
@@ -220,8 +226,7 @@
 	      break;
 
 	    default:
-	      error ("quad: expecting tol to contain no more than two values");
-	      return retval;
+	      QUAD_ABORT1 ("expecting tol to contain no more than two values");
 	    }
 
 	case 3:
@@ -259,10 +264,7 @@
       retval(0) = val;
     }
   else
-    {
-      print_usage ("quad");
-      return retval;
-    }
+    print_usage ("quad");
 
   unwind_protect::run_frame ("Fquad");
 
@@ -417,21 +419,8 @@
   return retval;
 }
 
-#define DLD_INSTALLER_FCN() \
-  bool \
-  FSoctave_install_dld_functions (void)
-
-#define INSTALL_DLD_FCN(name) \
-  if (! FS ## name ()) \
-    return false
-
-DLD_INSTALLER_FCN ()
-{
-  INSTALL_DLD_FCN (quad);
-  INSTALL_DLD_FCN (quad_options);
-
-  return true;
-}
+INSTALL_DLD_FCNS (INSTALL_DLD_FCN (quad);
+		  INSTALL_DLD_FCN (quad_options);)
 
 /*
 ;;; Local Variables: ***