]> git.saurik.com Git - bison.git/commitdiff
* src/output.c (output): Remove the initialization of the macro
authorRobert Anisko <robert@lrde.epita.fr>
Mon, 27 Aug 2001 14:55:39 +0000 (14:55 +0000)
committerRobert Anisko <robert@lrde.epita.fr>
Mon, 27 Aug 2001 14:55:39 +0000 (14:55 +0000)
obstack.  It was done too late here.

* src/reader.c (parse_macro_decl): Fix.  Use of the macro obstack was
completely wrong.
(reader): Initialize the macro obstack here, since we need it to grow
'%define' directives.

* src/reader.h: Declare the macro obstack as extern.

ChangeLog
src/output.c
src/reader.c
src/reader.h

index 4636c07773890b90b40245a4ec3f89b2b2616a77..c082330f939279cc1cd5c49d81e4853fd7478d0b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2001-08-27  Robert Anisko  <robert.anisko@epita.fr>
+
+       * src/output.c (output): Remove the initialization of the macro 
+       obstack.  It was done too late here.
+
+       * src/reader.c (parse_macro_decl): Fix.  Use of the macro obstack was
+       completely wrong.
+       (reader): Initialize the macro obstack here, since we need it to grow
+       '%define' directives.
+
+       * src/reader.h: Declare the macro obstack as extern.
+
 2001-08-27  Robert Anisko  <robert.anisko@epita.fr>
 
        * src/output.c (output_parser): Fix.  Store single '%' characters in
index 254927d047f3325b4a1d9600bd31dd97e74abd7d..be07ff6faca950d00adeb0183dbd9dc61bd9c053 100644 (file)
@@ -1103,7 +1103,6 @@ prepare (void)
 void
 output (void)
 {
-  obstack_init (&macro_obstack);
   obstack_init (&output_obstack);
 
 #if 0
index cc8f90a0eea7bdfb72d21b6cc4d482bce1ca5171..aa6ec5161adb7cce304177fb730b05c9bf1f02f8 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 ();
 
index c298891173e244a4c43e74ac25882c58b7702401..7cdd694195b8885f5c921069e5b63c9afe20f409 100644 (file)
@@ -36,4 +36,6 @@ extern int lineno;
 extern char **tags;
 extern short *user_toknums;
 
+extern struct obstack macro_obstack;
+
 #endif /* !READER_H_ */