From: Akim Demaille Date: Tue, 10 Apr 2012 06:07:32 +0000 (+0200) Subject: glr: eliminate last bits of unwanted locations. X-Git-Tag: v2.5.1_rc2~53 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/d834eca014bd545fb359d20687b4ce2c6875219d?ds=inline;hp=debe2c03c469e8b495d138b81135fba985ac2efb glr: eliminate last bits of unwanted locations. * data/glr.c (YYLTYPE): Do not define when locations are not demanded. Adjust all dependencies. --- diff --git a/NEWS b/NEWS index 52b20457..b49f2c84 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 d0b26926..0e62c6ac 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; } }