From 10082ac068b9895c0ace2af5f7bb296dc68b9862 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sat, 25 Aug 2018 10:57:38 +0200 Subject: [PATCH] "C++: restore copy-constructor for stack_symbol_type Benchmarks show that it is more efficient to keep this copy constructor, rather than forcing the use of the default constructor and then assignment. This reverts commit 7ab25ad0208d00f509613e1e151aa3043cf2862f. --- data/lalr1.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/data/lalr1.cc b/data/lalr1.cc index eef8176b..95bc61d9 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -314,6 +314,8 @@ b4_location_define])])[ typedef basic_symbol super_type; /// Construct an empty symbol. stack_symbol_type (); + /// Copy construct (for efficiency). + stack_symbol_type (const stack_symbol_type& that); /// Steal the contents from \a sym to build this. stack_symbol_type (state_type s, symbol_type& sym); /// Assignment, needed by push_back. @@ -582,6 +584,14 @@ m4_if(b4_prefix, [yy], [], ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type () {} + ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type (const stack_symbol_type& that) + : super_type (that.state]b4_locations_if([, that.location])[) + { + ]b4_variant_if([b4_symbol_variant([that.type_get ()], + [value], [copy], [that.value])], + [[value = that.value;]])[ + } + ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type (state_type s, symbol_type& that) : super_type (s]b4_variant_if([], [, that.value])[]b4_locations_if([, that.location])[) {]b4_variant_if([