On Fri, Dec 08, 2006 at 04:35:19PM -0500, Joel E. Denny wrote:
> On Fri, 8 Dec 2006, Bob Rossi wrote:
>
> > Yup. I've got a patch coming. Is it ok to do this?
> > struct yypstate *yypstate = ...;
> > and use yypstate as the type and variable name? If not, any suggestions?
>
> If we do this:
>
> typedef struct yypstate yypstate;
>
> which seems to be the norm (for example, YYSTYPE and YYLTYPE), then that
> might get us in trouble.
>
> In non-Bison code, I try to name types in UpperCamelCase. The above
> situation is one of the reasons why. glr.c is good about this internally.
> However, it doesn't seem to be the precedent anywhere else in Bison, so I
> guess we need something like this:
>
> yypstate *yyps;
OK, here you go.
2006-12-08 Bob Rossi <[EMAIL PROTECTED]>
* data/push.c: (yypvarsinit, yypvars, struct yypvars): Rename to...
(yypstateinit, yypstate, struct yypstate): ... these and update
all uses.
(b4_yyssa, b4_yyerror_range, yypstate_init, yypushparse): Rename pv to
yyps.
(yypstateinit, yypushparse): Rename to ...
(yypstate_init, yypush_parse): ... these and update all uses.
(yypstate_init, yypush_parse): Declare in Bison-generated header file.
* tests/calc.at (_AT_DATA_CALC_Y): Use newly named functions.
Thanks,
Bob Rossi
Index: data/push.c
===================================================================
RCS file: /sources/bison/bison/data/push.c,v
retrieving revision 1.10
diff -u -r1.10 push.c
--- data/push.c 8 Dec 2006 01:04:39 -0000 1.10
+++ data/push.c 8 Dec 2006 22:10:38 -0000
@@ -152,9 +152,9 @@
m4_if(b4_prefix, [yy], [],
[/* Substitute the variable and function names. */
#define yyparse b4_prefix[]parse
-]b4_push_if([#define yypushparse b4_prefix[]pushparse
-#define yypvarsinit b4_prefix[]pvarsinit
-#define yypvars b4_prefix[]pvars])[
+]b4_push_if([#define yypush_parse b4_prefix[]push_parse
+#define yypstate_init b4_prefix[]pstate_init
+#define yypstate b4_prefix[]pstate])[
#define yylex b4_prefix[]lex
#define yyerror b4_prefix[]error
#define yylval b4_prefix[]lval
@@ -968,11 +968,11 @@
#endif /* ! YYPARSE_PARAM */
]b4_push_if([
-struct yypvars;
+struct yypstate;
enum { YYPUSH_MORE = 4 };
-]b4_c_function_decl([yypvarsinit], [struct yypvars *], [[void], []])[
-]b4_c_function_decl([yypushparse], [int],
- [[struct yypvars *yypvars], [yypvars]],
+]b4_c_function_decl([yypstate_init], [struct yypstate *], [[void], []])[
+]b4_c_function_decl([yypush_parse], [int],
+ [[struct yypstate *yyps], [yyps]],
[[int yynchar], [yynchar]],
[[YYSTYPE *yynlval], [yynlval]]
b4_locations_if([,[[YYLTYPE *yynlloc], [yynlloc]]]))[
@@ -997,14 +997,14 @@
YYLTYPE yylloc;])
])
-m4_define([b4_yyssa],b4_push_if([pv->yyssa],[yyssa]))
-m4_define([b4_yyerror_range],b4_push_if([pv->yyerror_range],[yyerror_range]))
+m4_define([b4_yyssa],b4_push_if([yyps->yyssa],[yyssa]))
+m4_define([b4_yyerror_range],b4_push_if([yyps->yyerror_range],[yyerror_range]))
# b4_declare_yyparse_variables
# ----------------------------
# Declare all the variables that are needed local to YYPARSE
m4_define([b4_declare_yyparse_variables],
-[[struct yypvars
+[[struct yypstate
{
int yystate;
int yyn;
@@ -1047,30 +1047,30 @@
};
/* Initialize the parser data structure. */
-struct yypvars*
-yypvarsinit (void)
+struct yypstate*
+yypstate_init (void)
{
- struct yypvars *pv = (struct yypvars *) malloc (sizeof *pv);
- pv->yystate = 0;
- pv->yyresult = -1;
- pv->yyerrstatus = 0;
- pv->yytoken = 0;
+ struct yypstate *yyps = (struct yypstate *) malloc (sizeof *yyps);
+ yyps->yystate = 0;
+ yyps->yyresult = -1;
+ yyps->yyerrstatus = 0;
+ yyps->yytoken = 0;
- pv->yyss = pv->yyssa;
- pv->yyvs = pv->yyvsa;
+ yyps->yyss = yyps->yyssa;
+ yyps->yyvs = yyps->yyvsa;
]b4_locations_if([
- pv->yyls = pv->yylsa;])[
- pv->yystacksize = YYINITDEPTH;
+ yyps->yyls = yyps->yylsa;])[
+ yyps->yystacksize = YYINITDEPTH;
- pv->yyssp = pv->yyss;
- pv->yyvsp = pv->yyvs;
+ yyps->yyssp = yyps->yyss;
+ yyps->yyvsp = yyps->yyvs;
- pv->yynew = 1;
+ yyps->yynew = 1;
-]b4_locations_if([ pv->yylsp = pv->yyls;])[
+]b4_locations_if([ yyps->yylsp = yyps->yyls;])[
- return pv;
+ return yyps;
}])
m4_divert_pop([KILL])dnl# ====================== End of M4 code.
@@ -1080,11 +1080,11 @@
b4_push_if([b4_declare_yyparse_variables])
/*-------------------------.
-| yyparse or yypushparse. |
+| yyparse or yypush_parse. |
`-------------------------*/
b4_push_if([
-b4_c_function_def([yypushparse], [int], [[struct yypvars *yypvars],
[yypvars]],
+b4_c_function_def([yypush_parse], [int], [[struct yypstate *yyps], [yyps]],
[[int yynchar], [yynchar]], [[YYSTYPE *yynlval], [yynlval]]
b4_locations_if([,[[YYLTYPE *yynlloc], [yynlloc]]]))],[
#ifdef YYPARSE_PARAM
@@ -1095,7 +1095,6 @@
{[
]b4_pure_if([b4_declare_parser_variables])[
]b4_push_if([b4_declare_parser_variables])[
- ]b4_push_if([struct yypvars *pv;])[
int yystate;
int yyn;
int yyresult;
@@ -1155,7 +1154,6 @@
yystate = 0;
yyerrstatus = 0;
]b4_push_if([ yychar = yynchar;
- pv = yypvars;
if (yynlval)
yylval = *yynlval;
]b4_locations_if([ if (yynlloc)
@@ -1190,30 +1188,30 @@
]])dnl
[ ]b4_push_if([
/* Initialize the locals to the current context. */
- yystate = pv->yystate;
- yyn = pv->yyn;
- yyresult = pv->yyresult;
- yyerrstatus = pv->yyerrstatus;
- yytoken = pv->yytoken;
+ yystate = yyps->yystate;
+ yyn = yyps->yyn;
+ yyresult = yyps->yyresult;
+ yyerrstatus = yyps->yyerrstatus;
+ yytoken = yyps->yytoken;
- yyss = pv->yyss;
- yyssp = pv->yyssp;
+ yyss = yyps->yyss;
+ yyssp = yyps->yyssp;
- yyvs = pv->yyvs;
- yyvsp = pv->yyvsp;
+ yyvs = yyps->yyvs;
+ yyvsp = yyps->yyvsp;
]b4_locations_if([[ /* The location stack. */
- yyls = pv->yyls;
- yylsp = pv->yylsp;]])[
+ yyls = yyps->yyls;
+ yylsp = yyps->yylsp;]])[
- yystacksize = pv->yystacksize;
- yyval = pv->yyval;
- ]b4_locations_if([yyloc = pv->yyloc;])[
- if (pv->yynew == 0)
+ yystacksize = yyps->yystacksize;
+ yyval = yyps->yyval;
+ ]b4_locations_if([yyloc = yyps->yyloc;])[
+ if (yyps->yynew == 0)
{
goto gottoken;
}
- pv->yynew= 0;])[
+ yyps->yynew= 0;])[
goto yysetstate;
/*------------------------------------------------------------.
@@ -1321,24 +1319,24 @@
YYDPRINTF ((stderr, "Return for a new token:\n"));
yyresult = YYPUSH_MORE;
/* Initialize the locals to the current context. */
- pv->yystate = yystate;
- pv->yyn = yyn;
- pv->yyerrstatus = yyerrstatus;
- pv->yytoken = yytoken;
+ yyps->yystate = yystate;
+ yyps->yyn = yyn;
+ yyps->yyerrstatus = yyerrstatus;
+ yyps->yytoken = yytoken;
- pv->yyss = yyss;
- pv->yyssp = yyssp;
+ yyps->yyss = yyss;
+ yyps->yyssp = yyssp;
- pv->yyvs = yyvs;
- pv->yyvsp = yyvsp;
+ yyps->yyvs = yyvs;
+ yyps->yyvsp = yyvsp;
]b4_locations_if([[ /* The location stack. */
- pv->yyls = yyls;
- pv->yylsp = yylsp;]])[
+ yyps->yyls = yyls;
+ yyps->yylsp = yylsp;]])[
- pv->yystacksize = yystacksize;
- pv->yyval = yyval;
- ]b4_locations_if([pv->yyloc = yyloc;])[
+ yyps->yystacksize = yystacksize;
+ yyps->yyval = yyval;
+ ]b4_locations_if([yyps->yyloc = yyloc;])[
goto yypushreturn;
gottoken:])[
YYDPRINTF ((stderr, "Reading a token: "));
@@ -1633,7 +1631,7 @@
if (yymsg != yymsgbuf)
YYSTACK_FREE (yymsg);
#endif
- ]b4_push_if([pv->yyresult = YYID (yyresult);])[
+ ]b4_push_if([yyps->yyresult = YYID (yyresult);])[
/* Make sure YYID is used. */
return YYID (yyresult);
]}
@@ -1680,7 +1678,13 @@
# define YYLTYPE_IS_TRIVIAL 1
#endif
-]b4_push_if([struct ]b4_prefix[pvars;
+]b4_push_if([struct ]b4_prefix[pstate;
+]b4_c_function_decl([]b4_prefix[pstate_init], [struct ]b4_prefix[pstate *],
[[void], []])[
+]b4_c_function_decl([]b4_prefix[push_parse], [int],
+ [[struct ]b4_prefix[pstate *]b4_prefix[pstate], []b4_prefix[pstate]],
+ [[int yynchar], [yynchar]],
+ [[YYSTYPE *yynlval], [yynlval]]
+ b4_locations_if([,[[YYLTYPE *yynlloc], [yynlloc]]]))[
enum { YYPUSH_MORE = 4 };])[
]b4_pure_if([],
[extern YYLTYPE b4_prefix[]lloc;])
Index: tests/calc.at
===================================================================
RCS file: /sources/bison/bison/tests/calc.at,v
retrieving revision 1.95
diff -u -r1.95 calc.at
--- tests/calc.at 7 Dec 2006 02:21:13 -0000 1.95
+++ tests/calc.at 8 Dec 2006 22:10:38 -0000
@@ -338,13 +338,13 @@
[ yydebug = 1;])])[
]AT_PUSH_IF([
{
- struct yypvars *ctx = yypvarsinit ();
+ struct yypstate *pstate = yypstate_init ();
YYSTYPE my_lval;
]AT_LOCATION_IF([YYLTYPE my_lloc;])[
do {
- status = yypushparse (ctx, yylex (&my_lval]AT_LOCATION_IF([[,
&my_lloc]])[), &my_lval]AT_LOCATION_IF([[, &my_lloc]])[);
+ status = yypush_parse (pstate, yylex (&my_lval]AT_LOCATION_IF([[,
&my_lloc]])[), &my_lval]AT_LOCATION_IF([[, &my_lloc]])[);
} while (status == YYPUSH_MORE);
- free (ctx);
+ free (pstate);
}],[
status = yyparse (]AT_PARAM_IF([[&result, &count]])[);])[
fclose (input);