Mercurial > hg > octave-lyh
diff src/variables.cc @ 1277:db4f4009d6e8
[project @ 1995-04-24 20:35:06 by jwe]
author | jwe |
---|---|
date | Mon, 24 Apr 1995 20:35:06 +0000 |
parents | ffecaa9b9892 |
children | fcdf6c5d0302 |
line wrap: on
line diff
--- a/src/variables.cc +++ b/src/variables.cc @@ -224,14 +224,22 @@ return retval; } - char *name = args(0).string_value (); + char *name = strsave (args(0).string_value ()); if (error_state) { error ("exist: expecting string argument"); + delete [] name; return retval; } + char *struct_elts = strchr (name, '.'); + if (struct_elts) + { + *struct_elts = '\0'; + struct_elts++; + } + symbol_record *sr = curr_sym_tab->lookup (name, 0, 0); if (! sr) sr = global_sym_tab->lookup (name, 0, 0); @@ -239,7 +247,22 @@ retval = 0.0; if (sr && sr->is_variable () && sr->is_defined ()) - retval = 1.0; + { + retval = 1.0; + tree_fvc *def = sr->def (); + if (struct_elts) + { + retval = 0.0; + if (def->is_constant ()) + { + tree_constant *tmp = (tree_constant *) def; + tree_constant ult; + ult = tmp->lookup_map_element (struct_elts, 0, 1); + if (ult.is_defined ()) + retval = 1.0; + } + } + } else if (sr && sr->is_function ()) retval = 2.0; else @@ -258,6 +281,8 @@ } } + delete [] name; + return retval; }