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	Mon Apr 24 15:31:24 1995 +0000
+++ b/src/variables.cc	Mon Apr 24 20:35:06 1995 +0000
@@ -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;
 }