bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FYI: glr: eliminate last bits of unwanted locations


From: Akim Demaille
Subject: FYI: glr: eliminate last bits of unwanted locations
Date: Tue, 10 Apr 2012 13:43:11 +0200

Installed in maint.

From d834eca014bd545fb359d20687b4ce2c6875219d Mon Sep 17 00:00:00 2001
From: Akim Demaille <address@hidden>
Date: Tue, 10 Apr 2012 08:07:32 +0200
Subject: [PATCH] glr: eliminate last bits of unwanted locations.

* data/glr.c (YYLTYPE): Do not define when locations are
not demanded.
Adjust all dependencies.
---
 NEWS       |    9 ++++++++-
 data/glr.c |   29 ++++++++++++-----------------
 2 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/NEWS b/NEWS
index 52b2045..b49f2c8 100644
--- 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).
diff --git a/data/glr.c b/data/glr.c
index d0b2692..0e62c6a 100644
--- a/data/glr.c
+++ b/data/glr.c
@@ -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;
     }
 }
-- 
1.7.9.6





reply via email to

[Prev in Thread] Current Thread [Next in Thread]