comparison libinterp/parse-tree/pt-id.cc @ 15236:44d6ffdf9479

Disallow new variables in nested functions (bug #36271) * src/ov-usr-fcn.cc (octave_user_function::bind_automatic_vars): Use force_varref. * src/variables.cc (bind_ans): Use force_varref. * src/pt-id.cc (tree_identifier::rvalue, tree_identifier::lvalue): Identify static workspace errors. * src/pt-id.h (tree_identifier::static_workspace_error): New function. * src/symtab.cc (symbol_table::do_update_nest): Mark static workspaces. * src/symtab.h (symbol_table::symbol_record::symbol_record_rep::is_added_static, symbol_table::symbol_record::symbol_record_rep::mark_added_static, symbol_table::symbol_record::symbol_record_rep::unmark_added_static, symbol_table::symbol_record::is_added_static, symbol_table::symbol_record::mark_added_static, symbol_table::symbol_record::unmark_added_static, symbol_table::force_varref): New functions. (symbol_table::symbol_table): Initialize static_workspace to false. (symbol_table::do_insert): Added force_add parameter. Mark records as added_static. (symbol_table::do_varref): Added force_add parameter. * test/nest/test_nest.m: Added nest_eval tests. * test/nest/module.mk: Added nest/nest_eval.m. * test/nest/nest_eval.m: New file.
author Max Brister <max@2bass.com>
date Tue, 17 Apr 2012 21:24:20 -0600
parents 2fc554ffbc28
children 049e8bbff782
comparison
equal deleted inserted replaced
15235:ab3d4c1affee 15236:44d6ffdf9479
92 val.print_with_name (octave_stdout, name ()); 92 val.print_with_name (octave_stdout, name ());
93 93
94 retval = val; 94 retval = val;
95 } 95 }
96 } 96 }
97 else if (sym->is_added_static ())
98 static_workspace_error ();
97 else 99 else
98 eval_undefined_error (); 100 eval_undefined_error ();
99 101
100 return retval; 102 return retval;
101 } 103 }
114 } 116 }
115 117
116 octave_lvalue 118 octave_lvalue
117 tree_identifier::lvalue (void) 119 tree_identifier::lvalue (void)
118 { 120 {
121 if (sym->is_added_static ())
122 static_workspace_error ();
123
119 return octave_lvalue (&(sym->varref ())); 124 return octave_lvalue (&(sym->varref ()));
120 } 125 }
121 126
122 tree_identifier * 127 tree_identifier *
123 tree_identifier::dup (symbol_table::scope_id sc, 128 tree_identifier::dup (symbol_table::scope_id sc,