]> git.saurik.com Git - bison.git/blobdiff - src/symtab.c
* src/symtab.c (bucket_new): New function.
[bison.git] / src / symtab.c
index 0836153969423d3f544855d9d4456ed75fdbbb13..5ba5ca25e3ab3056ad4867dbbf2e84a74b6f60f9 100644 (file)
@@ -43,6 +43,31 @@ hash (const char *key)
   return k % TABSIZE;
 }
 
+/*--------------------------------------------------------------.
+| Create a new symbol, named TAG, which hash value is HASHVAL.  |
+`--------------------------------------------------------------*/
+
+static bucket *
+bucket_new (const char *tag, int hashval)
+{
+  bucket *res = XMALLOC (bucket, 1);
+
+  res->link = symtab[hashval];
+  res->next = NULL;
+  res->tag = xstrdup (tag);
+  res->type_name = NULL;
+  res->value = 0;
+  res->prec = 0;
+  res->assoc = right_assoc;
+  res->user_token_number = 0;
+  res->alias = NULL;
+  res->class = unknown_sym;
+
+  nsyms++;
+
+  return res;
+}
+
 
 void
 tabinit (void)
@@ -54,6 +79,11 @@ tabinit (void)
 }
 
 
+/*----------------------------------------------------------------.
+| Find the symbol named KEY, and return it.  If it does not exist |
+| yet, create it.                                                 |
+`----------------------------------------------------------------*/
+
 bucket *
 getsym (const char *key)
 {
@@ -75,13 +105,7 @@ getsym (const char *key)
 
   if (found == 0)
     {
-      nsyms++;
-
-      bp = XCALLOC (bucket, 1);
-      bp->link = symtab[hashval];
-      bp->next = NULL;
-      bp->tag = xstrdup (key);
-      bp->class = unknown_sym;
+      bp = bucket_new (key, hashval);
 
       if (firstsymbol == NULL)
        {