mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 20:33:03 +00:00
* NEWS: Instead of %union, you can define and use your own union type
YYSTYPE if your grammar contains at least one <type> tag. Your YYSTYPE need not be a macro; it can be a typedef. * doc/bison.texinfo (Value Type, Multiple Types, Location Type): (Union Decl, Decl Summary): Document this. * data/glr.c (YYSTYPE): Implement this. * data/glr.cc (YYSTYPE): Likewise. * data/lalr1.cc (YYSTYPE): Likewise. * data/yacc.c (YYSTYPE): Likewise. * src/output.c (prepare): Output tag_seen_flag. * src/parse-gram.y (declaration, grammar_declaration): Use 'union_seen' rather than 'typed' to determine whether %union has been seen, since grammars can now be typed without %union. (symbol_declaration, type.opt, symbol_def): Keep track of whether a tag has been seen. * src/reader.c (union_seen, tag_seen): New vars. (typed): remove. * src/reader.h (union_seen, tag_seen, typed): Likewise. * src/scan-code.l (untyped_var_seen): New variable. (handle_action_dollar): Adjust to above changes. (handle_action_dollar, handle_action_at): Improve overflow checking for outlandish numbers. * tests/input.at (AT_CHECK_UNUSED_VALUES): Redo test to avoid new diagnostics generated by above changes. * tests/regression.at (YYSTYPE typedef): Add test to check for type tags without %union.
This commit is contained in:
@@ -107,12 +107,12 @@ c: INT | INT { $]1[ } INT { } INT { };
|
||||
d: INT | INT { } INT { $]1[ } INT { };
|
||||
e: INT | INT { } INT { } INT { $]1[ };
|
||||
f: INT | INT { } INT { } INT { $]$[ = $]1[ + $]3[ + $]5[; };
|
||||
g: INT | INT { $]$[ } INT { $]$[ } INT { };
|
||||
h: INT | INT { $]$[ } INT { $]$[ = $]2[ } INT { };
|
||||
g: INT | INT { $<integer>$; } INT { $<integer>$; } INT { };
|
||||
h: INT | INT { $<integer>$; } INT { $<integer>$ = $<integer>2; } INT { };
|
||||
i: INT | INT INT { } { $]$[ = $]1[ + $]2[; };
|
||||
j: INT | INT INT { $<integer>$ = 1; } { $]$[ = $]1[ + $]2[; };
|
||||
k: INT | INT INT { $]$[; } { $]$[ = $]3[; } { };
|
||||
l: INT | INT { $]$[ = $]1[; } INT { $]$[ = $]2[ + $]3[; } INT { $]$[ = $]4[ + $]5[; };]]m4_ifval($1, [
|
||||
k: INT | INT INT { $<integer>$; } { $<integer>$ = $<integer>3; } { };
|
||||
l: INT | INT { $<integer>$ = $<integer>1; } INT { $<integer>$ = $<integer>2 + $<integer>3; } INT { $<integer>$ = $<integer>4 + $<integer>5; };]]m4_ifval($1, [
|
||||
_AT_UNUSED_VALUES_DECLARATIONS])
|
||||
)
|
||||
|
||||
@@ -131,22 +131,22 @@ input.y:14.10-35: warning: unused value: $]5[
|
||||
input.y:15.10-36: warning: unset value: $]$[
|
||||
input.y:15.10-36: warning: unused value: $]3[
|
||||
input.y:15.10-36: warning: unused value: $]5[
|
||||
input.y:17.10-38: warning: unset value: $]$[
|
||||
input.y:17.10-38: warning: unused value: $]1[
|
||||
input.y:17.10-38: warning: unused value: $]2[
|
||||
input.y:17.10-38: warning: unused value: $]3[
|
||||
input.y:17.10-38: warning: unused value: $]4[
|
||||
input.y:17.10-38: warning: unused value: $]5[
|
||||
input.y:18.10-43: warning: unset value: $]$[
|
||||
input.y:18.10-43: warning: unused value: $]1[
|
||||
input.y:18.10-43: warning: unused value: $]3[
|
||||
input.y:18.10-43: warning: unused value: $]4[
|
||||
input.y:18.10-43: warning: unused value: $]5[
|
||||
input.y:17.10-58: warning: unset value: $]$[
|
||||
input.y:17.10-58: warning: unused value: $]1[
|
||||
input.y:17.10-58: warning: unused value: $]2[
|
||||
input.y:17.10-58: warning: unused value: $]3[
|
||||
input.y:17.10-58: warning: unused value: $]4[
|
||||
input.y:17.10-58: warning: unused value: $]5[
|
||||
input.y:18.10-72: warning: unset value: $]$[
|
||||
input.y:18.10-72: warning: unused value: $]1[
|
||||
input.y:18.10-72: warning: unused value: $]3[
|
||||
input.y:18.10-72: warning: unused value: $]4[
|
||||
input.y:18.10-72: warning: unused value: $]5[
|
||||
input.y:20.10-55: warning: unused value: $]3[
|
||||
input.y:21.10-41: warning: unset value: $]$[
|
||||
input.y:21.10-41: warning: unused value: $]1[
|
||||
input.y:21.10-41: warning: unused value: $]2[
|
||||
input.y:21.10-41: warning: unused value: $]4[
|
||||
input.y:21.10-68: warning: unset value: $]$[
|
||||
input.y:21.10-68: warning: unused value: $]1[
|
||||
input.y:21.10-68: warning: unused value: $]2[
|
||||
input.y:21.10-68: warning: unused value: $]4[
|
||||
]])])
|
||||
|
||||
|
||||
|
||||
@@ -49,6 +49,33 @@ AT_CLEANUP
|
||||
|
||||
|
||||
|
||||
## ----------------- ##
|
||||
## YYSTYPE typedef. ##
|
||||
## ----------------- ##
|
||||
|
||||
AT_SETUP([YYSTYPE typedef])
|
||||
|
||||
AT_DATA_GRAMMAR([input.y],
|
||||
[[%{
|
||||
void yyerror (char const *);
|
||||
int yylex (void);
|
||||
typedef union { char const *val; } YYSTYPE;
|
||||
%}
|
||||
|
||||
%type <val> program
|
||||
|
||||
%%
|
||||
|
||||
program: { $$ = ""; };
|
||||
]])
|
||||
|
||||
AT_CHECK([bison -o input.c input.y])
|
||||
AT_COMPILE([input.o], [-c input.c])
|
||||
|
||||
AT_CLEANUP
|
||||
|
||||
|
||||
|
||||
## ------------------------------------- ##
|
||||
## Early token definitions with --yacc. ##
|
||||
## ------------------------------------- ##
|
||||
|
||||
Reference in New Issue
Block a user