]> git.saurik.com Git - bison.git/commitdiff
c++: reserve 200 slots in the parser's stack
authorAkim Demaille <akim@lrde.epita.fr>
Tue, 20 Jan 2015 19:41:57 +0000 (20:41 +0100)
committerAkim Demaille <akim@lrde.epita.fr>
Tue, 20 Jan 2015 19:45:48 +0000 (20:45 +0100)
This is consistent with what is done with yacc.c and glr.c.  Because
it also avoids that the stack needs to be resized very soon, it should
help keeping tests about destructors more reliable.

Indeed, if the stack is created too small, very soon the C++ library
needs to enlarge it, which means creating a new one, copying the
elements from the initial one onto it, and then destroy the elements
of the initial stack: that would be a spurious call to a destructor.

Reported by Thomas Jahns.
http://lists.gnu.org/archive/html/bug-bison/2015-01/msg00059.html

* data/stack.hh (stack::stack): Reserve 200 slots.
* tests/c++.at: Remove traces of stack expansions.

data/stack.hh
tests/c++.at

index e7ff04058297d9cf2d1063e3180558fb33943674..a56e6c741d49d25737a330a13abd4bfbd7705e01 100644 (file)
@@ -32,12 +32,12 @@ m4_define([b4_stack_define],
     stack ()
       : seq_ ()
     {
+      seq_.reserve (200);
     }
 
     stack (unsigned int n)
       : seq_ (n)
-    {
-    }
+    {}
 
     inline
     T&
@@ -114,8 +114,7 @@ m4_define([b4_stack_define],
     slice (const S& stack, unsigned int range)
       : stack_ (stack)
       , range_ (range)
-    {
-    }
+    {}
 
     inline
     const T&
index 062e5f08fb8c0fe8252b228b901efbf11140ab30..55d7d403448b2b21467fffe3164b39f3edc982e6 100644 (file)
@@ -342,7 +342,6 @@ AT_PARSER_CHECK([./list], 0,
 ]],
 [[Destroy: ""
 Destroy: "0"
-Destroy: (0)
 Destroy: 1
 Destroy: "1"
 Destroy: ()