]> git.saurik.com Git - bison.git/commitdiff
glr: eliminate last bits of unwanted locations.
authorAkim Demaille <akim@lrde.epita.fr>
Tue, 10 Apr 2012 06:07:32 +0000 (08:07 +0200)
committerAkim Demaille <akim@lrde.epita.fr>
Tue, 10 Apr 2012 11:11:51 +0000 (13:11 +0200)
* data/glr.c (YYLTYPE): Do not define when locations are
not demanded.
Adjust all dependencies.

NEWS
data/glr.c

diff --git a/NEWS b/NEWS
index 52b2045750d4836d7cff7248b7a5a7d2680e9be8..b49f2c84245da2e0f137a45f1a38c79aef9b68b8 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -9,7 +9,14 @@ Bison News
 
 ** yacc.c: YYBACKUP works as expected.
 
-** glr.c: __attribute__ is preserved:
+** glr.c improvements:
+
+*** Location support is eliminated when not requested:
+
+  GLR parsers used to include location-related code even when
+  locations were not requested, and therefore not even usable.
+
+*** __attribute__ is preserved:
 
   __attribute__ is no longer disabled when __STRICT_ANSI__ is defined
   (i.e., when -std is passed to GCC).
index d0b269263dadb32ba1bedd7bef6c858550d02964..0e62c6ace4ffc3f77a125ebc5aef03368f26474f 100644 (file)
@@ -207,23 +207,19 @@ b4_token_enums(b4_tokens)
 [[typedef int YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1]])])[
 #endif
-
+]b4_locations_if([[
 #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
 typedef struct YYLTYPE
 {
-]b4_locations_if([
   int first_line;
   int first_column;
   int last_line;
   int last_column;
-],[
-  char yydummy;
-])[
 } YYLTYPE;
 # define YYLTYPE_IS_DECLARED 1
 # define YYLTYPE_IS_TRIVIAL 1
 #endif
-
+]])[
 ]b4_percent_code_get([[provides]])[]dnl
 ])
 
@@ -566,9 +562,8 @@ m4_if(b4_prefix[], [yy], [],
 #define b4_prefix[]char yychar
 #define b4_prefix[]lval yylval
 #define b4_prefix[]lloc yylloc])],
-[YYSTYPE yylval;
-
-YYLTYPE yylloc;
+[YYSTYPE yylval;]b4_locations_if([[
+YYLTYPE yylloc;]])[
 
 int yynerrs;
 int yychar;])[
@@ -774,9 +769,9 @@ struct yyGLRState {
     yySemanticOption* yyfirstVal;
     /** Semantic value for this state.  */
     YYSTYPE yysval;
-  } yysemantics;
+  } yysemantics;]b4_locations_if([[
   /** Source location for this state.  */
-  YYLTYPE yyloc;
+  YYLTYPE yyloc;]])[
 };
 
 struct yyGLRStateSet {
@@ -798,8 +793,8 @@ struct yySemanticOption {
   yyGLRState* yystate;
   /** The lookahead for this reduction.  */
   int yyrawchar;
-  YYSTYPE yyval;
-  YYLTYPE yyloc;
+  YYSTYPE yyval;]b4_locations_if([[
+  YYLTYPE yyloc;]])[
   /** Next sibling in chain of options.  To facilitate merging,
    *  options are chained in decreasing order by address.  */
   yySemanticOption* yynext;
@@ -820,8 +815,8 @@ struct yyGLRStack {
 [
   int yyerrcnt;
   int yyrawchar;
-  YYSTYPE yyval;
-  YYLTYPE yyloc;
+  YYSTYPE yyval;]b4_locations_if([[
+  YYLTYPE yyloc;]])[
 ])[
   YYJMP_BUF yyexception_buffer;
   yyGLRStackItem* yyitems;
@@ -880,8 +875,8 @@ yyfillin (yyGLRStackItem *yyvsp, int yylow0, int yylow1)
     {
       YYASSERT (s->yyresolved);
       yyvsp[i].yystate.yyresolved = yytrue;
-      yyvsp[i].yystate.yysemantics.yysval = s->yysemantics.yysval;
-      yyvsp[i].yystate.yyloc = s->yyloc;
+      yyvsp[i].yystate.yysemantics.yysval = s->yysemantics.yysval;]b4_locations_if([[
+      yyvsp[i].yystate.yyloc = s->yyloc;]])[
       s = yyvsp[i].yystate.yypred = s->yypred;
     }
 }