From 187c2ac344fe0ab19db57fc7873abc272c202ae6 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Tue, 14 Jan 2020 06:58:21 +0100 Subject: [PATCH] c++: report the stack at the same places as in C Let's have C be the reference, and match it elsewhere. Maybe C is too verbose and some adjustments are needed, but then that would be done in another batch of patches. * data/skeletons/lalr1.cc: Print the stack once we popped after YYERROR, and before emptying the stack at the end of parsing. --- data/skeletons/lalr1.cc | 2 ++ tests/c++.at | 1 + 2 files changed, 3 insertions(+) diff --git a/data/skeletons/lalr1.cc b/data/skeletons/lalr1.cc index c338e436..9197a267 100644 --- a/data/skeletons/lalr1.cc +++ b/data/skeletons/lalr1.cc @@ -1045,6 +1045,7 @@ b4_dollar_popdef])[]dnl this YYERROR. */ yypop_ (yylen); yylen = 0; + YY_STACK_PRINT (); goto yyerrlab1; @@ -1116,6 +1117,7 @@ b4_dollar_popdef])[]dnl /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ yypop_ (yylen); + YY_STACK_PRINT (); while (1 < yystack_.size ()) { yy_destroy_ ("Cleanup: popping", yystack_[0]); diff --git a/tests/c++.at b/tests/c++.at index f1afd738..d896af19 100644 --- a/tests/c++.at +++ b/tests/c++.at @@ -679,6 +679,7 @@ Entering state 2 Reading a token: Next token is token EOI () Shifting token EOI () Entering state 3 +Stack now 0 2 3 Cleanup: popping token EOI () Cleanup: popping nterm expr (40) destroy: 40