From 58612f1de025e98cb90e00df73a40499fd43528c Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Wed, 19 Jun 2002 09:07:36 +0000 Subject: [PATCH] * data/bison.simple (m4_location_if): New. Use it instead of #ifdef YYLSP_NEEDED. --- ChangeLog | 5 ++ data/bison.simple | 156 ++++++++++++++++++---------------------------- 2 files changed, 66 insertions(+), 95 deletions(-) diff --git a/ChangeLog b/ChangeLog index dddde05f..3445b4b3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2002-06-19 Akim Demaille + + * data/bison.simple (m4_location_if): New. + Use it instead of #ifdef YYLSP_NEEDED. + 2002-06-19 Akim Demaille Prepare @$ in %destructor, but currently don't bind it in the diff --git a/data/bison.simple b/data/bison.simple index 6059e160..6dec9998 100644 --- a/data/bison.simple +++ b/data/bison.simple @@ -33,6 +33,20 @@ m4_define([b4_rhs_value], [yyvsp@<:@m4_eval([$2 - $1])@:>@m4_ifval([$3], [.$3])]) + +## ----------- ## +## Locations. ## +## ----------- ## + +# b4_location_if(IF-TRUE, IF-FALSE) +# --------------------------------- +# Expand IF-TRUE, if locations are used, IF-FALSE otherwise. +m4_define([b4_location_if], +[m4_if(b4_locations_flag, [1], + [$1], + [$2])]) + + # b4_lhs_location() # ----------------- # Expansion of @$. @@ -48,6 +62,11 @@ m4_define([b4_rhs_location], [yylsp@<:@m4_eval([$2 - $1])@:>@]) + +## ------------------- ## +## Output file names. ## +## ------------------- ## + m4_define_default([b4_input_suffix], [.y]) m4_define_default([b4_output_parser_suffix], @@ -171,10 +190,7 @@ m4_if(b4_prefix[], [yy], [], #define yychar b4_prefix[]char #define yydebug b4_prefix[]debug #define yynerrs b4_prefix[]nerrs -#if YYLSP_NEEDED -# define yylloc b4_prefix[]lloc -#endif -]) +b4_location_if([#define yylloc b4_prefix[]lloc])]) /* Copy the first part of user declarations. */ b4_pre_prologue @@ -264,9 +280,8 @@ union yyalloc { short yyss; YYSTYPE yyvs; -# if YYLSP_NEEDED - YYLTYPE yyls; -# endif + b4_location_if([ YYLTYPE yyls; +])dnl }; /* The size of the maximum gap between one aligned stack and the next. */ @@ -274,15 +289,13 @@ union yyalloc /* The size of an array large to enough to hold all stacks, each with N elements. */ -# if YYLSP_NEEDED -# define YYSTACK_BYTES(N) \ +b4_location_if( +[# define YYSTACK_BYTES(N) \ ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ - + 2 * YYSTACK_GAP_MAX) -# else -# define YYSTACK_BYTES(N) \ + + 2 * YYSTACK_GAP_MAX)], +[# define YYSTACK_BYTES(N) \ ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAX) -# endif + + YYSTACK_GAP_MAX)]) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ @@ -510,21 +523,13 @@ while (0) /* YYLEX -- calling `yylex' with the right arguments. */ #if YYPURE -# if YYLSP_NEEDED -# ifdef YYLEX_PARAM -# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM) -# else -# define YYLEX yylex (&yylval, &yylloc) -# endif -# else /* !YYLSP_NEEDED */ -# ifdef YYLEX_PARAM -# define YYLEX yylex (&yylval, YYLEX_PARAM) -# else -# define YYLEX yylex (&yylval) -# endif -# endif /* !YYLSP_NEEDED */ +# ifdef YYLEX_PARAM +# define YYLEX yylex (&yylval, b4_location_if([&yylloc, ])YYLEX_PARAM) +# else +# define YYLEX yylex (&yylval, b4_location_if([&yylloc, ])) +# endif #else /* !YYPURE */ -# define YYLEX yylex () +# define YYLEX yylex () #endif /* !YYPURE */ /* Enable debugging if requested. */ @@ -656,7 +661,7 @@ static void yydestructor (int symbol_type, YYSTYPE symbol_value); /* YY_DECL_VARIABLES -- depending whether we use a pure parser, variables are global, or local to YYPARSE. */ -#define YY_DECL_NON_LSP_VARIABLES \ +#define YY_DECL_VARIABLES \ /* The lookahead symbol. */ \ int yychar; \ \ @@ -664,18 +669,10 @@ int yychar; \ YYSTYPE yylval; \ \ /* Number of parse errors so far. */ \ -int yynerrs; - -#if YYLSP_NEEDED -# define YY_DECL_VARIABLES \ -YY_DECL_NON_LSP_VARIABLES \ - \ -/* Location data for the lookahead symbol. */ \ -YYLTYPE yylloc; -#else -# define YY_DECL_VARIABLES \ -YY_DECL_NON_LSP_VARIABLES -#endif +int yynerrs;b4_location_if([ \ +/* Location data for the lookahead symbol. */ \ +YYLTYPE yylloc;]) + /* If nonreentrant, generate the variables here. */ @@ -718,27 +715,20 @@ yyparse (YYPARSE_PARAM_ARG) YYSTYPE *yyvs = yyvsa; register YYSTYPE *yyvsp; -#if YYLSP_NEEDED - /* The location stack. */ +]b4_location_if( +[[ /* The location stack. */ YYLTYPE yylsa[YYINITDEPTH]; YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp; -#endif + YYLTYPE *yylsp;]])[ -#if YYLSP_NEEDED -# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) -#else -# define YYPOPSTACK (yyvsp--, yyssp--) -#endif +#define YYPOPSTACK (yyvsp--, yyssp--]b4_location_if([, yylsp--])[) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; -#if YYLSP_NEEDED - YYLTYPE yyloc; -#endif +]b4_location_if([ YYLTYPE yyloc;])[ /* When reducing, the number of symbols on the RHS of the reduced rule. */ @@ -758,9 +748,7 @@ yyparse (YYPARSE_PARAM_ARG) yyssp = yyss; yyvsp = yyvs; -#if YYLSP_NEEDED - yylsp = yyls; -#endif +]b4_location_if([ yylsp = yyls;])[ goto yysetstate; /*------------------------------------------------------------. @@ -787,25 +775,18 @@ yyparse (YYPARSE_PARAM_ARG) memory. */ YYSTYPE *yyvs1 = yyvs; short *yyss1 = yyss; +]b4_location_if([ YYLTYPE *yyls1 = yyls;])[ /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. */ -# if YYLSP_NEEDED - YYLTYPE *yyls1 = yyls; - /* This used to be a conditional around just the two extra args, - but that might be undefined if yyoverflow is a macro. */ - yyoverflow ("parser stack overflow", - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yyls1, yysize * sizeof (*yylsp), - &yystacksize); - yyls = yyls1; -# else + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ yyoverflow ("parser stack overflow", &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), +]b4_location_if([ &yyls1, yysize * sizeof (*yylsp),])[ &yystacksize); -# endif +]b4_location_if([ yyls = yyls1;])[ yyss = yyss1; yyvs = yyvs1; } @@ -828,9 +809,7 @@ yyparse (YYPARSE_PARAM_ARG) goto yyoverflowlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); -# if YYLSP_NEEDED - YYSTACK_RELOCATE (yyls); -# endif +]b4_location_if([ YYSTACK_RELOCATE (yyls);])[ # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); @@ -840,9 +819,7 @@ yyparse (YYPARSE_PARAM_ARG) yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; -#if YYLSP_NEEDED - yylsp = yyls + yysize - 1; -#endif +]b4_location_if([ yylsp = yyls + yysize - 1;])[ YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); @@ -946,9 +923,7 @@ yybackup: yychar = YYEMPTY; *++yyvsp = yylval; -#if YYLSP_NEEDED - *++yylsp = yylloc; -#endif +]b4_location_if([ *++yylsp = yylloc;])[ /* Count tokens shifted since error; after three, turn off error status. */ @@ -986,10 +961,9 @@ yyreduce: GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; -#if YYLSP_NEEDED - /* Default location. */ - YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); -#endif +]b4_location_if( +[ /* Default location. */ + YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);])[ #if YYDEBUG /* We have to keep this `#if YYDEBUG', since we use variables which @@ -1017,9 +991,7 @@ yyreduce: [ yyvsp -= yylen; yyssp -= yylen; -#if YYLSP_NEEDED - yylsp -= yylen; -#endif +]b4_location_if([ yylsp -= yylen;])[ #if YYDEBUG if (yydebug) @@ -1033,9 +1005,7 @@ yyreduce: #endif *++yyvsp = yyval; -#if YYLSP_NEEDED - *++yylsp = yyloc; -#endif +]b4_location_if([ *++yylsp = yyloc;])[ /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule @@ -1207,9 +1177,7 @@ yyerrlab1: yydestructor (yystos[yystate], *yyvsp); yyvsp--; yystate = *--yyssp; -#if YYLSP_NEEDED - yylsp--; -#endif +]b4_location_if([ yylsp--;])[ #if YYDEBUG if (yydebug) @@ -1229,9 +1197,7 @@ yyerrlab1: YYDPRINTF ((stderr, "Shifting error token, ")); *++yyvsp = yylval; -#if YYLSP_NEEDED - *++yylsp = yylloc; -#endif +]b4_location_if([ *++yylsp = yylloc;])[ yystate = yyn; goto yynewstate; @@ -1321,7 +1287,7 @@ typedef union b4_stype yystype; m4_if(b4_pure, [0], [extern YYSTYPE b4_prefix[]lval;]) -m4_if(b4_locations_flag, [0], [], +b4_location_if( [#ifndef YYLTYPE typedef struct yyltype { -- 2.47.2