Merge branch 'maint'

* maint:
  use obstack_printf
  scanner: restore a missing start condition
  gnulib: update
  maint: post-release administrivia
  version 2.6.1
  gnulib: update
  maint: fix some syntax-check issues
  tests: do not depend on __cplusplus to decide for C++ or C output

Conflicts:
	NEWS
	bootstrap.conf
	cfg.mk
	lib/.gitignore
This commit is contained in:
Akim Demaille
2012-07-31 11:50:18 +02:00
16 changed files with 66 additions and 86 deletions

View File

@@ -1 +1 @@
2.6 2.6.1

3
NEWS
View File

@@ -141,6 +141,9 @@ GNU Bison NEWS
* Noteworthy changes in release ?.? (????-??-??) [?] * Noteworthy changes in release ?.? (????-??-??) [?]
* Noteworthy changes in release 2.6.1 (2012-07-30) [stable]
Bison no longer executes user-specified M4 code when processing a grammar. Bison no longer executes user-specified M4 code when processing a grammar.
** Future Changes ** Future Changes

View File

@@ -24,7 +24,10 @@ gnulib_modules='
gettext git-version-gen gitlog-to-changelog gettext git-version-gen gitlog-to-changelog
gpl-3.0 hash inttypes isnan javacomp-script gpl-3.0 hash inttypes isnan javacomp-script
javaexec-script ldexpl malloc-gnu javaexec-script ldexpl malloc-gnu
mbswidth obstack perror progname mbswidth
obstack
obstack-printf
perror progname
quote quotearg quote quotearg
readme-release readme-release
realloc-posix realloc-posix

4
cfg.mk
View File

@@ -59,12 +59,14 @@ exclude = \
$(call exclude, \ $(call exclude, \
bindtextdomain=^lib/main.c$$ \ bindtextdomain=^lib/main.c$$ \
program_name=^lib/main.c$$ \ program_name=^lib/main.c$$ \
prohibit_always-defined_macros=^data/yacc.c|^djgpp/ \ prohibit_always-defined_macros=^data/yacc.c$$|^djgpp/ \
prohibit_always-defined_macros+=?|^lib/timevar.c$$ \ prohibit_always-defined_macros+=?|^lib/timevar.c$$ \
prohibit_always-defined_macros+=?|^src/(parse-gram.c|system.h)$$ \ prohibit_always-defined_macros+=?|^src/(parse-gram.c|system.h)$$ \
prohibit_always-defined_macros+=?|^tests/regression.at$$ \ prohibit_always-defined_macros+=?|^tests/regression.at$$ \
prohibit_defined_have_decl_tests=?|^lib/timevar.c$$ \ prohibit_defined_have_decl_tests=?|^lib/timevar.c$$ \
prohibit_empty_lines_at_EOF=^src/parse-gram.h$$ \ prohibit_empty_lines_at_EOF=^src/parse-gram.h$$ \
prohibit_magic_number_exit=^doc/bison.texi$$ \
prohibit_magic_number_exit+=?|^tests/(conflicts|regression).at$$ \
prohibit_strcmp=^doc/bison\.texi$$ \ prohibit_strcmp=^doc/bison\.texi$$ \
require_config_h_first=^(lib/yyerror|data/(glr|yacc))\.c$$ \ require_config_h_first=^(lib/yyerror|data/(glr|yacc))\.c$$ \
space_tab=^tests/(input|c\+\+)\.at$$ \ space_tab=^tests/(input|c\+\+)\.at$$ \

2
gnulib

Submodule gnulib updated: dbd914496c...678815ea7c

15
lib/.gitignore vendored
View File

@@ -35,6 +35,8 @@
/close.c /close.c
/closeout.c /closeout.c
/closeout.h /closeout.h
/concat-filename.c
/concat-filename.h
/config.charset /config.charset
/config.h /config.h
/config.in.h /config.in.h
@@ -62,6 +64,7 @@
/fd-hook.h /fd-hook.h
/fd-safer-flag.c /fd-safer-flag.c
/fd-safer.c /fd-safer.c
/filename.h
/float+.h /float+.h
/float.c /float.c
/float.h /float.h
@@ -123,6 +126,7 @@
/nonblocking.h /nonblocking.h
/obstack.c /obstack.c
/obstack.h /obstack.h
/obstack_printf.c
/open.c /open.c
/pathmax.h /pathmax.h
/perror.c /perror.c
@@ -223,6 +227,7 @@
/sys_socket.in.h /sys_socket.in.h
/sys_stat.h /sys_stat.h
/sys_stat.in.h /sys_stat.in.h
/sys_types.in.h
/sys_wait.h /sys_wait.h
/sys_wait.in.h /sys_wait.in.h
/sysexits.in.h /sysexits.in.h
@@ -259,14 +264,10 @@
/xalloc-die.c /xalloc-die.c
/xalloc-oversized.h /xalloc-oversized.h
/xalloc.h /xalloc.h
/xconcat-filename.c
/xmalloc.c /xmalloc.c
/xmemdup0.c
/xmemdup0.h
/xsize.h /xsize.h
/xstrndup.c /xstrndup.c
/xstrndup.h /xstrndup.h
/xmemdup0.c
/xmemdup0.h
/sys_types.in.h
/concat-filename.c
/concat-filename.h
/filename.h
/xconcat-filename.c

1
m4/.gitignore vendored
View File

@@ -181,3 +181,4 @@
/xalloc.m4 /xalloc.m4
/xsize.m4 /xsize.m4
/xstrndup.m4 /xstrndup.m4
/obstack-printf.m4

View File

@@ -73,7 +73,7 @@ log_resolution (rule *r, symbol_number token,
{ {
case shift_resolution: case shift_resolution:
case right_resolution: case right_resolution:
obstack_fgrow2 (&solved_conflicts_obstack, obstack_printf (&solved_conflicts_obstack,
_(" Conflict between rule %d and token %s" _(" Conflict between rule %d and token %s"
" resolved as shift"), " resolved as shift"),
r->number, r->number,
@@ -82,7 +82,7 @@ log_resolution (rule *r, symbol_number token,
case reduce_resolution: case reduce_resolution:
case left_resolution: case left_resolution:
obstack_fgrow2 (&solved_conflicts_obstack, obstack_printf (&solved_conflicts_obstack,
_(" Conflict between rule %d and token %s" _(" Conflict between rule %d and token %s"
" resolved as reduce"), " resolved as reduce"),
r->number, r->number,
@@ -90,7 +90,7 @@ log_resolution (rule *r, symbol_number token,
break; break;
case nonassoc_resolution: case nonassoc_resolution:
obstack_fgrow2 (&solved_conflicts_obstack, obstack_printf (&solved_conflicts_obstack,
_(" Conflict between rule %d and token %s" _(" Conflict between rule %d and token %s"
" resolved as an error"), " resolved as an error"),
r->number, r->number,
@@ -102,33 +102,33 @@ log_resolution (rule *r, symbol_number token,
switch (resolution) switch (resolution)
{ {
case shift_resolution: case shift_resolution:
obstack_fgrow2 (&solved_conflicts_obstack, obstack_printf (&solved_conflicts_obstack,
" (%s < %s)", " (%s < %s)",
r->prec->tag, r->prec->tag,
symbols[token]->tag); symbols[token]->tag);
break; break;
case reduce_resolution: case reduce_resolution:
obstack_fgrow2 (&solved_conflicts_obstack, obstack_printf (&solved_conflicts_obstack,
" (%s < %s)", " (%s < %s)",
symbols[token]->tag, symbols[token]->tag,
r->prec->tag); r->prec->tag);
break; break;
case left_resolution: case left_resolution:
obstack_fgrow1 (&solved_conflicts_obstack, obstack_printf (&solved_conflicts_obstack,
" (%%left %s)", " (%%left %s)",
symbols[token]->tag); symbols[token]->tag);
break; break;
case right_resolution: case right_resolution:
obstack_fgrow1 (&solved_conflicts_obstack, obstack_printf (&solved_conflicts_obstack,
" (%%right %s)", " (%%right %s)",
symbols[token]->tag); symbols[token]->tag);
break; break;
case nonassoc_resolution: case nonassoc_resolution:
obstack_fgrow1 (&solved_conflicts_obstack, obstack_printf (&solved_conflicts_obstack,
" (%%nonassoc %s)", " (%%nonassoc %s)",
symbols[token]->tag); symbols[token]->tag);
break; break;
@@ -145,7 +145,7 @@ log_resolution (rule *r, symbol_number token,
{ {
case shift_resolution: case shift_resolution:
case right_resolution: case right_resolution:
obstack_fgrow2 (&solved_conflicts_xml_obstack, obstack_printf (&solved_conflicts_xml_obstack,
" <resolution rule=\"%d\" symbol=\"%s\"" " <resolution rule=\"%d\" symbol=\"%s\""
" type=\"shift\">", " type=\"shift\">",
r->number, r->number,
@@ -154,7 +154,7 @@ log_resolution (rule *r, symbol_number token,
case reduce_resolution: case reduce_resolution:
case left_resolution: case left_resolution:
obstack_fgrow2 (&solved_conflicts_xml_obstack, obstack_printf (&solved_conflicts_xml_obstack,
" <resolution rule=\"%d\" symbol=\"%s\"" " <resolution rule=\"%d\" symbol=\"%s\""
" type=\"reduce\">", " type=\"reduce\">",
r->number, r->number,
@@ -162,7 +162,7 @@ log_resolution (rule *r, symbol_number token,
break; break;
case nonassoc_resolution: case nonassoc_resolution:
obstack_fgrow2 (&solved_conflicts_xml_obstack, obstack_printf (&solved_conflicts_xml_obstack,
" <resolution rule=\"%d\" symbol=\"%s\"" " <resolution rule=\"%d\" symbol=\"%s\""
" type=\"error\">", " type=\"error\">",
r->number, r->number,
@@ -174,33 +174,33 @@ log_resolution (rule *r, symbol_number token,
switch (resolution) switch (resolution)
{ {
case shift_resolution: case shift_resolution:
obstack_fgrow2 (&solved_conflicts_xml_obstack, obstack_printf (&solved_conflicts_xml_obstack,
"%s &lt; %s", "%s &lt; %s",
xml_escape_n (0, r->prec->tag), xml_escape_n (0, r->prec->tag),
xml_escape_n (1, symbols[token]->tag)); xml_escape_n (1, symbols[token]->tag));
break; break;
case reduce_resolution: case reduce_resolution:
obstack_fgrow2 (&solved_conflicts_xml_obstack, obstack_printf (&solved_conflicts_xml_obstack,
"%s &lt; %s", "%s &lt; %s",
xml_escape_n (0, symbols[token]->tag), xml_escape_n (0, symbols[token]->tag),
xml_escape_n (1, r->prec->tag)); xml_escape_n (1, r->prec->tag));
break; break;
case left_resolution: case left_resolution:
obstack_fgrow1 (&solved_conflicts_xml_obstack, obstack_printf (&solved_conflicts_xml_obstack,
"%%left %s", "%%left %s",
xml_escape (symbols[token]->tag)); xml_escape (symbols[token]->tag));
break; break;
case right_resolution: case right_resolution:
obstack_fgrow1 (&solved_conflicts_xml_obstack, obstack_printf (&solved_conflicts_xml_obstack,
"%%right %s", "%%right %s",
xml_escape (symbols[token]->tag)); xml_escape (symbols[token]->tag));
break; break;
case nonassoc_resolution: case nonassoc_resolution:
obstack_fgrow1 (&solved_conflicts_xml_obstack, obstack_printf (&solved_conflicts_xml_obstack,
"%%nonassoc %s", "%%nonassoc %s",
xml_escape (symbols[token]->tag)); xml_escape (symbols[token]->tag));
break; break;

View File

@@ -177,7 +177,7 @@ static void
muscle_syncline_grow (char const *key, location loc) muscle_syncline_grow (char const *key, location loc)
{ {
char *extension = NULL; char *extension = NULL;
obstack_fgrow1 (&muscle_obstack, "]b4_syncline(%d, ", loc.start.line); obstack_printf (&muscle_obstack, "]b4_syncline(%d, ", loc.start.line);
obstack_quote (&muscle_obstack, obstack_quote (&muscle_obstack,
quotearg_style (c_quoting_style, loc.start.file)); quotearg_style (c_quoting_style, loc.start.file));
obstack_sgrow (&muscle_obstack, ")["); obstack_sgrow (&muscle_obstack, ")[");
@@ -269,9 +269,9 @@ muscle_boundary_grow (char const *key, boundary bound)
obstack_sgrow (&muscle_obstack, "[["); obstack_sgrow (&muscle_obstack, "[[");
obstack_escape (&muscle_obstack, bound.file); obstack_escape (&muscle_obstack, bound.file);
obstack_1grow (&muscle_obstack, ':'); obstack_1grow (&muscle_obstack, ':');
obstack_fgrow1 (&muscle_obstack, "%d", bound.line); obstack_printf (&muscle_obstack, "%d", bound.line);
obstack_1grow (&muscle_obstack, '.'); obstack_1grow (&muscle_obstack, '.');
obstack_fgrow1 (&muscle_obstack, "%d", bound.column); obstack_printf (&muscle_obstack, "%d", bound.column);
obstack_sgrow (&muscle_obstack, "]]"); obstack_sgrow (&muscle_obstack, "]]");
obstack_1grow (&muscle_obstack, '\0'); obstack_1grow (&muscle_obstack, '\0');
extension = obstack_finish (&muscle_obstack); extension = obstack_finish (&muscle_obstack);

View File

@@ -42,14 +42,14 @@ extern struct obstack muscle_obstack;
#define MUSCLE_INSERT_INT(Key, Value) \ #define MUSCLE_INSERT_INT(Key, Value) \
do { \ do { \
obstack_fgrow1 (&muscle_obstack, "%d", Value); \ obstack_printf (&muscle_obstack, "%d", Value); \
obstack_1grow (&muscle_obstack, 0); \ obstack_1grow (&muscle_obstack, 0); \
muscle_insert (Key, obstack_finish (&muscle_obstack)); \ muscle_insert (Key, obstack_finish (&muscle_obstack)); \
} while (0) } while (0)
#define MUSCLE_INSERT_LONG_INT(Key, Value) \ #define MUSCLE_INSERT_LONG_INT(Key, Value) \
do { \ do { \
obstack_fgrow1 (&muscle_obstack, "%ld", Value); \ obstack_printf (&muscle_obstack, "%ld", Value); \
obstack_1grow (&muscle_obstack, 0); \ obstack_1grow (&muscle_obstack, 0); \
muscle_insert (Key, obstack_finish (&muscle_obstack)); \ muscle_insert (Key, obstack_finish (&muscle_obstack)); \
} while (0) } while (0)

View File

@@ -69,7 +69,7 @@ Name (char const *name, \
int i; \ int i; \
int j = 1; \ int j = 1; \
\ \
obstack_fgrow1 (&format_obstack, "%6d", first); \ obstack_printf (&format_obstack, "%6d", first); \
for (i = begin; i < end; ++i) \ for (i = begin; i < end; ++i) \
{ \ { \
obstack_1grow (&format_obstack, ','); \ obstack_1grow (&format_obstack, ','); \
@@ -80,7 +80,7 @@ Name (char const *name, \
} \ } \
else \ else \
++j; \ ++j; \
obstack_fgrow1 (&format_obstack, "%6d", table_data[i]); \ obstack_printf (&format_obstack, "%6d", table_data[i]); \
if (table_data[i] < min) \ if (table_data[i] < min) \
min = table_data[i]; \ min = table_data[i]; \
if (max < table_data[i]) \ if (max < table_data[i]) \
@@ -92,10 +92,10 @@ Name (char const *name, \
lmin = min; \ lmin = min; \
lmax = max; \ lmax = max; \
/* Build `NAME_min' and `NAME_max' in the obstack. */ \ /* Build `NAME_min' and `NAME_max' in the obstack. */ \
obstack_fgrow1 (&format_obstack, "%s_min", name); \ obstack_printf (&format_obstack, "%s_min", name); \
obstack_1grow (&format_obstack, 0); \ obstack_1grow (&format_obstack, 0); \
MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack), lmin); \ MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack), lmin); \
obstack_fgrow1 (&format_obstack, "%s_max", name); \ obstack_printf (&format_obstack, "%s_max", name); \
obstack_1grow (&format_obstack, 0); \ obstack_1grow (&format_obstack, 0); \
MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack), lmax); \ MUSCLE_INSERT_LONG_INT (obstack_finish (&format_obstack), lmax); \
} }
@@ -410,13 +410,13 @@ prepare_symbol_definitions (void)
const char *value; const char *value;
#define SET_KEY(Entry) \ #define SET_KEY(Entry) \
obstack_fgrow2 (&format_obstack, "symbol(%d, %s)", \ obstack_printf (&format_obstack, "symbol(%d, %s)", \
i, Entry); \ i, Entry); \
obstack_1grow (&format_obstack, 0); \ obstack_1grow (&format_obstack, 0); \
key = obstack_finish (&format_obstack); key = obstack_finish (&format_obstack);
#define SET_KEY2(Entry, Suffix) \ #define SET_KEY2(Entry, Suffix) \
obstack_fgrow3 (&format_obstack, "symbol(%d, %s_%s)", \ obstack_printf (&format_obstack, "symbol(%d, %s_%s)", \
i, Entry, Suffix); \ i, Entry, Suffix); \
obstack_1grow (&format_obstack, 0); \ obstack_1grow (&format_obstack, 0); \
key = obstack_finish (&format_obstack); key = obstack_finish (&format_obstack);

View File

@@ -54,7 +54,7 @@ print_core (struct obstack *oout, state *s)
snritems = nitemset; snritems = nitemset;
} }
obstack_fgrow1 (oout, "%d", s->number); obstack_printf (oout, "%d", s->number);
for (i = 0; i < snritems; i++) for (i = 0; i < snritems; i++)
{ {
item_number *sp; item_number *sp;
@@ -68,15 +68,15 @@ print_core (struct obstack *oout, state *s)
r = item_number_as_rule_number (*sp); r = item_number_as_rule_number (*sp);
obstack_fgrow1 (oout, "\n%s -> ", rules[r].lhs->tag); obstack_printf (oout, "\n%s -> ", rules[r].lhs->tag);
for (sp = rules[r].rhs; sp < sp1; sp++) for (sp = rules[r].rhs; sp < sp1; sp++)
obstack_fgrow1 (oout, "%s ", symbols[*sp]->tag); obstack_printf (oout, "%s ", symbols[*sp]->tag);
obstack_1grow (oout, '.'); obstack_1grow (oout, '.');
for (/* Nothing */; *sp >= 0; ++sp) for (/* Nothing */; *sp >= 0; ++sp)
obstack_fgrow1 (oout, " %s", symbols[*sp]->tag); obstack_printf (oout, " %s", symbols[*sp]->tag);
/* Experimental feature: display the lookahead tokens. */ /* Experimental feature: display the lookahead tokens. */
if (report_flag & report_lookahead_tokens if (report_flag & report_lookahead_tokens
@@ -95,7 +95,7 @@ print_core (struct obstack *oout, state *s)
obstack_sgrow (oout, "["); obstack_sgrow (oout, "[");
BITSET_FOR_EACH (biter, reds->lookahead_tokens[redno], k, 0) BITSET_FOR_EACH (biter, reds->lookahead_tokens[redno], k, 0)
{ {
obstack_fgrow2 (oout, "%s%s", sep, symbols[k]->tag); obstack_printf (oout, "%s%s", sep, symbols[k]->tag);
sep = ", "; sep = ", ";
} }
obstack_sgrow (oout, "]"); obstack_sgrow (oout, "]");

View File

@@ -435,30 +435,30 @@ show_sub_messages (const char* cp, bool explicit_bracketing,
/* Create the explanation message. */ /* Create the explanation message. */
obstack_init (&msg_buf); obstack_init (&msg_buf);
obstack_fgrow1 (&msg_buf, _("possibly meant: %c"), dollar_or_at); obstack_printf (&msg_buf, _("possibly meant: %c"), dollar_or_at);
if (contains_dot_or_dash (id)) if (contains_dot_or_dash (id))
obstack_fgrow1 (&msg_buf, "[%s]", id); obstack_printf (&msg_buf, "[%s]", id);
else else
obstack_sgrow (&msg_buf, id); obstack_sgrow (&msg_buf, id);
obstack_sgrow (&msg_buf, tail); obstack_sgrow (&msg_buf, tail);
if (var->err & VARIANT_HIDDEN) if (var->err & VARIANT_HIDDEN)
{ {
obstack_fgrow1 (&msg_buf, _(", hiding %c"), dollar_or_at); obstack_printf (&msg_buf, _(", hiding %c"), dollar_or_at);
if (contains_dot_or_dash (var->id)) if (contains_dot_or_dash (var->id))
obstack_fgrow1 (&msg_buf, "[%s]", var->id); obstack_printf (&msg_buf, "[%s]", var->id);
else else
obstack_sgrow (&msg_buf, var->id); obstack_sgrow (&msg_buf, var->id);
obstack_sgrow (&msg_buf, tail); obstack_sgrow (&msg_buf, tail);
} }
obstack_fgrow1 (&msg_buf, _(" at %s"), at_spec); obstack_printf (&msg_buf, _(" at %s"), at_spec);
if (var->err & VARIANT_NOT_VISIBLE_FROM_MIDRULE) if (var->err & VARIANT_NOT_VISIBLE_FROM_MIDRULE)
{ {
const char *format = const char *format =
_(", cannot be accessed from mid-rule action at $%d"); _(", cannot be accessed from mid-rule action at $%d");
obstack_fgrow1 (&msg_buf, format, midrule_rhs_index); obstack_printf (&msg_buf, format, midrule_rhs_index);
} }
obstack_1grow (&msg_buf, '\0'); obstack_1grow (&msg_buf, '\0');
@@ -784,7 +784,7 @@ handle_action_dollar (symbol_list *rule, char *text, location dollar_loc)
untyped_var_seen = true; untyped_var_seen = true;
} }
obstack_fgrow2 (&obstack_for_string, obstack_printf (&obstack_for_string,
"]b4_rhs_value(%d, %d, ", effective_rule_length, n); "]b4_rhs_value(%d, %d, ", effective_rule_length, n);
obstack_quote (&obstack_for_string, type_name); obstack_quote (&obstack_for_string, type_name);
obstack_sgrow (&obstack_for_string, ")["); obstack_sgrow (&obstack_for_string, ")[");
@@ -834,7 +834,7 @@ handle_action_at (symbol_list *rule, char *text, location at_loc)
break; break;
default: default:
obstack_fgrow2 (&obstack_for_string, "]b4_rhs_location(%d, %d)[", obstack_printf (&obstack_for_string, "]b4_rhs_location(%d, %d)[",
effective_rule_length, n); effective_rule_length, n);
break; break;
} }

View File

@@ -91,7 +91,7 @@ static void fail_for_invalid_at (char const *at);
\n out_lineno++; ECHO; \n out_lineno++; ECHO;
[^@\n]+ ECHO; [^@\n]+ ECHO;
<<EOF>> { <INITIAL><<EOF>> {
if (outname) if (outname)
{ {
free (outname); free (outname);

View File

@@ -176,35 +176,6 @@ typedef size_t uintptr_t;
#define obstack_sgrow(Obs, Str) \ #define obstack_sgrow(Obs, Str) \
obstack_grow (Obs, Str, strlen (Str)) obstack_grow (Obs, Str, strlen (Str))
#define obstack_fgrow1(Obs, Format, Arg1) \
do { \
char buf[4096]; \
sprintf (buf, Format, Arg1); \
obstack_grow (Obs, buf, strlen (buf)); \
} while (0)
#define obstack_fgrow2(Obs, Format, Arg1, Arg2) \
do { \
char buf[4096]; \
sprintf (buf, Format, Arg1, Arg2); \
obstack_grow (Obs, buf, strlen (buf)); \
} while (0)
#define obstack_fgrow3(Obs, Format, Arg1, Arg2, Arg3) \
do { \
char buf[4096]; \
sprintf (buf, Format, Arg1, Arg2, Arg3); \
obstack_grow (Obs, buf, strlen (buf)); \
} while (0)
#define obstack_fgrow4(Obs, Format, Arg1, Arg2, Arg3, Arg4) \
do { \
char buf[4096]; \
sprintf (buf, Format, Arg1, Arg2, Arg3, Arg4); \
obstack_grow (Obs, buf, strlen (buf)); \
} while (0)
/* Output Str escaped for our postprocessing (i.e., escape M4 special /* Output Str escaped for our postprocessing (i.e., escape M4 special
characters). characters).

View File

@@ -1281,8 +1281,6 @@ AT_DATA_GRAMMAR([[input.y]],
%debug %debug
%code requires %code requires
{ {
# include <stdio.h>
typedef struct sem_type typedef struct sem_type
{ {
int ival; int ival;
@@ -1291,20 +1289,21 @@ AT_DATA_GRAMMAR([[input.y]],
# define YYSTYPE sem_type # define YYSTYPE sem_type
#ifdef __cplusplus ]AT_SKEL_CC_IF([[
# include <iostream> # include <iostream>
static void static void
report (std::ostream& yyo, int ival, float fval) report (std::ostream& yyo, int ival, float fval)
{ {
yyo << "ival: " << ival << ", fval: " << fval; yyo << "ival: " << ival << ", fval: " << fval;
} }
#else ]], [[
# include <stdio.h>
static void static void
report (FILE* yyo, int ival, float fval) report (FILE* yyo, int ival, float fval)
{ {
fprintf (yyo, "ival: %d, fval: %1.1f", ival, fval); fprintf (yyo, "ival: %d, fval: %1.1f", ival, fval);
} }
#endif ]])[
} }
%code %code