]> git.saurik.com Git - bison.git/blobdiff - data/lalr1.cc
tests: remove quote magic from the bison test wrapper.
[bison.git] / data / lalr1.cc
index 8afabc21d9f80b91f0079ac6d9a254221e4a92c7..4179deafdf691119f2a6c00f07cf63b673da0740 100644 (file)
@@ -209,6 +209,9 @@ b4_namespace_close])[
     /// \param msg    a description of the syntax error.
     virtual void error (]b4_locations_if([const location_type& loc, ])[const std::string& msg);
 
+    /// Report a syntax error.
+    void error (const syntax_error& err);
+
   private:
     /// State numbers.
     typedef int state_type;
@@ -441,7 +444,7 @@ b4_percent_code_get[]dnl
 #else /* !YYDEBUG */
 
 # define YYCDEBUG if (false) std::cerr
-# define YY_SYMBOL_PRINT(Title, Symbol)  static_cast<void>(0)
+# define YY_SYMBOL_PRINT(Title, Symbol)  YYUSE(Symbol)
 # define YY_REDUCE_PRINT(Rule)           static_cast<void>(0)
 # define YY_STACK_PRINT()                static_cast<void>(0)
 
@@ -545,7 +548,6 @@ b4_percent_code_get[]dnl
                                        symbol_base_type<Exact>& yysym) const
   {
     int yytype = yysym.type_get ();
-    YYUSE (yymsg);
     if (yymsg)
       YY_SYMBOL_PRINT (yymsg, yysym);
 
@@ -735,13 +737,21 @@ m4_popdef([b4_at_dollar])])dnl
     if (yyempty)
       {
         YYCDEBUG << "Reading a token: ";
+        try
+        {
 ]b4_lex_symbol_if(
-[        yyla = b4_c_function_call([yylex], [symbol_type],
-                                   m4_ifdef([b4_lex_param], b4_lex_param));],
-[        yyla.type = yytranslate_ (b4_c_function_call([yylex], [int],
+[          yyla = b4_c_function_call([yylex], [symbol_type],
+                                     m4_ifdef([b4_lex_param], b4_lex_param));],
+[          yyla.type = yytranslate_ (b4_c_function_call([yylex], [int],
                                      [[YYSTYPE*], [&yyla.value]][]dnl
 b4_locations_if([, [[location*], [&yyla.location]]])dnl
 m4_ifdef([b4_lex_param], [, ]b4_lex_param)));])[
+        }
+        catch (const syntax_error& yyexc)
+        {
+          error (yyexc);
+          goto yyerrlab1;
+        }
         yyempty = false;
       }
     YY_SYMBOL_PRINT ("Next token is", yyla);
@@ -824,8 +834,7 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param)));])[
     }
     catch (const syntax_error& yyexc)
     {
-      error (]b4_args(b4_locations_if([yyexc.location]),
-                      [[yyexc.what()]])[);
+      error (yyexc);
       YYERROR;
     }
     YY_SYMBOL_PRINT ("-> $$ =", yylhs);
@@ -972,6 +981,13 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param)));])[
     return yyresult;
   }
 
+  void
+  ]b4_parser_class_name[::error (const syntax_error& yyexc)
+  {
+    error (]b4_args(b4_locations_if([yyexc.location]),
+                    [[yyexc.what()]])[);
+  }
+
   // Generate an error message.
   std::string
   ]b4_parser_class_name[::yysyntax_error_ (]dnl