/[bison]/bison/src/output.c
ViewVC logotype

Diff of /bison/src/output.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.88 by akim, Fri Dec 14 15:39:05 2001 UTC revision 1.89 by akim, Sat Dec 15 14:14:29 2001 UTC
# Line 285  output_rule_data (void) Line 285  output_rule_data (void)
285                       0, 1, nrules + 1);                       0, 1, nrules + 1);
286    muscle_insert ("r2", obstack_finish (&output_obstack));    muscle_insert ("r2", obstack_finish (&output_obstack));
287    XFREE (short_tab);    XFREE (short_tab);
   
   XFREE (rule_table + 1);  
288  }  }
289    
290  /*------------------------------------------------------------------.  /*------------------------------------------------------------------.
# Line 512  token_actions (void) Line 510  token_actions (void)
510  }  }
511    
512    
513    /*-----------------------------.
514    | Output the actions to OOUT.  |
515    `-----------------------------*/
516    
517    static void
518    actions_output (struct obstack *oout)
519    {
520      int rule;
521      for (rule = 1; rule < nrules + 1; ++rule)
522        if (rule_table[rule].action)
523          {
524            obstack_fgrow1 (oout, "  case %d:\n", rule);
525    
526            if (!no_lines_flag)
527              obstack_fgrow2 (oout, muscle_find ("linef"),
528                              rule_table[rule].action_line,
529                              quotearg_style (c_quoting_style,
530                                              muscle_find ("filename")));
531            obstack_1grow (oout, '{');
532            obstack_sgrow (oout, rule_table[rule].action);
533            /* As a Bison extension, add the ending semicolon.  Since some
534               Yacc don't do that, help people using bison as a Yacc
535               finding their missing semicolons.  */
536            obstack_fgrow1 (oout, "%s}\n    break;\n\n", yacc_flag ? ";" : "");
537          }
538    }
539    
540    
541  static void  static void
542  save_column (int symbol, int default_state)  save_column (int symbol, int default_state)
543  {  {
# Line 931  output_parser (const char *skel_filename Line 957  output_parser (const char *skel_filename
957            /* Output the right value, or see if it's something special.  */            /* Output the right value, or see if it's something special.  */
958            muscle_key = obstack_finish (&muscle_obstack);            muscle_key = obstack_finish (&muscle_obstack);
959            muscle_value = muscle_find (muscle_key);            muscle_value = muscle_find (muscle_key);
960            if (muscle_value)            if (!strcmp (muscle_key, "actions"))
961              obstack_sgrow (oout, muscle_value);              actions_output (oout);
962            else if (!strcmp (muscle_key, "line"))            else if (!strcmp (muscle_key, "line"))
963              obstack_fgrow1 (oout, "%d", line + 1);              obstack_fgrow1 (oout, "%d", line + 1);
964              else if (muscle_value)
965                obstack_sgrow (oout, muscle_value);
966            else            else
967              {              {
968                obstack_sgrow (oout, "%%");                obstack_sgrow (oout, "%%");
# Line 1011  prepare (void) Line 1039  prepare (void)
1039    MUSCLE_INSERT_INT ("ntokens", ntokens);    MUSCLE_INSERT_INT ("ntokens", ntokens);
1040    
1041    MUSCLE_INSERT_INT ("locations-flag", locations_flag);    MUSCLE_INSERT_INT ("locations-flag", locations_flag);
   
   /* We need to save the actions in the muscle %%action.  */  
   obstack_1grow (&action_obstack, 0);  
   muscle_insert ("action", obstack_finish (&action_obstack));  
   
1042  }  }
1043    
1044  /*----------------------------------------------------------.  /*----------------------------------------------------------.
# Line 1044  output (void) Line 1067  output (void)
1067    
1068    output_master_parser ();    output_master_parser ();
1069    
1070      free (rule_table + 1);
1071    obstack_free (&muscle_obstack, 0);    obstack_free (&muscle_obstack, 0);
1072    obstack_free (&output_obstack, 0);    obstack_free (&output_obstack, 0);
1073    obstack_free (&action_obstack, 0);    obstack_free (&action_obstack, 0);

Legend:
Removed from v.1.88  
changed lines
  Added in v.1.89

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26