]> git.saurik.com Git - bison.git/blobdiff - src/output.c
(output_skeleton): Use end_of_output_subpipe() to handle
[bison.git] / src / output.c
index 51541822c44c7c4b7178554a416f9ec00f223122..24a77a8ce1903e4e9987e934928ccaac91d9b536 100644 (file)
 #include "muscle_tab.h"
 #include "output.h"
 #include "reader.h"
 #include "muscle_tab.h"
 #include "output.h"
 #include "reader.h"
+#include "scan-skel.h"
 #include "symtab.h"
 #include "tables.h"
 
 #include "symtab.h"
 #include "tables.h"
 
-/* From src/scan-skel.l. */
-void scan_skel (FILE *);
-
 
 static struct obstack format_obstack;
 
 
 static struct obstack format_obstack;
 
@@ -145,6 +143,7 @@ escaped_output (FILE *out, char const *string)
 static void
 prepare_symbols (void)
 {
 static void
 prepare_symbols (void)
 {
+  MUSCLE_INSERT_BOOL ("token_table", token_table_flag);
   MUSCLE_INSERT_INT ("tokens_number", ntokens);
   MUSCLE_INSERT_INT ("nterms_number", nvars);
   MUSCLE_INSERT_INT ("undef_token_number", undeftoken->number);
   MUSCLE_INSERT_INT ("tokens_number", ntokens);
   MUSCLE_INSERT_INT ("nterms_number", nvars);
   MUSCLE_INSERT_INT ("undef_token_number", undeftoken->number);
@@ -558,7 +557,8 @@ output_skeleton (void)
 
   out = fdopen (filter_fd[0], "w");
   if (! out)
 
   out = fdopen (filter_fd[0], "w");
   if (! out)
-    error (EXIT_FAILURE, get_errno (), "fdopen");
+    error (EXIT_FAILURE, get_errno (),
+          "fdopen");
 
   /* Output the definitions of all the muscles.  */
   fputs ("m4_init()\n", out);
 
   /* Output the definitions of all the muscles.  */
   fputs ("m4_init()\n", out);
@@ -577,9 +577,11 @@ output_skeleton (void)
 
   /* Read and process m4's output.  */
   timevar_push (TV_M4);
 
   /* Read and process m4's output.  */
   timevar_push (TV_M4);
+  end_of_output_subpipe (pid, filter_fd);
   in = fdopen (filter_fd[1], "r");
   if (! in)
   in = fdopen (filter_fd[1], "r");
   if (! in)
-    error (EXIT_FAILURE, get_errno (), "fdopen");
+    error (EXIT_FAILURE, get_errno (),
+          "fdopen");
   scan_skel (in);
   xfclose (in);
   reap_subpipe (pid, m4);
   scan_skel (in);
   xfclose (in);
   reap_subpipe (pid, m4);
@@ -615,8 +617,12 @@ prepare (void)
        skeleton = "yacc.c";
     }
 
        skeleton = "yacc.c";
     }
 
-  /* Parse the skeleton file and output the needed parsers.  */
-  MUSCLE_INSERT_C_STRING ("skeleton", skeleton);
+  /* About the skeletons. */
+  {
+    char const *pkgdatadir = getenv ("BISON_PKGDATADIR");
+    MUSCLE_INSERT_STRING ("pkgdatadir", pkgdatadir ? pkgdatadir : PKGDATADIR);
+    MUSCLE_INSERT_C_STRING ("skeleton", skeleton);
+  }
 }
 
 
 }