# HG changeset patch # User John W. Eaton # Date 1295289419 18000 # Node ID e9d72a3caa46a99b0caa4293a305cd62f8dbb183 # Parent e582adc89d55dd49481604ee9be954c10e371658 mark automatic variables as automatic diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2011-01-17 John W. Eaton + + * ov-usr-fcn.cc (bind_automatic_vars): Mark variables created + here as automatic. + + * symtab.h (symbol_table::mark_automatic): New function. + (symbol_table::do_mark_automatic): New function. + 2011-01-17 Michael Godfrey * variables.cc (Fwhos): Describe a and f attributes in help text. diff --git a/src/ov-usr-fcn.cc b/src/ov-usr-fcn.cc --- a/src/ov-usr-fcn.cc +++ b/src/ov-usr-fcn.cc @@ -543,7 +543,11 @@ const octave_value_list& va_args, const std::list *lvalue_list) { if (! arg_names.empty ()) - symbol_table::varref ("argn") = arg_names; + { + symbol_table::varref ("argn") = arg_names; + + symbol_table::mark_automatic ("argn"); + } symbol_table::varref (".nargin.") = nargin; symbol_table::varref (".nargout.") = nargout; @@ -551,6 +555,9 @@ symbol_table::mark_hidden (".nargin."); symbol_table::mark_hidden (".nargout."); + symbol_table::mark_automatic (".nargin."); + symbol_table::mark_automatic (".nargout."); + if (takes_varargs ()) symbol_table::varref ("varargin") = va_args.cell_value (); @@ -575,7 +582,9 @@ } symbol_table::varref (".ignored.") = bh; + symbol_table::mark_hidden (".ignored."); + symbol_table::mark_automatic (".ignored."); } } } diff --git a/src/symtab.h b/src/symtab.h --- a/src/symtab.h +++ b/src/symtab.h @@ -1578,6 +1578,14 @@ // For unwind_protect. static void pop_context (void *) { pop_context (); } + static void mark_automatic (const std::string& name) + { + symbol_table *inst = get_instance (xcurrent_scope); + + if (inst) + inst->do_mark_automatic (name); + } + static void mark_hidden (const std::string& name) { symbol_table *inst = get_instance (xcurrent_scope); @@ -2267,6 +2275,11 @@ } } + void do_mark_automatic (const std::string& name) + { + do_insert (name).mark_automatic (); + } + void do_mark_hidden (const std::string& name) { do_insert (name).mark_hidden ();