mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-16 07:43: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:
@@ -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