]> git.saurik.com Git - bison.git/blobdiff - data/lalr1.cc
* configure.ac (AM_STDBOOL_H): Invoke this instead of AC_HEADER_STDBOOL.
[bison.git] / data / lalr1.cc
index 2ef527b6e0547391ad94693c2d14f2de9942673f..a40521b431f34a91b68a609ed031a20721da8893 100644 (file)
@@ -81,6 +81,39 @@ m4_define([b4_constructor],
                    [])])
 
 
+# b4_parse_param_decl
+# -------------------
+#  Constructor's extra arguments.
+m4_define([b4_parse_param_decl],
+          [m4_ifset([b4_parse_param], [, b4_c_ansi_formals(b4_parse_param)])])
+
+# b4_parse_param_cons
+# -------------------
+#  constructor's extra initialisations.
+m4_define([b4_parse_param_cons],
+          [m4_ifset([b4_parse_param],
+                   [,
+      b4_cc_constructor_calls(b4_parse_param)])])
+m4_define([b4_cc_constructor_calls],
+         [m4_map_sep([b4_cc_constructor_call], [,
+      ], [$@])])
+m4_define([b4_cc_constructor_call],
+         [$2($2)])
+
+# b4_parse_param_vars
+# -------------------
+#  Extra instance variables.
+m4_define([b4_parse_param_vars],
+          [m4_ifset([b4_parse_param],
+                   [
+    /* User arguments.  */
+b4_cc_var_decls(b4_parse_param)])])
+m4_define([b4_cc_var_decls],
+         [m4_map_sep([b4_cc_var_decl], [
+], [$@])])
+m4_define([b4_cc_var_decl],
+         [    $1;])
+
 # We do want M4 expansion after # for CPP macros.
 m4_changecom()
 m4_divert(0)dnl
@@ -178,14 +211,14 @@ namespace yy
 
 #if YYLSP_NEEDED
     ]b4_parser_class_name[ (bool debug,
-           LocationType initlocation][]b4_param[) :
+           LocationType initlocation][]b4_param[]b4_parse_param_decl[) :
       ]b4_constructor[][debug_ (debug),
       cdebug_ (std::cerr),
-      initlocation_ (initlocation)
+      initlocation_ (initlocation)]b4_parse_param_cons[
 #else
-    ]b4_parser_class_name[ (bool debug][]b4_param[) :
+    ]b4_parser_class_name[ (bool debug][]b4_param[]b4_parse_param_decl[) :
       ]b4_constructor[][debug_ (debug),
-      cdebug_ (std::cerr)
+      cdebug_ (std::cerr)]b4_parse_param_cons[
 #endif
     {
     }
@@ -209,12 +242,12 @@ namespace yy
 
     /* Tables.  */
     static const ]b4_int_type_for([b4_pact])[ pact_[];
-    static const ]b4_int_type_for([b4_pact])[ pact_ninf_;
+    static const ]b4_int_type(b4_pact_ninf, b4_pact_ninf)[ pact_ninf_;
     static const ]b4_int_type_for([b4_defact])[ defact_[];
     static const ]b4_int_type_for([b4_pgoto])[ pgoto_[];
     static const ]b4_int_type_for([b4_defgoto])[ defgoto_[];
     static const ]b4_int_type_for([b4_table])[ table_[];
-    static const ]b4_int_type_for([b4_table])[ table_ninf_;
+    static const ]b4_int_type(b4_table_ninf, b4_table_ninf)[ table_ninf_;
     static const ]b4_int_type_for([b4_check])[ check_[];
     static const ]b4_int_type_for([b4_r1])[ r1_[];
     static const ]b4_int_type_for([b4_r2])[ r2_[];
@@ -274,6 +307,7 @@ namespace yy
 
     /* Initial location.  */
     LocationType initlocation_;
+]b4_parse_param_vars[
   };
 }
 
@@ -432,9 +466,9 @@ yy::]b4_parser_class_name[::parse ()
       // Short files will use "unsigned char" for line numbers,
       // in which case they will be output as character litterals
       // by "<<".
-      unsigned yylineno = rline_[n_];
+      unsigned yylno = rline_[n_];
       YYCDEBUG << "Reducing via rule " << n_ - 1
-               << " (line " << yylineno << "), ";
+               << " (line " << yylno << "), ";
       for (]b4_int_type_for([b4_prhs])[ i = prhs_[n_];
           0 <= rhs_[i]; ++i)
        YYCDEBUG << name_[rhs_[i]] << ' ';
@@ -498,17 +532,23 @@ b4_syncline([@oline@], [@ofile@])[
          message += name_[ilooka_];
          {
            int count = 0;
-           for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
+            /* Start YYX at -YYN if negative to avoid negative indexes in
+               YYCHECK.  */
+           int xbegin = n_ < 0 ? -n_ : 0;
+           /* Stay within bounds of both yycheck and yytname.  */
+           int checklim = last_ - n_;
+           int xend = checklim < ntokens_ ? checklim : ntokens_;
+           for (int x = xbegin; x < xend; ++x)
              if (check_[x + n_] == x && x != terror_)
                ++count;
            if (count < 5)
              {
                count = 0;
-               for (int x = (n_ < 0 ? -n_ : 0); x < ntokens_ + nnts_; ++x)
-                 if (check_[x + n_] == x && x != terror_)
+               for (int x1 = xbegin; x1 < xend; ++x1)
+                 if (check_[x1 + n_] == x1 && x1 != terror_)
                    {
                      message += (!count++) ? ", expecting " : " or ";
-                     message += name_[x];
+                     message += name_[x1];
                    }
              }
          }
@@ -633,7 +673,7 @@ yy::]b4_parser_class_name[::lex_ ()
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-const ]b4_int_type_for([b4_pact]) yy::b4_parser_class_name::pact_ninf_ = b4_pact_ninf[;
+const ]b4_int_type(b4_pact_ninf, b4_pact_ninf) yy::b4_parser_class_name::pact_ninf_ = b4_pact_ninf[;
 const ]b4_int_type_for([b4_pact])[
 yy::]b4_parser_class_name[::pact_[] =
 {
@@ -666,7 +706,7 @@ yy::]b4_parser_class_name[::defgoto_[] =
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.  */
-const ]b4_int_type_for([b4_table]) yy::b4_parser_class_name::table_ninf_ = b4_table_ninf[;
+const ]b4_int_type(b4_table_ninf, b4_table_ninf) yy::b4_parser_class_name::table_ninf_ = b4_table_ninf[;
 const ]b4_int_type_for([b4_table])[
 yy::]b4_parser_class_name[::table_[] =
 {
@@ -752,12 +792,12 @@ yy::]b4_parser_class_name[::translate_ (int token)
 {
   static
   const TokenNumberType
-  translate_[] =
+  translate_table[] =
   {
     ]b4_translate[
   };
   if ((unsigned) token <= user_token_number_max_)
-    return translate_[token];
+    return translate_table[token];
   else
     return undef_token_;
 }
@@ -804,16 +844,16 @@ namespace yy
 
     inline
     T&
-    operator [] (unsigned index)
+    operator [] (unsigned i)
     {
-      return seq_[index];
+      return seq_[i];
     }
 
     inline
     const T&
-    operator [] (unsigned index) const
+    operator [] (unsigned i) const
     {
-      return seq_[index];
+      return seq_[i];
     }
 
     inline
@@ -859,9 +899,9 @@ namespace yy
 
     inline
     const T&
-    operator [] (unsigned index) const
+    operator [] (unsigned i) const
     {
-      return stack_[range_ - index];
+      return stack_[range_ - i];
     }
 
   private:
@@ -914,20 +954,20 @@ namespace yy
     /** \name Line and Column related manipulators
      ** \{ */
   public:
-    /** \brief (line related) Advance to the LINES next lines. */
-    inline void lines (int lines = 1)
+    /** \brief (line related) Advance to the COUNT next lines. */
+    inline void lines (int count = 1)
     {
       column = initial_column;
-      line += lines;
+      line += count;
     }
 
-    /** \brief (column related) Advance to the COLUMNS next columns. */
-    inline void columns (int columns = 1)
+    /** \brief (column related) Advance to the COUNT next columns. */
+    inline void columns (int count = 1)
     {
       int leftmost = initial_column;
       int current  = column;
-      if (leftmost <= current + columns)
-       column += columns;
+      if (leftmost <= current + count)
+       column += count;
       else
        column = initial_column;
     }
@@ -1028,16 +1068,16 @@ namespace yy
       begin = end;
     }
 
-    /** \brief Extend the current location to the COLUMNS next columns. */
-    inline void columns (unsigned columns = 1)
+    /** \brief Extend the current location to the COUNT next columns. */
+    inline void columns (unsigned int count = 1)
     {
-      end += columns;
+      end += count;
     }
 
-    /** \brief Extend the current location to the LINES next lines. */
-    inline void lines (unsigned lines = 1)
+    /** \brief Extend the current location to the COUNT next lines. */
+    inline void lines (unsigned int count = 1)
     {
-      end.lines (lines);
+      end.lines (count);
     }
     /** \} */