mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-15 07:13:02 +00:00
Use variants to support objects as semantic values.
This patch was inspired by work by Michiel De Wilde. But he used Boost variants which (i) requires Boost on the user side, (ii) is slow, and (iii) has useless overhead (the parser knows the type of the semantic value there is no reason to duplicate this information as Boost.Variants do). This implementation reserves a buffer large enough to store the largest objects. yy::variant implements this buffer. It was implemented with Quentin Hocquet. * src/output.c (type_names_output): New. (output_skeleton): Invoke it. * data/c++.m4 (b4_variant_if): New. (b4_symbol_value): If needed, provide a definition for variants. * data/lalr1.cc (b4_symbol_value, b4_symbol_action_) (b4_symbol_variant, _b4_char_sizeof_counter, _b4_char_sizeof_dummy) (b4_char_sizeof, yy::variant): New. (parser::parse): If variants are requested, define parser::union_type, parser::variant, change the definition of semantic_type, construct $$ before running the user action instead of performing a default $$ = $1. * examples/variant.yy: New. Based on an example by Michiel De Wilde.
This commit is contained in:
2
THANKS
2
THANKS
@@ -55,6 +55,7 @@ Martin Nylin martin.nylin@linuxmail.org
|
||||
Matt Kraai kraai@alumni.cmu.edu
|
||||
Matt Rosing rosing@peakfive.com
|
||||
Michael Hayes m.hayes@elec.canterbury.ac.nz
|
||||
Michiel De Wilde mdewilde.agilent@gmail.com
|
||||
Mickael Labau labau_m@epita.fr
|
||||
Mike Castle dalgoda@ix.netcom.com
|
||||
Neil Booth NeilB@earthling.net
|
||||
@@ -71,6 +72,7 @@ Per Allansson per@appgate.com
|
||||
Peter Fales psfales@lucent.com
|
||||
Peter Hamorsky hamo@upjs.sk
|
||||
Piotr Gackiewicz gacek@intertel.com.pl
|
||||
Quentin Hocquet hocquet@gostai.com
|
||||
Quoc Peyrot chojin@lrde.epita.fr
|
||||
R Blake blakers@mac.com
|
||||
Raja R Harinath harinath@cs.umn.edu
|
||||
|
||||
Reference in New Issue
Block a user