diff src/symtab.cc @ 2949:49b42be38aa1

[project @ 1997-05-09 13:54:29 by jwe]
author jwe
date Fri, 09 May 1997 13:58:09 +0000
parents 66ef74ee5d9f
children ca7d3625ee01
line wrap: on
line diff
--- a/src/symtab.cc	Fri May 09 13:51:06 1997 +0000
+++ b/src/symtab.cc	Fri May 09 13:58:09 1997 +0000
@@ -356,9 +356,6 @@
 
   if (! (is_variable () && read_only_error ("redefine")))
     {
-      octave_symbol *saved_def = 0;
-      unsigned int saved_type = symbol_def::UNKNOWN;
-
       if (! definition)
 	{
 	  definition = new symbol_def ();
@@ -369,25 +366,11 @@
 	  push_def (new symbol_def ());
 	  definition->count = 1;
 	}
-      else if (is_variable ())
-	{
-	  saved_def = definition->def ();
-	  saved_type = definition->symbol_type ();
-	}
 
-      if (saved_type == symbol_def::BUILTIN_VARIABLE)
-	sym_type = saved_type;
+      if (definition->symbol_type () == symbol_def::BUILTIN_VARIABLE)
+	sym_type = symbol_def::BUILTIN_VARIABLE;
 
       definition->define (new octave_value (v), sym_type);
-
-      if (sv_fcn && sv_fcn () < 0)
-	definition->define (saved_def, saved_type);
-      else
-	{
-	  retval = 1;
-
-	  delete saved_def;
-	}
     }
 
   return retval;
@@ -396,7 +379,12 @@
 int
 symbol_record::define_builtin_var (const octave_value& v)
 {
-  return define (v, symbol_def::BUILTIN_VARIABLE);
+  int retval = define (v, symbol_def::BUILTIN_VARIABLE);
+
+  if (sv_fcn)
+    sv_fcn ();
+
+  return retval;
 }
 
 int
@@ -553,7 +541,7 @@
   return retval;
 }
 
-octave_value&
+octave_variable_reference
 symbol_record::variable_reference (void)
 {
   if (is_function ())
@@ -568,11 +556,8 @@
 	define (octave_value ());
     }
 
-  octave_value *tmp = static_cast<octave_value *> (def ());
-
-  tmp->make_unique ();
-
-  return *tmp;
+  return octave_variable_reference
+    (static_cast<octave_value *> (def ()), sv_fcn);
 }
 
 symbol_record *