]> git.saurik.com Git - bison.git/blobdiff - data/lalr1.cc
(yyparse): Pacify non-GCC compilers about yyerrorlab
[bison.git] / data / lalr1.cc
index fbfc0b76e3cec25c6e88f122d638b9f0fcf36aa2..ed8250759f824623e2dbab61fb7faa9706b09b9a 100644 (file)
@@ -46,6 +46,7 @@ m4_define([b4_rhs_value],
 [(yysemantic_stack_@{m4_eval([$1 - $2])@}m4_ifval([$3], [.$3]))])
 
 m4_define_default([b4_location_type], [location])
+m4_define_default([b4_filename_type], [std::string])
 
 # b4_lhs_location()
 # -----------------
@@ -118,15 +119,18 @@ b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison],
 #ifndef PARSER_HEADER_H
 # define PARSER_HEADER_H
 
-#include "stack.hh"
-#include "location.hh"
-
 #include <string>
 #include <iostream>
 
 /* Using locations.  */
 #define YYLSP_NEEDED ]b4_locations_flag[
 
+namespace yy
+{
+  class position;
+  class location;
+}
+
 ]b4_token_defines(b4_tokens)[
 
 /* Copy the first part of user declarations.  */
@@ -135,6 +139,9 @@ b4_copyright([C++ Skeleton parser for LALR(1) parsing with Bison],
 ]/* Line __line__ of lalr1.cc.  */
 b4_syncline([@oline@], [@ofile@])[
 
+#include "stack.hh"
+#include "location.hh"
+
 /* Enabling traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG ]b4_debug[
@@ -206,25 +213,12 @@ namespace yy
   /// A Bison parser.
   class ]b4_parser_class_name[
   {
-  public:
-    /// Internal symbol numbers.
-    typedef traits<]b4_parser_class_name[>::token_number_type token_number_type;
-    /// A type to store symbol numbers and -1.
-    typedef traits<]b4_parser_class_name[>::rhs_number_type   rhs_number_type;
-    /// State numbers.
-    typedef traits<]b4_parser_class_name[>::state_type       state_type;
     /// Symbol semantic values.
-    typedef traits<]b4_parser_class_name[>::semantic_type    semantic_type;
+    typedef traits<]b4_parser_class_name[>::semantic_type semantic_type;
     /// Symbol locations.
-    typedef traits<]b4_parser_class_name[>::location_type    location_type;
-
-    /// State stack type.
-    typedef stack<state_type>    state_stack;
-    /// Semantic value stack type.
-    typedef stack<semantic_type> semantic_stack;
-    /// location stack type.
-    typedef stack<location_type> location_stack;
+    typedef traits<]b4_parser_class_name[>::location_type location_type;
 
+  public:
     /// Build a parser object.
     ]b4_parser_class_name[ (]b4_parse_param_decl[) :
       yydebug_ (false),
@@ -276,13 +270,24 @@ namespace yy
 #endif /* ! YYDEBUG */
 
 
+    /// State numbers.
+    typedef traits<]b4_parser_class_name[>::state_type state_type;
+    /// State stack type.
+    typedef stack<state_type>    state_stack_type;
+    /// Semantic value stack type.
+    typedef stack<semantic_type> semantic_stack_type;
+    /// location stack type.
+    typedef stack<location_type> location_stack_type;
+
     /// The state stack.
-    state_stack    yystate_stack_;
+    state_stack_type yystate_stack_;
     /// The semantic value stack.
-    semantic_stack yysemantic_stack_;
+    semantic_stack_type yysemantic_stack_;
     /// The location stack.
-    location_stack yylocation_stack_;
+    location_stack_type yylocation_stack_;
 
+    /// Internal symbol numbers.
+    typedef traits<]b4_parser_class_name[>::token_number_type token_number_type;
     /* Tables.  */
     /// For a state, the index in \a yytable_ of its portion.
     static const ]b4_int_type_for([b4_pact])[ yypact_[];
@@ -320,6 +325,8 @@ namespace yy
 #endif
 
 #if YYDEBUG
+    /// A type to store symbol numbers and -1.
+    typedef traits<]b4_parser_class_name[>::rhs_number_type rhs_number_type;
     /// A `-1'-separated list of the rules' RHS.
     static const rhs_number_type yyrhs_[];
     /// For each rule, the index of the first RHS symbol in \a yyrhs_.
@@ -484,6 +491,7 @@ yy::]b4_parser_class_name[::yydestruct_ (const char* yymsg,
                          int yytype, semantic_type* yyvaluep, location_type* yylocationp)
 {
   /* Pacify ``unused variable'' warnings.  */
+  (void) yymsg;
   (void) yyvaluep;
   (void) yylocationp;
 
@@ -557,9 +565,9 @@ b4_syncline([@oline@], [@ofile@])])dnl
      yynewstate, since the latter expects the semantical and the
      location values to have been already stored, initialize these
      stacks with a primary value.  */
-  yystate_stack_ = state_stack (0);
-  yysemantic_stack_ = semantic_stack (0);
-  yylocation_stack_ = location_stack (0);
+  yystate_stack_ = state_stack_type (0);
+  yysemantic_stack_ = semantic_stack_type (0);
+  yylocation_stack_ = location_stack_type (0);
   yysemantic_stack_.push (yylval);
   yylocation_stack_.push (yylloc);
 
@@ -662,7 +670,7 @@ yyreduce:
     yyval = yysemantic_stack_[0];
 
   {
-    slice<location_type, location_stack> slice (yylocation_stack_, yylen_);
+    slice<location_type, location_stack_type> slice (yylocation_stack_, yylen_);
     YYLLOC_DEFAULT (yyloc, slice, yylen_);
   }
   YY_REDUCE_PRINT (yyn_);
@@ -989,7 +997,7 @@ void
 yy::]b4_parser_class_name[::yystack_print_ ()
 {
   *yycdebug_ << "Stack now";
-  for (state_stack::const_iterator i = yystate_stack_.begin ();
+  for (state_stack_type::const_iterator i = yystate_stack_.begin ();
        i != yystate_stack_.end (); ++i)
     *yycdebug_ << ' ' << *i;
   *yycdebug_ << std::endl;
@@ -1111,6 +1119,7 @@ namespace yy
     S seq_;
   };
 
+  /// Present a slice of the top of a stack.
   template <class T, class S = stack<T> >
   class slice
   {
@@ -1168,7 +1177,7 @@ namespace yy
   public:
     /// Construct a position.
     position () :
-      filename (),
+      filename (0),
       line (initial_line),
       column (initial_column)
     {
@@ -1200,7 +1209,7 @@ namespace yy
 
   public:
     /// File name to which this position refers.
-    std::string filename;
+    ]b4_filename_type[* filename;
     /// Current line number.
     unsigned int line;
     /// Current column number.
@@ -1244,8 +1253,8 @@ namespace yy
   inline std::ostream&
   operator<< (std::ostream& ostr, const position& pos)
   {
-    if (!pos.filename.empty ())
-      ostr << pos.filename << ':';
+    if (pos.filename)
+      ostr << *pos.filename << ':';
     return ostr << pos.line << '.' << pos.column;
   }
 
@@ -1276,7 +1285,7 @@ namespace yy
      ** \{ */
   public:
     /// Construct a location.
-    location (void) :
+    location () :
       begin (),
       end ()
     {
@@ -1288,7 +1297,7 @@ namespace yy
      ** \{ */
   public:
     /// Reset initial location to final location.
-    inline void step (void)
+    inline void step ()
     {
       begin = end;
     }
@@ -1347,7 +1356,9 @@ namespace yy
   {
     position last = loc.end - 1;
     ostr << loc.begin;
-    if (loc.begin.filename != last.filename)
+    if (last.filename
+       && (!loc.begin.filename
+           || *loc.begin.filename != *last.filename))
       ostr << '-' << last;
     else if (loc.begin.line != last.line)
       ostr << '-' << last.line  << '.' << last.column;