octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

octave_call_stack changes


From: John W. Eaton
Subject: octave_call_stack changes
Date: Sat, 28 Jun 2008 19:48:34 -0400

Earlier today, I checked in some changes to the way the call stack is
handled so that for a function like

  function fx (n)
    if (n == 0)
      'a'
      x = 1
      fx (n+1)
      'e'
      x
    else
      'b'
      x = 2
      'c'
      evalin ('caller', 'x');
      'd'
      x
    end
  end

the call

  octave:1> fx (0)
  ans = a
  x =  1
  ans = b
  x =  2
  ans = c
  x =  1
  ans = d
  x =  2
  ans = e
  x =  1

will work as shown above.  I don't think evalin ('caller', ...)
ever worked properly for recursive calls until now.

Also, given a set of functions like

  function f ()
    x = 'f';
    g ();
  endfunction
  function g ()
    x = 'g';
    h ();
  endfunction
  function h ()
    x = 'h';
  endfunction

things like this should now be possible:

  octave:1> dbstop h
  ans =  2
  octave:2> f
  h: line 2, column 5
  x = 'h'
  keyboard: stopped in /scratch/jwe/build/octave/h.m at line 2
  debug> dbstack
  Stopped in:

  --> h at line 2 column 1
      g at line 3 column 3
      f at line 3 column 3
  debug> dbup
  g:  line 3, column 3
  debug> dbstack
  Stopped in:

      h at line 2 column 1
  --> g at line 3 column 3
      f at line 3 column 3
  debug> dbdown
  h:  line 2, column 1
  debug> dbstack
  Stopped in:

  --> h at line 2 column 1
      g at line 3 column 3
      f at line 3 column 3

I don't think this kind of thing ever really worked properly before
now.

Although I'm sure there is still room for improvement, these changes
appear to be working for me.  There could also be some problems
that I haven't seen yet.  Unfortunately, if there are problems, I
won't be able to do anything about then until after July 7, but I
thought it would be best to go ahead and check in these changes so
they could get some additional testing.

jwe


reply via email to

[Prev in Thread] Current Thread [Next in Thread]