]> git.saurik.com Git - bison.git/blobdiff - src/output.c
Use unlocked I/O for a minor performance improvement on hosts like
[bison.git] / src / output.c
index 9bc806f14e4cc529e5e33c96cc20b6acac104d13..3dcd2287644d81327121c0a1602570138ee878ef 100644 (file)
@@ -119,7 +119,7 @@ static void
 escaped_output (FILE *out, char const *string)
 {
   char const *p;
-  fprintf (out, "[[");
+  fputs ("[[", out);
 
   for (p = quotearg_style (c_quoting_style, string); *p; p++)
     switch (*p)
@@ -131,7 +131,7 @@ escaped_output (FILE *out, char const *string)
       default: fputc (*p, out); break;
       }
 
-  fprintf (out, "]]");
+  fputs ("]]", out);
 }
 
 
@@ -302,8 +302,7 @@ user_actions_output (FILE *out)
        fprintf (out, "]b4_syncline(%d, ",
                 rules[r].action_location.start.line);
        escaped_output (out, rules[r].action_location.start.file);
-       fprintf (out, ")[\n");
-       fprintf (out, "    %s\n    break;\n\n",
+       fprintf (out, ")[\n    %s\n    break;\n\n",
                 rules[r].action);
       }
   fputs ("]])\n\n", out);
@@ -577,6 +576,7 @@ output_skeleton (void)
 
   /* 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)
     error (EXIT_FAILURE, get_errno (),
@@ -600,6 +600,16 @@ prepare (void)
 
   /* File names.  */
   MUSCLE_INSERT_STRING ("prefix", spec_name_prefix ? spec_name_prefix : "yy");
+#define DEFINE(Name) MUSCLE_INSERT_STRING (#Name, Name ? Name : "")
+  DEFINE (dir_prefix);
+  DEFINE (parser_file_name);
+  DEFINE (spec_defines_file);
+  DEFINE (spec_file_prefix);
+  DEFINE (spec_graph_file);
+  DEFINE (spec_name_prefix);
+  DEFINE (spec_outfile);
+  DEFINE (spec_verbose_file);
+#undef DEFINE
 
   /* User Code.  */
   obstack_1grow (&pre_prologue_obstack, 0);
@@ -616,8 +626,12 @@ prepare (void)
        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);
+  }
 }