aboutsummaryrefslogtreecommitdiffstats
path: root/test/racc/assets/error_recovery.y
diff options
context:
space:
mode:
Diffstat (limited to 'test/racc/assets/error_recovery.y')
-rw-r--r--test/racc/assets/error_recovery.y35
1 files changed, 35 insertions, 0 deletions
diff --git a/test/racc/assets/error_recovery.y b/test/racc/assets/error_recovery.y
new file mode 100644
index 0000000000..1fd21ac7d0
--- /dev/null
+++ b/test/racc/assets/error_recovery.y
@@ -0,0 +1,35 @@
+# Regression test case for the bug discussed here:
+# https://github.com/whitequark/parser/issues/93
+# In short, a Racc-generated parser could go into an infinite loop when
+# attempting error recovery at EOF
+
+class InfiniteLoop
+
+rule
+
+ stmts: stmt
+ | error stmt
+
+ stmt: '%' stmt
+
+end
+
+---- inner
+
+ def parse
+ @errors = []
+ do_parse
+ end
+
+ def next_token
+ nil
+ end
+
+ def on_error(error_token, error_value, value_stack)
+ # oh my, an error
+ @errors << [error_token, error_value]
+ end
+
+---- footer
+
+InfiniteLoop.new.parse \ No newline at end of file