diff src/pt-id.h @ 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 db02cc0ba8f2
line wrap: on
line diff
--- a/src/pt-id.h	Fri Feb 01 23:56:51 2008 -0500
+++ b/src/pt-id.h	Fri Dec 28 20:56:58 2007 +0000
@@ -30,11 +30,11 @@
 class octave_value;
 class octave_value_list;
 class octave_function;
-class symbol_record;
 
 class tree_walker;
 
 #include "pt-exp.h"
+#include "symtab.h"
 
 // Symbols from the symbol table.
 
@@ -46,9 +46,9 @@
 public:
 
   tree_identifier (int l = -1, int c = -1)
-    : tree_expression (l, c), sym (0) { }
+    : tree_expression (l, c), sym () { }
 
-  tree_identifier (symbol_record *s, int l = -1, int c = -1)
+  tree_identifier (const symbol_table::symbol_record& s, int l = -1, int c = -1)
     : tree_expression (l, c), sym (s) { }
 
   ~tree_identifier (void) { }
@@ -57,24 +57,48 @@
 
   bool is_identifier (void) const { return true; }
 
-  std::string name (void) const;
+  std::string name (void) const { return sym.name (); }
 
-  tree_identifier *define (octave_function *f, unsigned int sym_type);
+  bool is_defined (void) { return sym.is_defined (); }
+
+  bool is_variable (void) { return sym.is_variable (); }
 
-  void document (const std::string& s);
-
-  bool is_defined (void);
-
-  bool is_function (void);
+  // Try to find a definition for an identifier.  Here's how:
+  //
+  //   * If the identifier is already defined and is a function defined
+  //     in an function file that has been modified since the last time 
+  //     we parsed it, parse it again.
+  //
+  //   * If the identifier is not defined, try to find a builtin
+  //     variable or an already compiled function with the same name.
+  //
+  //   * If the identifier is still undefined, try looking for an
+  //     function file to parse.
+  //
+  //   * On systems that support dynamic linking, we prefer .oct files,
+  //     then .mex files, then .m files.
 
   octave_value
-  do_lookup (bool& script_file_executed, bool exec_script = true);
-
-  void link_to_global (void);
+  do_lookup (bool& script_file_executed, bool exec_script = true)
+  {
+    // FIXME -- SYMTAB: what about executing script files?
+    octave_value_list evaluated_args;
+    bool args_evaluated;
+    return sym.find (0, string_vector (), evaluated_args, args_evaluated);
+  }
 
-  void mark_as_static (void);
+  octave_value
+  do_lookup (tree_argument_list *args, const string_vector& arg_names,
+	     octave_value_list& evaluated_args, bool& args_evaluated)
+  {
+    return sym.find (args, arg_names, evaluated_args, args_evaluated);
+  }
 
-  void mark_as_formal_parameter (void);
+  void mark_global (void) { sym.mark_global (); }
+
+  void mark_as_static (void) { sym.init_persistent (); }
+
+  void mark_as_formal_parameter (void) { sym.mark_formal (); }
 
   // We really need to know whether this symbol referst to a variable
   // or a function, but we may not know that yet.
@@ -89,14 +113,14 @@
 
   void eval_undefined_error (void);
 
-  tree_identifier *dup (symbol_table *sym_tab);
+  tree_identifier *dup (symbol_table::scope_id scope);
 
   void accept (tree_walker& tw);
 
 private:
 
   // The symbol record that this identifier references.
-  symbol_record *sym;
+  symbol_table::symbol_record sym;
 
   // No copying!