]> git.saurik.com Git - bison.git/blobdiff - src/reader.c
* src/output.c (output_actions): Clean up.
[bison.git] / src / reader.c
index cc8f90a0eea7bdfb72d21b6cc4d482bce1ca5171..282611d777eeca3b383016311569d941038cfbd3 100644 (file)
@@ -907,9 +907,6 @@ parse_macro_decl (void)
   int ch = ungetc (skip_white_space (), finput);
   char* macro_key;
   char* macro_value;
-  struct obstack macro_obstack;
-
-  obstack_init (&macro_obstack);
 
   /* Read key. */
   if (!isalpha (ch) && ch != '_')
@@ -919,6 +916,7 @@ parse_macro_decl (void)
       return;
     }
   copy_identifier (finput, &macro_obstack);
+  obstack_1grow (&macro_obstack, 0);
   macro_key = obstack_finish (&macro_obstack);
   
   /* Read value. */
@@ -935,11 +933,10 @@ parse_macro_decl (void)
       else
        fatal (_("Premature EOF after %s"), "\"");
     }
-  copy_string (finput, &macro_obstack, '"');
+  copy_string2 (finput, &macro_obstack, '"', 0);
+  obstack_1grow (&macro_obstack, 0);
   macro_value = obstack_finish (&macro_obstack);
 
-  obstack_free (&macro_obstack, 0);
-
   /* Store the (key, value) pair in the environment. */
   macro_insert (macro_key, macro_value);
 }
@@ -1991,6 +1988,9 @@ reader (void)
   init_lex ();
   lineno = 1;
 
+  /* Initialize the macro obstack.  */
+  obstack_init (&macro_obstack);
+
   /* Initialize the symbol table.  */
   tabinit ();
 
@@ -2008,22 +2008,26 @@ reader (void)
   /* Read the declaration section.  Copy %{ ... %} groups to
      TABLE_OBSTACK and FDEFINES file.  Also notice any %token, %left,
      etc. found there.  */
-  /* obstack_1grow (&table_obstack, '\n'); */
-
   read_declarations ();
   /* Start writing the guard and action files, if they are needed.  */
-  /* output_headers (); */
+#if 0
+  output_headers ();
+#endif
   /* Read in the grammar, build grammar in list form.  Write out
      guards and actions.  */
   readgram ();
   /* Now we know whether we need the line-number stack.  If we do,
      write its type into the .tab.h file.  */
-  /* if (defines_flag)
-     reader_output_yylsp (&defines_obstack); */
+#if 0
+  if (defines_flag)
+    reader_output_yylsp (&defines_obstack);
+#endif
   /* Write closing delimiters for actions and guards.  */
-  /* output_trailers (); */
-  /* if (locations_flag)
-     obstack_sgrow (&table_obstack, "#define YYLSP_NEEDED 1\n\n"); */
+#if 0
+  output_trailers (); 
+  if (locations_flag)
+    obstack_sgrow (&table_obstack, "#define YYLSP_NEEDED 1\n\n");
+#endif
   /* Assign the symbols their symbol numbers.  Write #defines for the
      token symbols into FDEFINES if requested.  */
   packsymbols ();