Mercurial > hg > octave-avbm
diff src/symtab.cc @ 3258:4964d5391acc
[project @ 1999-07-21 21:51:33 by jwe]
author | jwe |
---|---|
date | Wed, 21 Jul 1999 21:52:04 +0000 |
parents | 2e74d8aa1a20 |
children | 7ae1928ca623 |
line wrap: on
line diff
--- a/src/symtab.cc +++ b/src/symtab.cc @@ -73,7 +73,7 @@ { if (! (is_variable () && read_only_error ("redefine"))) { - if (is_function ()) + if (is_function () || is_constant ()) push_def (new symbol_def ()); if (definition->type () == symbol_record::BUILTIN_VARIABLE) @@ -93,13 +93,13 @@ } bool -symbol_record::define_as_fcn (const octave_value& v) +symbol_record::define_builtin_const (const octave_value& v) { bool retval = false; - if (! (is_variable () || read_only_error ("redefine"))) + if (! read_only_error ("redefine")) { - replace_all_defs (new symbol_def (v, symbol_record::BUILTIN_FUNCTION)); + replace_all_defs (new symbol_def (v, symbol_record::BUILTIN_CONSTANT)); retval = true; } @@ -230,16 +230,26 @@ return is_variable () ? def () : foo; } +inline void +symbol_record::link_to_builtin_variable (void) +{ + symbol_record *tmp_sym = global_sym_tab->lookup (name ()); + + if (tmp_sym && tmp_sym->is_builtin_variable ()) + alias (tmp_sym); +} + + octave_lvalue symbol_record::variable_reference (void) { - if (is_function ()) + if (is_function () || is_constant ()) clear (); if (! is_defined ()) { if (! (is_formal_parameter () || is_linked_to_global ())) - link_to_builtin_variable (this); + link_to_builtin_variable (); if (! is_defined ()) { @@ -326,7 +336,7 @@ { if (is_read_only ()) { - if (is_variable ()) + if (is_variable () || is_constant ()) ::error ("can't %s read-only constant `%s'", action, nm.c_str ()); else if (is_function ()) ::error ("can't %s read-only function `%s'", action, nm.c_str ());