void muscle_code_grow (const char *key, const char *val, location loc) { char *extension = NULL; obstack_fgrow1 (&muscle_obstack, "]b4_syncline(%d, [[", loc.start.line); MUSCLE_OBSTACK_SGROW (&muscle_obstack, quotearg_style (c_quoting_style, loc.start.file)); obstack_sgrow (&muscle_obstack, "]])[\n"); obstack_sgrow (&muscle_obstack, val); obstack_1grow (&muscle_obstack, 0); extension = obstack_finish (&muscle_obstack); muscle_grow (key, extension, ""); }
static inline void log_resolution (rule *r, symbol_number token, enum conflict_resolution resolution) { if (report_flag & report_solved_conflicts) { /* The description of the resolution. */ switch (resolution) { case shift_resolution: case right_resolution: obstack_fgrow2 (&solved_conflicts_obstack, _(" Conflict between rule %d and token %s" " resolved as shift"), r->number, symbols[token]->tag); break; case reduce_resolution: case left_resolution: obstack_fgrow2 (&solved_conflicts_obstack, _(" Conflict between rule %d and token %s" " resolved as reduce"), r->number, symbols[token]->tag); break; case nonassoc_resolution: obstack_fgrow2 (&solved_conflicts_obstack, _(" Conflict between rule %d and token %s" " resolved as an error"), r->number, symbols[token]->tag); break; } /* The reason. */ switch (resolution) { case shift_resolution: obstack_fgrow2 (&solved_conflicts_obstack, " (%s < %s)", r->prec->tag, symbols[token]->tag); break; case reduce_resolution: obstack_fgrow2 (&solved_conflicts_obstack, " (%s < %s)", symbols[token]->tag, r->prec->tag); break; case left_resolution: obstack_fgrow1 (&solved_conflicts_obstack, " (%%left %s)", symbols[token]->tag); break; case right_resolution: obstack_fgrow1 (&solved_conflicts_obstack, " (%%right %s)", symbols[token]->tag); break; case nonassoc_resolution: obstack_fgrow1 (&solved_conflicts_obstack, " (%%nonassoc %s)", symbols[token]->tag); break; } obstack_sgrow (&solved_conflicts_obstack, ".\n"); } /* XML report */ if (xml_flag) { /* The description of the resolution. */ switch (resolution) { case shift_resolution: case right_resolution: obstack_fgrow2 (&solved_conflicts_xml_obstack, " <resolution rule=\"%d\" symbol=\"%s\"" " type=\"shift\">", r->number, xml_escape (symbols[token]->tag)); break; case reduce_resolution: case left_resolution: obstack_fgrow2 (&solved_conflicts_xml_obstack, " <resolution rule=\"%d\" symbol=\"%s\"" " type=\"reduce\">", r->number, xml_escape (symbols[token]->tag)); break; case nonassoc_resolution: obstack_fgrow2 (&solved_conflicts_xml_obstack, " <resolution rule=\"%d\" symbol=\"%s\"" " type=\"error\">", r->number, xml_escape (symbols[token]->tag)); break; } /* The reason. */ switch (resolution) { case shift_resolution: obstack_fgrow2 (&solved_conflicts_xml_obstack, "%s < %s", xml_escape_n (0, r->prec->tag), xml_escape_n (1, symbols[token]->tag)); break; case reduce_resolution: obstack_fgrow2 (&solved_conflicts_xml_obstack, "%s < %s", xml_escape_n (0, symbols[token]->tag), xml_escape_n (1, r->prec->tag)); break; case left_resolution: obstack_fgrow1 (&solved_conflicts_xml_obstack, "%%left %s", xml_escape (symbols[token]->tag)); break; case right_resolution: obstack_fgrow1 (&solved_conflicts_xml_obstack, "%%right %s", xml_escape (symbols[token]->tag)); break; case nonassoc_resolution: obstack_fgrow1 (&solved_conflicts_xml_obstack, "%%nonassoc %s", xml_escape (symbols[token]->tag)); break; } obstack_sgrow (&solved_conflicts_xml_obstack, "</resolution>\n"); } }