Mercurial > hg > octave-lyh
diff src/pt-fcn-handle.cc @ 7336:745a8299c2b5
[project @ 2007-12-28 20:56:55 by jwe]
author | jwe |
---|---|
date | Fri, 28 Dec 2007 20:56:58 +0000 |
parents | a1dbe9d80eee |
children | 71f068b22fcc |
line wrap: on
line diff
--- a/src/pt-fcn-handle.cc +++ b/src/pt-fcn-handle.cc @@ -71,7 +71,7 @@ } tree_expression * -tree_fcn_handle::dup (symbol_table *) +tree_fcn_handle::dup (symbol_table::scope_id) { tree_fcn_handle *new_fh = new tree_fcn_handle (nm, line (), column ()); @@ -91,28 +91,21 @@ { MAYBE_DO_BREAKPOINT; - tree_parameter_list *param_list = fcn.parameter_list (); - tree_parameter_list *ret_list = fcn.return_list (); - tree_statement_list *cmd_list = fcn.body (); - symbol_table *sym_tab = fcn.sym_tab (); - - symbol_table *new_sym_tab = sym_tab ? sym_tab->dup () : 0; + tree_parameter_list *param_list = parameter_list (); + tree_parameter_list *ret_list = return_list (); + tree_statement_list *cmd_list = body (); + symbol_table::scope_id this_scope = scope (); - if (new_sym_tab) - new_sym_tab->inherit (curr_sym_tab); - - tree_parameter_list *new_param_list - = param_list ? param_list->dup (new_sym_tab) : 0; + symbol_table::scope_id new_scope = symbol_table::dup_scope (this_scope); - tree_statement_list *new_cmd_list - = cmd_list ? cmd_list->dup (new_sym_tab) : 0; - - tree_parameter_list *new_ret_list - = ret_list ? ret_list->dup (new_sym_tab) : 0; + if (new_scope > 0) + symbol_table::inherit (new_scope, symbol_table::current_scope ()); octave_user_function *uf - = new octave_user_function (new_param_list, new_ret_list, - new_cmd_list, new_sym_tab); + = new octave_user_function (new_scope, + param_list ? param_list->dup (new_scope) : 0, + ret_list ? ret_list->dup (new_scope) : 0, + cmd_list ? cmd_list->dup (new_scope) : 0); octave_function *curr_fcn = octave_call_stack::current (); @@ -142,23 +135,23 @@ } tree_expression * -tree_anon_fcn_handle::dup (symbol_table *st) +tree_anon_fcn_handle::dup (symbol_table::scope_id parent_scope) { - tree_parameter_list *param_list = fcn.parameter_list (); - tree_parameter_list *ret_list = fcn.return_list (); - tree_statement_list *cmd_list = fcn.body (); - symbol_table *sym_tab = fcn.sym_tab (); + tree_parameter_list *param_list = parameter_list (); + tree_parameter_list *ret_list = return_list (); + tree_statement_list *cmd_list = body (); + symbol_table::scope_id this_scope = scope (); - symbol_table *new_sym_tab = sym_tab ? sym_tab->dup () : 0; + symbol_table::scope_id new_scope = symbol_table::dup_scope (this_scope); - if (new_sym_tab) - new_sym_tab->inherit (st); + if (new_scope > 0) + symbol_table::inherit (new_scope, parent_scope); tree_anon_fcn_handle *new_afh - = new tree_anon_fcn_handle (param_list ? param_list->dup (new_sym_tab) : 0, - ret_list ? ret_list->dup (new_sym_tab) : 0, - cmd_list ? cmd_list->dup (new_sym_tab) : 0, - new_sym_tab, line (), column ()); + = new tree_anon_fcn_handle (param_list ? param_list->dup (new_scope) : 0, + ret_list ? ret_list->dup (new_scope) : 0, + cmd_list ? cmd_list->dup (new_scope) : 0, + new_scope, line (), column ()); new_afh->copy_base (*this);