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);