diff --git a/data/skeletons/glr.c b/data/skeletons/glr.c index 26ba01db..a3b0e69e 100644 --- a/data/skeletons/glr.c +++ b/data/skeletons/glr.c @@ -2180,6 +2180,25 @@ yysyntax_error_arguments (const yyGLRStack* yystackp, } ]])[ +]m4_case(b4_percent_define_get([[parse.error]]), + [custom], +[[/* User defined function to report a syntax error. */ +typedef yyGLRStack yyparse_context_t; +static int +yyreport_syntax_error (const yyGLRStack* yystackp]b4_user_formals[); + +]b4_locations_if([[/* The location of this context. */ +static YYLTYPE * +yyparse_context_location (const yyGLRStack *yystackp) YY_ATTRIBUTE_UNUSED; + +static YYLTYPE * +yyparse_context_location (const yyGLRStack *yystackp) +{ + YYUSE (yystackp); + return &yylloc; +}]])])[ + + static void yyreportSyntaxError (yyGLRStack* yystackp]b4_user_formals[) { diff --git a/tests/calc.at b/tests/calc.at index 3adec377..9be19e2c 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -877,8 +877,9 @@ AT_CHECK_CALC_GLR([%define parse.error verbose]) AT_CHECK_CALC_GLR([%define api.pure %locations]) AT_CHECK_CALC_GLR([%define parse.error verbose %locations]) -AT_CHECK_CALC_GLR([%define parse.error verbose %locations %defines %name-prefix "calc" %verbose %yacc]) +AT_CHECK_CALC_GLR([%define parse.error custom %locations %defines %name-prefix "calc" %verbose %yacc]) AT_CHECK_CALC_GLR([%define parse.error detailed %locations %defines %name-prefix "calc" %verbose %yacc]) +AT_CHECK_CALC_GLR([%define parse.error verbose %locations %defines %name-prefix "calc" %verbose %yacc]) AT_CHECK_CALC_GLR([%debug]) AT_CHECK_CALC_GLR([%define parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])