diff src/ov-usr-fcn.cc @ 5743:a527e0f77aa5

[project @ 2006-04-06 08:20:21 by jwe]
author jwe
date Thu, 06 Apr 2006 08:20:23 +0000
parents 2618a0750ae6
children 1c36a2e82266
line wrap: on
line diff
--- a/src/ov-usr-fcn.cc	Thu Apr 06 08:15:49 2006 +0000
+++ b/src/ov-usr-fcn.cc	Thu Apr 06 08:20:23 2006 +0000
@@ -393,13 +393,12 @@
   unwind_protect_ptr (curr_sym_tab);
   curr_sym_tab = sym_tab;
 
-  unwind_protect_ptr (curr_function);
-  unwind_protect_ptr (curr_caller_function);
   unwind_protect_ptr (curr_caller_statement);
+  curr_caller_statement = curr_statement;
 
-  curr_caller_statement = curr_statement;
-  curr_caller_function = curr_function;
-  curr_function = this;
+  octave_call_stack::push (this);
+
+  unwind_protect::add (octave_call_stack::unwind_pop, 0);
 
   if (! is_nested_function ())
     {
@@ -747,10 +746,12 @@
 
   if (nargin == 0)
     {
-      if (curr_function)
+      octave_function *fcn = octave_call_stack::caller_script ();
+
+      if (fcn)
 	{
-	  if (curr_function->takes_varargs ())
-	    retval = curr_function->octave_va_arg ();
+	  if (fcn->takes_varargs ())
+	    retval = fcn->octave_va_arg ();
 	  else
 	    {
 	      ::error ("va_arg only valid within function taking variable");
@@ -789,10 +790,12 @@
 
   if (nargin == 0)
     {
-      if (curr_function)
+      octave_function *fcn = octave_call_stack::caller_script ();
+
+      if (fcn)
 	{
-	  if (curr_function->takes_varargs ())
-	    curr_function->octave_va_start ();
+	  if (fcn->takes_varargs ())
+	    fcn->octave_va_start ();
 	  else
 	    {
 	      ::error ("va_start only valid within function taking variable");
@@ -833,12 +836,14 @@
 
   if (nargin == 1)
     {
-      if (curr_function)
+      octave_function *fcn = octave_call_stack::caller_script ();
+
+      if (fcn)
 	{
-	  if (curr_function->has_varargout ())
+	  if (fcn->has_varargout ())
 	    ::error ("vr_val and varargout cannot both be used in the same function");
-	  else if (curr_function->takes_var_return ())
-	    curr_function->octave_vr_val (args(0));
+	  else if (fcn->takes_var_return ())
+	    fcn->octave_vr_val (args(0));
 	  else
 	    {
 	      ::error ("vr_val only valid within function declared to");