Mercurial > hg > octave-lyh
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, |