Mercurial > octave-nkf
changeset 5855:92d2be71e7cc
[project @ 2006-06-13 04:59:30 by jwe]
author | jwe |
---|---|
date | Tue, 13 Jun 2006 04:59:31 +0000 |
parents | 68f8017ef077 |
children | a4dc99e71752 |
files | src/ChangeLog src/pt-stmt.cc |
diffstat | 2 files changed, 16 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Mon Jun 12 15:54:27 2006 +0000 +++ b/src/ChangeLog Tue Jun 13 04:59:31 2006 +0000 @@ -1,3 +1,8 @@ +2006-06-13 John W. Eaton <jwe@octave.org> + + * pt-stmt.cc (tree_statement_list::eval): + Clear retval before each statement is evaluated. + 2006-06-12 John W. Eaton <jwe@octave.org> * unwind-prot.h (unwind_protect_fptr): New macro.
--- a/src/pt-stmt.cc Mon Jun 12 15:54:27 2006 +0000 +++ b/src/pt-stmt.cc Tue Jun 13 04:59:31 2006 +0000 @@ -165,6 +165,17 @@ { OCTAVE_QUIT; + // Clear preivous values before next statement is evaluated + // so that we aren't holding an extra reference to a value + // that may be used next. For example, in code like this: + // + // X = rand (N); ## refcount should be 1 after this statement. + // X(idx) = val; ## no extra copy should be needed, but + // ## we will be faked out if retval is not + // ## cleared between statements here. + + retval = octave_value_list (); + retval = elt->eval (silent, nargout, function_body); if (error_state) @@ -179,8 +190,6 @@ } else error ("invalid statement found in statement list!"); - - } return retval;