]> git.saurik.com Git - bison.git/blobdiff - src/output.c
* ro.po: New.
[bison.git] / src / output.c
index 1f70e948a8c6884a3554ef7529019aebd4ca5381..42646cbfc360b8de996855b08fde9cbcc85d2fba 100644 (file)
@@ -1,5 +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
+
+   Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003
    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.
@@ -67,6 +68,8 @@ Name (const char *name,                                                       \
 {                                                                      \
   Type min = first;                                                    \
   Type max = first;                                                    \
 {                                                                      \
   Type min = first;                                                    \
   Type max = first;                                                    \
+  long int lmin;                                                       \
+  long int lmax;                                                       \
   int i;                                                               \
   int j = 1;                                                           \
                                                                        \
   int i;                                                               \
   int j = 1;                                                           \
                                                                        \
@@ -90,15 +93,15 @@ Name (const char *name,                                                     \
   obstack_1grow (&format_obstack, 0);                                  \
   muscle_insert (name, obstack_finish (&format_obstack));              \
                                                                        \
   obstack_1grow (&format_obstack, 0);                                  \
   muscle_insert (name, obstack_finish (&format_obstack));              \
                                                                        \
+  lmin = min;                                                          \
+  lmax = max;                                                          \
   /* Build `NAME_min' and `NAME_max' in the obstack. */                        \
   obstack_fgrow1 (&format_obstack, "%s_min", name);                    \
   obstack_1grow (&format_obstack, 0);                                  \
   /* Build `NAME_min' and `NAME_max' in the obstack. */                        \
   obstack_fgrow1 (&format_obstack, "%s_min", name);                    \
   obstack_1grow (&format_obstack, 0);                                  \
-  MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack),            \
-                         (long int) min);                              \
+  MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack), lmin);     \
   obstack_fgrow1 (&format_obstack, "%s_max", name);                    \
   obstack_1grow (&format_obstack, 0);                                  \
   obstack_fgrow1 (&format_obstack, "%s_max", name);                    \
   obstack_1grow (&format_obstack, 0);                                  \
-  MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack),            \
-                         (long int) max);                              \
+  MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack), lmax);     \
 }
 
 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_unsigned_int_table, unsigned int)
 }
 
 GENERATE_MUSCLE_INSERT_TABLE(muscle_insert_unsigned_int_table, unsigned int)
@@ -190,7 +193,7 @@ prepare_symbols (void)
   /* Output YYTOKNUM. */
   {
     int i;
   /* Output YYTOKNUM. */
   {
     int i;
-    int *values = XCALLOC (int, ntokens);
+    int *values = MALLOC (values, ntokens);
     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,
@@ -210,13 +213,13 @@ prepare_rules (void)
 {
   rule_number r;
   unsigned int i = 0;
 {
   rule_number r;
   unsigned int i = 0;
-  item_number *rhs = XMALLOC (item_number, nritems);
-  unsigned int *prhs = XMALLOC (unsigned int, nrules);
-  unsigned int *rline = XMALLOC (unsigned int, nrules);
-  symbol_number *r1 = XMALLOC (symbol_number, nrules);
-  unsigned int *r2 = XMALLOC (unsigned int, nrules);
-  short *dprec = XMALLOC (short, nrules);
-  short *merger = XMALLOC (short, nrules);
+  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);
 
   for (r = 0; r < nrules; ++r)
     {
 
   for (r = 0; r < nrules; ++r)
     {
@@ -269,12 +272,12 @@ static void
 prepare_states (void)
 {
   state_number i;
 prepare_states (void)
 {
   state_number i;
-  symbol_number *values =
-    (symbol_number *) alloca (sizeof (symbol_number) * nstates);
+  symbol_number *values = MALLOC (values, nstates);
   for (i = 0; i < nstates; ++i)
     values[i] = states[i]->accessing_symbol;
   muscle_insert_symbol_number_table ("stos", values,
                                     0, 1, nstates);
   for (i = 0; i < nstates; ++i)
     values[i] = states[i]->accessing_symbol;
   muscle_insert_symbol_number_table ("stos", values,
                                     0, 1, nstates);
+  free (values);
 
   MUSCLE_INSERT_INT ("last", high);
   MUSCLE_INSERT_INT ("final_state_number", final_state->number);
 
   MUSCLE_INSERT_INT ("last", high);
   MUSCLE_INSERT_INT ("final_state_number", final_state->number);
@@ -429,7 +432,7 @@ symbol_printers_output (FILE *out)
 
   fputs ("m4_define([b4_symbol_printers], \n[", out);
   for (i = 0; i < nsyms; ++i)
 
   fputs ("m4_define([b4_symbol_printers], \n[", out);
   for (i = 0; i < nsyms; ++i)
-    if (symbols[i]->destructor)
+    if (symbols[i]->printer)
       {
        symbol *sym = symbols[i];
 
       {
        symbol *sym = symbols[i];
 
@@ -510,7 +513,7 @@ output_skeleton (void)
   FILE *in;
   FILE *out;
   int filter_fd[2];
   FILE *in;
   FILE *out;
   int filter_fd[2];
-  char const *argv[7];
+  char const *argv[6];
   pid_t pid;
 
   /* Compute the names of the package data dir and skeleton file.
   pid_t pid;
 
   /* Compute the names of the package data dir and skeleton file.
@@ -518,6 +521,8 @@ output_skeleton (void)
      installation.  A faulty installation can cause deadlock, so a
      cheap sanity check is worthwhile.  */
   char const m4sugar[] = "m4sugar/m4sugar.m4";
      installation.  A faulty installation can cause deadlock, so a
      cheap sanity check is worthwhile.  */
   char const m4sugar[] = "m4sugar/m4sugar.m4";
+  char *full_m4sugar;
+  char *full_cm4;
   char *full_path;
   char const *p;
   char const *m4 = (p = getenv ("M4")) ? p : M4;
   char *full_path;
   char const *p;
   char const *m4 = (p = getenv ("M4")) ? p : M4;
@@ -532,25 +537,29 @@ output_skeleton (void)
   strcpy (full_path, pkgdatadir);
   full_path[pkgdatadirlen] = '/';
   strcpy (full_path + pkgdatadirlen + 1, m4sugar);
   strcpy (full_path, pkgdatadir);
   full_path[pkgdatadirlen] = '/';
   strcpy (full_path + pkgdatadirlen + 1, m4sugar);
-  xfclose (xfopen (full_path, "r"));
+  full_m4sugar = xstrdup (full_path);
+  strcpy (full_path + pkgdatadirlen + 1, "c.m4");
+  full_cm4 = xstrdup (full_path);
   strcpy (full_path + pkgdatadirlen + 1, skeleton);
   strcpy (full_path + pkgdatadirlen + 1, skeleton);
+  xfclose (xfopen (full_m4sugar, "r"));
 
   /* Create an m4 subprocess connected to us via two pipes.  */
 
   if (trace_flag & trace_tools)
 
   /* Create an m4 subprocess connected to us via two pipes.  */
 
   if (trace_flag & trace_tools)
-    fprintf (stderr, "running: %s -I %s %s - %s\n",
-            m4, pkgdatadir, m4sugar, full_path);
+    fprintf (stderr, "running: %s %s - %s %s\n",
+            m4, full_m4sugar, full_cm4, full_path);
 
   argv[0] = m4;
 
   argv[0] = m4;
-  argv[1] = "-I";
-  argv[2] = pkgdatadir;
-  argv[3] = m4sugar;
-  argv[4] = "-";
-  argv[5] = full_path;
-  argv[6] = NULL;
+  argv[1] = full_m4sugar;
+  argv[2] = "-";
+  argv[3] = full_cm4;
+  argv[4] = full_path;
+  argv[5] = NULL;
 
   init_subpipe ();
   pid = create_subpipe (argv, filter_fd);
 
   init_subpipe ();
   pid = create_subpipe (argv, filter_fd);
+  free (full_m4sugar);
+  free (full_cm4);
   free (full_path);
 
   out = fdopen (filter_fd[0], "w");
   free (full_path);
 
   out = fdopen (filter_fd[0], "w");