]> git.saurik.com Git - bison.git/blobdiff - src/output.c
Change @dircategory from "GNU programming tools" to "Software development".
[bison.git] / src / output.c
index 124c0d9f07c51e33eefae8a6bca5b11dc6e6fcdb..55a3d47e5fdce9a9a116515036882f979737de5d 100644 (file)
@@ -1,6 +1,6 @@
 /* Output the generated parsing program for Bison.
 
 /* Output the generated parsing program for Bison.
 
-   Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003
+   Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
@@ -106,7 +106,6 @@ Name (const char *name,                                                     \
 
 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_unsigned_int_table, unsigned int)
 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_int_table, int)
 
 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_unsigned_int_table, unsigned int)
 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_int_table, int)
-GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_short_table, short)
 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_base_table, base_number)
 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_rule_number_table, rule_number)
 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_symbol_number_table, symbol_number)
 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_base_table, base_number)
 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_rule_number_table, rule_number)
 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_symbol_number_table, symbol_number)
@@ -192,7 +191,7 @@ prepare_symbols (void)
   /* Output YYTOKNUM. */
   {
     int i;
   /* Output YYTOKNUM. */
   {
     int i;
-    int *values = MALLOC (values, ntokens);
+    int *values = xnmalloc (ntokens, sizeof *values);
     for (i = 0; i < ntokens; ++i)
       values[i] = symbols[i]->user_token_number;
     muscle_insert_int_table ("toknum", values,
     for (i = 0; i < ntokens; ++i)
       values[i] = symbols[i]->user_token_number;
     muscle_insert_int_table ("toknum", values,
@@ -212,13 +211,13 @@ prepare_rules (void)
 {
   rule_number r;
   unsigned int i = 0;
 {
   rule_number r;
   unsigned int i = 0;
-  item_number *rhs = MALLOC (rhs, nritems);
-  unsigned int *prhs = MALLOC (prhs, nrules);
-  unsigned int *rline = MALLOC (rline, nrules);
-  symbol_number *r1 = MALLOC (r1, nrules);
-  unsigned int *r2 = MALLOC (r2, nrules);
-  short *dprec = MALLOC (dprec, nrules);
-  short *merger = MALLOC (merger, nrules);
+  item_number *rhs = xnmalloc (nritems, sizeof *rhs);
+  unsigned int *prhs = xnmalloc (nrules, sizeof *prhs);
+  unsigned int *rline = xnmalloc (nrules, sizeof *rline);
+  symbol_number *r1 = xnmalloc (nrules, sizeof *r1);
+  unsigned int *r2 = xnmalloc (nrules, sizeof *r2);
+  int *dprec = xnmalloc (nrules, sizeof *dprec);
+  int *merger = xnmalloc (nrules, sizeof *merger);
 
   for (r = 0; r < nrules; ++r)
     {
 
   for (r = 0; r < nrules; ++r)
     {
@@ -249,8 +248,8 @@ prepare_rules (void)
   muscle_insert_unsigned_int_table ("rline", rline, 0, 0, nrules);
   muscle_insert_symbol_number_table ("r1", r1, 0, 0, nrules);
   muscle_insert_unsigned_int_table ("r2", r2, 0, 0, nrules);
   muscle_insert_unsigned_int_table ("rline", rline, 0, 0, nrules);
   muscle_insert_symbol_number_table ("r1", r1, 0, 0, nrules);
   muscle_insert_unsigned_int_table ("r2", r2, 0, 0, nrules);
-  muscle_insert_short_table ("dprec", dprec, 0, 0, nrules);
-  muscle_insert_short_table ("merger", merger, 0, 0, nrules);
+  muscle_insert_int_table ("dprec", dprec, 0, 0, nrules);
+  muscle_insert_int_table ("merger", merger, 0, 0, nrules);
 
   MUSCLE_INSERT_INT ("rules_number", nrules);
   MUSCLE_INSERT_INT ("max_left_semantic_context", max_left_semantic_context);
 
   MUSCLE_INSERT_INT ("rules_number", nrules);
   MUSCLE_INSERT_INT ("max_left_semantic_context", max_left_semantic_context);
@@ -272,7 +271,7 @@ static void
 prepare_states (void)
 {
   state_number i;
 prepare_states (void)
 {
   state_number i;
-  symbol_number *values = MALLOC (values, nstates);
+  symbol_number *values = xnmalloc (nstates, sizeof *values);
   for (i = 0; i < nstates; ++i)
     values[i] = states[i]->accessing_symbol;
   muscle_insert_symbol_number_table ("stos", values,
   for (i = 0; i < nstates; ++i)
     values[i] = states[i]->accessing_symbol;
   muscle_insert_symbol_number_table ("stos", values,
@@ -402,16 +401,18 @@ symbol_destructors_output (FILE *out)
 
        /* Filename, lineno,
           Symbol-name, Symbol-number,
 
        /* Filename, lineno,
           Symbol-name, Symbol-number,
-          destructor, typename. */
+          destructor, optional typename.  */
        fprintf (out, "%s[", sep);
        sep = ",\n";
        escaped_file_name_output (out, sym->destructor_location.start.file);
        fprintf (out, "%s[", sep);
        sep = ",\n";
        escaped_file_name_output (out, sym->destructor_location.start.file);
-       fprintf (out, ", [[%d]], [[%s]], [[%d]], [[%s]], [[%s]]]",
+       fprintf (out, ", [[%d]], [[%s]], [[%d]], [[%s]]",
                 sym->destructor_location.start.line,
                 sym->tag,
                 sym->number,
                 sym->destructor_location.start.line,
                 sym->tag,
                 sym->number,
-                sym->destructor,
-                sym->type_name);
+                sym->destructor);
+       if (sym->type_name)
+         fprintf (out, ", [[%s]]", sym->type_name);
+       fputc (']', out);
       }
   fputs ("])\n\n", out);
 }
       }
   fputs ("])\n\n", out);
 }
@@ -435,16 +436,18 @@ symbol_printers_output (FILE *out)
 
        /* Filename, lineno,
           Symbol-name, Symbol-number,
 
        /* Filename, lineno,
           Symbol-name, Symbol-number,
-          printer, typename. */
+          printer, optional typename.  */
        fprintf (out, "%s[", sep);
        sep = ",\n";
        escaped_file_name_output (out, sym->printer_location.start.file);
        fprintf (out, "%s[", sep);
        sep = ",\n";
        escaped_file_name_output (out, sym->printer_location.start.file);
-       fprintf (out, ", [[%d]], [[%s]], [[%d]], [[%s]], [[%s]]]",
+       fprintf (out, ", [[%d]], [[%s]], [[%d]], [[%s]]",
                 sym->printer_location.start.line,
                 sym->tag,
                 sym->number,
                 sym->printer_location.start.line,
                 sym->tag,
                 sym->number,
-                sym->printer,
-                sym->type_name);
+                sym->printer);
+       if (sym->type_name)
+         fprintf (out, ", [[%s]]", sym->type_name);
+       fputc (']', out);
       }
   fputs ("])\n\n", out);
 }
       }
   fputs ("])\n\n", out);
 }
@@ -454,7 +457,7 @@ static void
 prepare_actions (void)
 {
   /* Figure out the actions for the specified state, indexed by
 prepare_actions (void)
 {
   /* Figure out the actions for the specified state, indexed by
-     lookahead token type.  */
+     look-ahead token type.  */
 
   muscle_insert_rule_number_table ("defact", yydefact,
                                   yydefact[0], 1, nstates);
 
   muscle_insert_rule_number_table ("defact", yydefact,
                                   yydefact[0], 1, nstates);
@@ -494,7 +497,7 @@ prepare_actions (void)
   muscle_insert_unsigned_int_table ("conflict_list_heads", conflict_table,
                                    conflict_table[0], 1, high + 1);
   muscle_insert_unsigned_int_table ("conflicting_rules", conflict_list,
   muscle_insert_unsigned_int_table ("conflict_list_heads", conflict_table,
                                    conflict_table[0], 1, high + 1);
   muscle_insert_unsigned_int_table ("conflicting_rules", conflict_list,
-                                   conflict_list[0], 1, conflict_list_cnt);
+                                   0, 1, conflict_list_cnt);
 }
 
 \f
 }
 
 \f
@@ -518,7 +521,7 @@ output_skeleton (void)
   char const m4sugar[] = "m4sugar/m4sugar.m4";
   char *full_m4sugar;
   char *full_cm4;
   char const m4sugar[] = "m4sugar/m4sugar.m4";
   char *full_m4sugar;
   char *full_cm4;
-  char *full_path;
+  char *full_skeleton;
   char const *p;
   char const *m4 = (p = getenv ("M4")) ? p : M4;
   char const *pkgdatadir = (p = getenv ("BISON_PKGDATADIR")) ? p : PKGDATADIR;
   char const *p;
   char const *m4 = (p = getenv ("M4")) ? p : M4;
   char const *pkgdatadir = (p = getenv ("BISON_PKGDATADIR")) ? p : PKGDATADIR;
@@ -526,36 +529,36 @@ output_skeleton (void)
   size_t pkgdatadirlen = strlen (pkgdatadir);
   while (pkgdatadirlen && pkgdatadir[pkgdatadirlen - 1] == '/')
     pkgdatadirlen--;
   size_t pkgdatadirlen = strlen (pkgdatadir);
   while (pkgdatadirlen && pkgdatadir[pkgdatadirlen - 1] == '/')
     pkgdatadirlen--;
-  full_path = xmalloc (pkgdatadirlen + 1
-                      + (skeleton_size < sizeof m4sugar
-                         ? sizeof m4sugar : skeleton_size));
-  strcpy (full_path, pkgdatadir);
-  full_path[pkgdatadirlen] = '/';
-  strcpy (full_path + pkgdatadirlen + 1, m4sugar);
-  full_m4sugar = xstrdup (full_path);
-  strcpy (full_path + pkgdatadirlen + 1, "c.m4");
-  full_cm4 = xstrdup (full_path);
-  strcpy (full_path + pkgdatadirlen + 1, skeleton);
+  full_skeleton = xmalloc (pkgdatadirlen + 1
+                          + (skeleton_size < sizeof m4sugar
+                             ? sizeof m4sugar : skeleton_size));
+  strcpy (full_skeleton, pkgdatadir);
+  full_skeleton[pkgdatadirlen] = '/';
+  strcpy (full_skeleton + pkgdatadirlen + 1, m4sugar);
+  full_m4sugar = xstrdup (full_skeleton);
+  strcpy (full_skeleton + pkgdatadirlen + 1, "c.m4");
+  full_cm4 = xstrdup (full_skeleton);
+  strcpy (full_skeleton + pkgdatadirlen + 1, skeleton);
   xfclose (xfopen (full_m4sugar, "r"));
 
   /* Create an m4 subprocess connected to us via two pipes.  */
 
   if (trace_flag & trace_tools)
     fprintf (stderr, "running: %s %s - %s %s\n",
   xfclose (xfopen (full_m4sugar, "r"));
 
   /* Create an m4 subprocess connected to us via two pipes.  */
 
   if (trace_flag & trace_tools)
     fprintf (stderr, "running: %s %s - %s %s\n",
-            m4, full_m4sugar, full_cm4, full_path);
+            m4, full_m4sugar, full_cm4, full_skeleton);
 
   argv[0] = m4;
   argv[1] = full_m4sugar;
   argv[2] = "-";
   argv[3] = full_cm4;
 
   argv[0] = m4;
   argv[1] = full_m4sugar;
   argv[2] = "-";
   argv[3] = full_cm4;
-  argv[4] = full_path;
+  argv[4] = full_skeleton;
   argv[5] = NULL;
 
   init_subpipe ();
   pid = create_subpipe (argv, filter_fd);
   free (full_m4sugar);
   free (full_cm4);
   argv[5] = NULL;
 
   init_subpipe ();
   pid = create_subpipe (argv, filter_fd);
   free (full_m4sugar);
   free (full_cm4);
-  free (full_path);
+  free (full_skeleton);
 
   out = fdopen (filter_fd[0], "w");
   if (! out)
 
   out = fdopen (filter_fd[0], "w");
   if (! out)