]> git.saurik.com Git - bison.git/blobdiff - src/reader.c
* doc/bison.texinfo (Debugging): Split into...
[bison.git] / src / reader.c
index 1ce5f51f6ef95cb40a447dcdf28fec7396256b7e..93df69a6c4f8bc0911791a0f8a4a61447c60b41b 100644 (file)
@@ -126,7 +126,7 @@ symbol_make_alias (symbol_t *symbol, char *typename)
       symval->class = token_sym;
       symval->type_name = typename;
       symval->user_token_number = symbol->user_token_number;
-      symbol->user_token_number = SALIAS;
+      symbol->user_token_number = USER_NUMBER_ALIAS;
       symval->alias = symbol;
       symbol->alias = symval;
       /* symbol and symval combined are only one symbol */
@@ -149,7 +149,7 @@ static bool
 symbol_check_alias_consistence (symbol_t *this)
 {
   /* Check only those who _are_ the aliases. */
-  if (this->alias && this->user_token_number == SALIAS)
+  if (this->alias && this->user_token_number == USER_NUMBER_ALIAS)
     {
       if (this->prec != this->alias->prec)
        {
@@ -204,8 +204,8 @@ symbol_pack (symbol_t *this)
              this->number = this->alias->number;
            }
        }
-      /* Do not do processing below for SALIASs.  */
-      if (this->user_token_number == SALIAS)
+      /* Do not do processing below for USER_NUMBER_ALIASs.  */
+      if (this->user_token_number == USER_NUMBER_ALIAS)
        return TRUE;
     }
   else /* this->class == token_sym */
@@ -229,7 +229,7 @@ symbol_translation (symbol_t *this)
 {
   /* Non-terminal? */
   if (this->class == token_sym
-      && this->user_token_number != SALIAS)
+      && this->user_token_number != USER_NUMBER_ALIAS)
     {
       /* A token which translation has already been set? */
       if (token_translations[this->user_token_number] != undeftoken->number)
@@ -998,10 +998,10 @@ parse_expect_decl (void)
 |                                                                    |
 | Two symbols are entered in the table, one for the token symbol and |
 | one for the literal.  Both are given the <type>, if any, from the  |
-| declaration.  The ->user_token_number of the first is SALIAS and   |
-| the ->user_token_number of the second is set to the number, if     |
-| any, from the declaration.  The two symbols are linked via         |
-| pointers in their ->alias fields.                                  |
+| declaration.  The ->user_token_number of the first is              |
+| USER_NUMBER_ALIAS and the ->user_token_number of the second is set |
+| to the number, if any, from the declaration.  The two symbols are  |
+| linked via pointers in their ->alias fields.                       |
 |                                                                    |
 | During OUTPUT_DEFINES_TABLE, the symbol is reported thereafter,    |
 | only the literal string is retained it is the literal string that  |
@@ -1014,7 +1014,7 @@ parse_thong_decl (void)
   token_t token;
   symbol_t *symbol;
   char *typename = 0;
-  int usrtoknum = SUNDEF;
+  int usrtoknum = USER_NUMBER_UNDEFINED;
 
   token = lex ();              /* fetch typename or first token */
   if (token == tok_typename)
@@ -1035,7 +1035,7 @@ parse_thong_decl (void)
     }
   symval->class = token_sym;
   symval->type_name = typename;
-  symval->user_token_number = SALIAS;
+  symval->user_token_number = USER_NUMBER_ALIAS;
   symbol = symval;
 
   token = lex ();              /* get number or literal string */
@@ -1264,32 +1264,34 @@ read_declarations (void)
 \f
 /*------------------------------------------------------------------.
 | Assuming that a `{' has just been seen, copy everything up to the |
-| matching `}' into the actions file.  RULE_LENGTH is the number of |
-| values in the current rule so far, which says where to find `$0'  |
-| with respect to the top of the stack.                             |
+| matching `}' into ACTION_OBSTACK.                                 |
+|                                                                   |
+| RULE_LENGTH is the number of values in the current rule so far,   |
+| which says where to find `$0' with respect to the top of the      |
+| stack.  It is not the same as the rule->length in the case of mid |
+| rule actions.                                                     |
 |                                                                   |
 | This routine is used for actions.                                 |
 `------------------------------------------------------------------*/
 
 static void
-parse_braces (symbol_list *rule, int rule_length)
+parse_action (symbol_list *rule, int rule_length)
 {
-  int c;
-  int count;
-
-  count = 1;
+  int count = 1;
+  rule->action_line = lineno;
   while (count > 0)
     {
+      int c;
       while ((c = getc (finput)) != '}')
        switch (c)
          {
          case '\n':
-           obstack_1grow (&action_obstack, c);
+           copy_character (&action_obstack, c);
            ++lineno;
            break;
 
          case '{':
-           obstack_1grow (&action_obstack, c);
+           copy_character (&action_obstack, c);
            ++count;
            break;
 
@@ -1314,23 +1316,15 @@ parse_braces (symbol_list *rule, int rule_length)
            fatal (_("unmatched %s"), "`{'");
 
          default:
-           obstack_1grow (&action_obstack, c);
+           copy_character (&action_obstack, c);
          }
 
       /* Above loop exits when C is '}'.  */
       if (--count)
-       obstack_1grow (&action_obstack, c);
+       copy_character (&action_obstack, c);
     }
 
   obstack_1grow (&action_obstack, '\0');
-}
-
-
-static void
-parse_action (symbol_list *rule, int rule_length)
-{
-  rule->action_line = lineno;
-  parse_braces (rule, rule_length);
   rule->action = obstack_finish (&action_obstack);
 }
 
@@ -1672,7 +1666,7 @@ token_translations_init (void)
   for (i = 0; i < ntokens; ++i)
     {
       symbol_t *this = symbols[i];
-      if (this->user_token_number != SUNDEF)
+      if (this->user_token_number != USER_NUMBER_UNDEFINED)
        {
          if (this->user_token_number > max_user_token_number)
            max_user_token_number = this->user_token_number;
@@ -1682,7 +1676,8 @@ token_translations_init (void)
     }
 
   /* If 256 is not used, assign it to error, to follow POSIX.  */
-  if (num_256_available_p && errtoken->user_token_number == SUNDEF)
+  if (num_256_available_p
+      && errtoken->user_token_number == USER_NUMBER_UNDEFINED)
     errtoken->user_token_number = 256;
 
   /* Set the missing user numbers. */
@@ -1692,7 +1687,7 @@ token_translations_init (void)
   for (i = 0; i < ntokens; ++i)
     {
       symbol_t *this = symbols[i];
-      if (this->user_token_number == SUNDEF)
+      if (this->user_token_number == USER_NUMBER_UNDEFINED)
        this->user_token_number = ++max_user_token_number;
       if (this->user_token_number > max_user_token_number)
        max_user_token_number = this->user_token_number;
@@ -1741,11 +1736,11 @@ packsymbols (void)
 static void
 packgram (void)
 {
-  int itemno;
+  unsigned int itemno;
   int ruleno;
   symbol_list *p;
 
-  ritem = XCALLOC (item_number_t, nritems + 1);
+  ritem = XCALLOC (item_number_t, nritems);
   rules = XCALLOC (rule_t, nrules) - 1;
 
   itemno = 0;
@@ -1792,7 +1787,6 @@ packgram (void)
        p = p->next;
     }
 
-  ritem[itemno] = 0;
   assert (itemno == nritems);
 
   if (trace_flag)
@@ -1876,12 +1870,3 @@ reader (void)
   /* The grammar as a symbol_list is no longer needed. */
   LIST_FREE (symbol_list, grammar);
 }
-
-void
-grammar_free (void)
-{
-  XFREE (ritem);
-  free (rules + 1);
-  /* Free the symbol table data structure.  */
-  symbols_free ();
-}