changeset 6505:c7901606ba70

[project @ 2007-04-06 16:11:38 by jwe]
author jwe
date Fri, 06 Apr 2007 16:11:38 +0000
parents 7e9a548e8ddf
children e48c2a2528f6
files src/ChangeLog src/ov-usr-fcn.cc src/ov-usr-fcn.h src/pt-fcn-handle.cc src/pt-fcn-handle.h
diffstat 5 files changed, 58 insertions(+), 45 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Fri Apr 06 15:33:45 2007 +0000
+++ b/src/ChangeLog	Fri Apr 06 16:11:38 2007 +0000
@@ -1,3 +1,22 @@
+2007-04-06  John W. Eaton  <jwe@octave.org>
+
+	* pt-fcn-handle.cc (tree_anon_fcn_handle::param_list, 
+	tree_anon_fcn_handle::cmd_list,	tree_anon_fcn_handle::ret_list,
+	tree_anon_fcn_handle::sym_tab): Delete.  Remove all uses.
+	(tree_anon_fcn_handle::fcn): New data member.
+	(tree_anon_fcn_handle::tree_anon_fcn_handle): Initialize it.
+	(tree_anon_fcn_handle::rvalue, tree_anon_fcn_handle::dup):
+	Extract parameter list, return list, function body, and symbol
+	table from fcn.
+	(tree_anon_fcn_handle::parameter_list, tree_anon_fcn_handle::body):
+	Forward request to fcn.
+
+	* ov-usr-fcn.h (octave_user_function::local_sym_tab): Rename from
+	sym_tab.  Change all uses.
+	(octave_user_function::sym_tab): New function.
+
+	* octave.cc (execute_command_line_file): 
+
 2007-04-05  David Bateman <dbateman@free.fr>
 
 	* DLD-FUNCTIONS/regexp.cc (Fregexprep): Correct iteration over 
--- a/src/ov-usr-fcn.cc	Fri Apr 06 15:33:45 2007 +0000
+++ b/src/ov-usr-fcn.cc	Fri Apr 06 16:11:38 2007 +0000
@@ -73,7 +73,7 @@
    tree_statement_list *cl, symbol_table *st)
   : octave_function (std::string (), std::string ()),
     param_list (pl), ret_list (rl), cmd_list (cl),
-    sym_tab (st), lead_comm (), trail_comm (), file_name (),
+    local_sym_tab (st), lead_comm (), trail_comm (), file_name (),
     parent_name (), t_parsed (static_cast<time_t> (0)),
     t_checked (static_cast<time_t> (0)),
     system_fcn_file (false), call_depth (0), num_named_args (0),
@@ -89,7 +89,7 @@
 {
   delete param_list;
   delete ret_list;
-  delete sym_tab;
+  delete local_sym_tab;
   delete cmd_list;
   delete lead_comm;
   delete trail_comm;
@@ -277,15 +277,15 @@
 
   if (call_depth > 1)
     {
-      sym_tab->push_context ();
-      unwind_protect::add (pop_symbol_table_context, sym_tab);
+      local_sym_tab->push_context ();
+      unwind_protect::add (pop_symbol_table_context, local_sym_tab);
     }
 
   install_automatic_vars ();
 
   // Force symbols to be undefined again when this function exits.
 
-  unwind_protect::add (clear_symbol_table, sym_tab);
+  unwind_protect::add (clear_symbol_table, local_sym_tab);
 
   // Save old and set current symbol table context, for
   // eval_undefined_error().
@@ -294,7 +294,7 @@
   curr_caller_sym_tab = curr_sym_tab;
 
   unwind_protect_ptr (curr_sym_tab);
-  curr_sym_tab = sym_tab;
+  curr_sym_tab = local_sym_tab;
 
   unwind_protect_ptr (curr_caller_statement);
   curr_caller_statement = curr_statement;
@@ -381,7 +381,7 @@
 
 	Cell varargout;
 
-	symbol_record *sr = sym_tab->lookup ("varargout");
+	symbol_record *sr = local_sym_tab->lookup ("varargout");
 
 	if (sr && sr->is_variable ())
 	  {
@@ -436,8 +436,8 @@
 void
 octave_user_function::print_symtab_info (std::ostream& os) const
 {
-  if (sym_tab)
-    sym_tab->print_info (os);
+  if (local_sym_tab)
+    local_sym_tab->print_info (os);
   else
     warning ("%s: no symbol table info!", my_name.c_str ());
 }
@@ -461,14 +461,14 @@
 void
 octave_user_function::install_automatic_vars (void)
 {
-  if (sym_tab)
+  if (local_sym_tab)
     {
-      argn_sr = sym_tab->lookup ("argn", true);
-      nargin_sr = sym_tab->lookup ("__nargin__", true);
-      nargout_sr = sym_tab->lookup ("__nargout__", true);
+      argn_sr = local_sym_tab->lookup ("argn", true);
+      nargin_sr = local_sym_tab->lookup ("__nargin__", true);
+      nargout_sr = local_sym_tab->lookup ("__nargout__", true);
 
       if (takes_varargs ())
-	varargin_sr = sym_tab->lookup ("varargin", true);
+	varargin_sr = local_sym_tab->lookup ("varargin", true);
     }
 }
 
--- a/src/ov-usr-fcn.h	Fri Apr 06 15:33:45 2007 +0000
+++ b/src/ov-usr-fcn.h	Fri Apr 06 16:11:38 2007 +0000
@@ -195,6 +195,8 @@
 
   tree_statement_list *body (void) { return cmd_list; }
 
+  symbol_table *sym_tab (void) { return local_sym_tab; }
+
   octave_comment_list *leading_comment (void) { return lead_comm; }
 
   octave_comment_list *trailing_comment (void) { return trail_comm; }
@@ -216,7 +218,7 @@
   tree_statement_list *cmd_list;
 
   // The local symbol table for this function.
-  symbol_table *sym_tab;
+  symbol_table *local_sym_tab;
 
   // The comments preceding the FUNCTION token.
   octave_comment_list *lead_comm;
--- a/src/pt-fcn-handle.cc	Fri Apr 06 15:33:45 2007 +0000
+++ b/src/pt-fcn-handle.cc	Fri Apr 06 16:11:38 2007 +0000
@@ -72,7 +72,7 @@
 }
 
 tree_expression *
-tree_fcn_handle::dup (symbol_table *sym_tab)
+tree_fcn_handle::dup (symbol_table *)
 {
   tree_fcn_handle *new_fh = new tree_fcn_handle (nm, line (), column ());
 
@@ -87,19 +87,16 @@
   tw.visit_fcn_handle (*this);
 }
 
-tree_anon_fcn_handle::~tree_anon_fcn_handle (void)
-{
-  delete param_list;
-  delete cmd_list;
-  delete ret_list;
-  delete sym_tab;
-}
-
 octave_value
 tree_anon_fcn_handle::rvalue (void)
 {
   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;
 
   if (new_sym_tab)
@@ -120,9 +117,9 @@
 
   uf->mark_as_inline_function ();
 
-  octave_value fcn (uf);
+  octave_value ov_fcn (uf);
 
-  octave_value fh (new octave_fcn_handle (fcn, "@<anonymous>"));
+  octave_value fh (new octave_fcn_handle (ov_fcn, "@<anonymous>"));
 
   return fh;
 }
@@ -143,6 +140,11 @@
 tree_expression *
 tree_anon_fcn_handle::dup (symbol_table *st)
 {
+  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;
 
   if (new_sym_tab)
--- a/src/pt-fcn-handle.h	Fri Apr 06 15:33:45 2007 +0000
+++ b/src/pt-fcn-handle.h	Fri Apr 06 16:11:38 2007 +0000
@@ -37,6 +37,7 @@
 class tree_walker;
 
 #include "ov.h"
+#include "ov-usr-fcn.h"
 
 class
 tree_fcn_handle : public tree_expression
@@ -89,16 +90,14 @@
 public:
 
   tree_anon_fcn_handle (int l = -1, int c = -1)
-    : tree_expression (l, c), param_list (0), cmd_list (0),
-      ret_list (0), sym_tab (0) { }
+    : tree_expression (l, c), fcn () { }
 
-  tree_anon_fcn_handle (tree_parameter_list *p, tree_parameter_list *r,
+  tree_anon_fcn_handle (tree_parameter_list *pl, tree_parameter_list *rl,
 			tree_statement_list *cl, symbol_table *st,
 			int l = -1, int c = -1)
-    : tree_expression (l, c), param_list (p), cmd_list (cl),
-      ret_list (r), sym_tab (st) { }
+    : tree_expression (l, c), fcn (pl, rl, cl, st) { }
 
-  ~tree_anon_fcn_handle (void);
+  ~tree_anon_fcn_handle (void) { }
 
   bool has_magic_end (void) const { return false; }
 
@@ -108,9 +107,9 @@
 
   octave_value_list rvalue (int nargout);
 
-  tree_parameter_list *parameter_list (void) { return param_list; }
+  tree_parameter_list *parameter_list (void) { return fcn.parameter_list (); }
 
-  tree_statement_list *body (void) { return cmd_list; }
+  tree_statement_list *body (void) { return fcn.body (); }
 
   tree_expression *dup (symbol_table *sym_tab);
 
@@ -118,17 +117,8 @@
 
 private:
 
-  // The parameter list.
-  tree_parameter_list *param_list;
-
-  // The statement that makes up the body of the function.
-  tree_statement_list *cmd_list;
-
-  // The list of return values.
-  tree_parameter_list *ret_list;
-
-  // The symbol table.
-  symbol_table *sym_tab;
+  // The function.
+  octave_user_function fcn;
 
   // No copying!