java: finish fixing parser stack popping bug.

* NEWS (2.5): Document.
* data/lalr1.java (YYParser::YYStack::pop): Fix off-by-one error
in clearing the location stack.  Also fix pop function that
accepts no arguments.
This commit is contained in:
Joel E. Denny
2011-03-06 22:48:46 -05:00
parent 6f75992be5
commit 4c2a6e42ba
3 changed files with 16 additions and 3 deletions

View File

@@ -1,3 +1,11 @@
2011-03-06 Joel E. Denny <joeldenny@joeldenny.org>
java: finish fixing parser stack popping bug.
* NEWS (2.5): Document.
* data/lalr1.java (YYParser::YYStack::pop): Fix off-by-one error
in clearing the location stack. Also fix pop function that
accepts no arguments.
2011-03-06 Angelo Borsotti <angelo.borsotti@gmail.com> (tiny change) 2011-03-06 Angelo Borsotti <angelo.borsotti@gmail.com> (tiny change)
java: fix parser stack popping bug. java: fix parser stack popping bug.

7
NEWS
View File

@@ -291,7 +291,12 @@ Bison News
canonical LR. However, LAC is still experimental and is disabled canonical LR. However, LAC is still experimental and is disabled
by default. by default.
** A location handling bug in the Java skeleton has been fixed. ** Java skeleton fixes:
*** A location handling bug has been fixed.
*** The top element of each of the value stack and location stack is now
cleared when popped so that it can be garbage collected.
* Changes in version 2.4.3 (2010-08-05): * Changes in version 2.4.3 (2010-08-05):

View File

@@ -255,14 +255,14 @@ b4_lexer_if([[
} }
public final void pop () { public final void pop () {
height--; pop (1);
} }
public final void pop (int num) { public final void pop (int num) {
// Avoid memory leaks... garbage collection is a white lie! // Avoid memory leaks... garbage collection is a white lie!
if (num > 0) { if (num > 0) {
java.util.Arrays.fill (valueStack, height - num + 1, height + 1, null); java.util.Arrays.fill (valueStack, height - num + 1, height + 1, null);
]b4_locations_if([[java.util.Arrays.fill (locStack, height - num + 1, height, null);]])[ ]b4_locations_if([[java.util.Arrays.fill (locStack, height - num + 1, height + 1, null);]])[
} }
height -= num; height -= num;
} }