-*** perly.c.byacc Tue Oct 5 15:44:31 1993
---- perly.c Tue Oct 5 16:23:53 1993
+*** perly.c.orig Sun Jul 7 23:27:45 1996
+--- perly.c Sun Jul 7 23:27:46 1996
***************
-*** 1396,1408 ****
+*** 12,82 ****
+ deprecate("\"do\" to call subroutines");
+ }
+
+- #line 29 "perly.y"
+- typedef union {
+- I32 ival;
+- char *pval;
+- OP *opval;
+- GV *gvval;
+- } YYSTYPE;
+- #line 23 "y.tab.c"
+- #define WORD 257
+- #define METHOD 258
+- #define FUNCMETH 259
+- #define THING 260
+- #define PMFUNC 261
+- #define PRIVATEREF 262
+- #define FUNC0SUB 263
+- #define UNIOPSUB 264
+- #define LSTOPSUB 265
+- #define LABEL 266
+- #define FORMAT 267
+- #define SUB 268
+- #define ANONSUB 269
+- #define PACKAGE 270
+- #define USE 271
+- #define WHILE 272
+- #define UNTIL 273
+- #define IF 274
+- #define UNLESS 275
+- #define ELSE 276
+- #define ELSIF 277
+- #define CONTINUE 278
+- #define FOR 279
+- #define LOOPEX 280
+- #define DOTDOT 281
+- #define FUNC0 282
+- #define FUNC1 283
+- #define FUNC 284
+- #define RELOP 285
+- #define EQOP 286
+- #define MULOP 287
+- #define ADDOP 288
+- #define DOLSHARP 289
+- #define DO 290
+- #define LOCAL 291
+- #define HASHBRACK 292
+- #define NOAMP 293
+- #define OROP 294
+- #define ANDOP 295
+- #define NOTOP 296
+- #define LSTOP 297
+- #define ASSIGNOP 298
+- #define OROR 299
+- #define ANDAND 300
+- #define BITOROP 301
+- #define BITANDOP 302
+- #define UNIOP 303
+- #define SHIFTOP 304
+- #define MATCHOP 305
+- #define UMINUS 306
+- #define REFGEN 307
+- #define POWOP 308
+- #define PREINC 309
+- #define PREDEC 310
+- #define POSTINC 311
+- #define POSTDEC 312
+- #define ARROW 313
+ #define YYERRCODE 256
+ short yylhs[] = { -1,
+ 31, 0, 5, 3, 6, 6, 6, 7, 7, 7,
+--- 12,17 ----
+***************
+*** 1375,1387 ****
int yynerrs;
int yyerrflag;
int yychar;
- short yyss[YYSTACKSIZE];
- YYSTYPE yyvs[YYSTACKSIZE];
- #define yystacksize YYSTACKSIZE
- #line 573 "perly.y"
+ #line 571 "perly.y"
/* PROGRAM */
- #line 1409 "y.tab.c"
---- 1396,1403 ----
+ #line 1388 "y.tab.c"
+--- 1310,1317 ----
***************
-*** 1413,1418 ****
---- 1408,1426 ----
+*** 1388,1401 ****
+--- 1318,1376 ----
+ #define YYABORT goto yyabort
+ #define YYACCEPT goto yyaccept
+ #define YYERROR goto yyerrlab
++
++ struct ysv {
++ short* yyss;
++ YYSTYPE* yyvs;
++ int oldyydebug;
++ int oldyynerrs;
++ int oldyyerrflag;
++ int oldyychar;
++ YYSTYPE oldyyval;
++ YYSTYPE oldyylval;
++ };
++
++ void
++ yydestruct(ptr)
++ void* ptr;
++ {
++ struct ysv* ysave = (struct ysv*)ptr;
++ if (ysave->yyss) Safefree(ysave->yyss);
++ if (ysave->yyvs) Safefree(ysave->yyvs);
++ yydebug = ysave->oldyydebug;
++ yynerrs = ysave->oldyynerrs;
++ yyerrflag = ysave->oldyyerrflag;
++ yychar = ysave->oldyychar;
++ yyval = ysave->oldyyval;
++ yylval = ysave->oldyylval;
++ Safefree(ysave);
++ }
++
+ int
yyparse()
{
register int yym, yyn, yystate;
+ short* yyss;
+ YYSTYPE* yyvs;
+ unsigned yystacksize = YYSTACKSIZE;
-+ int oldyydebug = yydebug;
-+ int oldyynerrs = yynerrs;
-+ int oldyyerrflag = yyerrflag;
-+ int oldyychar = yychar;
-+ YYSTYPE oldyyval = yyval;
-+ YYSTYPE oldyylval = yylval;
+ int retval = 0;
-+
#if YYDEBUG
register char *yys;
extern char *getenv();
++ #endif
+
++ struct ysv *ysave = (struct ysv*)safemalloc(sizeof(struct ysv));
++ SAVEDESTRUCTOR(yydestruct, ysave);
++ ysave->oldyydebug = yydebug;
++ ysave->oldyynerrs = yynerrs;
++ ysave->oldyyerrflag = yyerrflag;
++ ysave->oldyychar = yychar;
++ ysave->oldyyval = yyval;
++ ysave->oldyylval = yylval;
++
++ #if YYDEBUG
+ if (yys = getenv("YYDEBUG"))
+ {
+ yyn = *yys;
***************
-*** 1429,1434 ****
---- 1437,1450 ----
+*** 1408,1413 ****
+--- 1383,1396 ----
yyerrflag = 0;
yychar = (-1);
+ /*
+ ** Initialize private stacks (yyparse may be called from an action)
+ */
-+ yyss = (short*)malloc(yystacksize*sizeof(short));
-+ yyvs = (YYSTYPE*)malloc(yystacksize*sizeof(YYSTYPE));
++ ysave->yyss = yyss = (short*)safemalloc(yystacksize*sizeof(short));
++ ysave->yyvs = yyvs = (YYSTYPE*)safemalloc(yystacksize*sizeof(YYSTYPE));
+ if (!yyvs || !yyss)
+ goto yyoverflow;
+
yyvsp = yyvs;
*yyssp = yystate = 0;
***************
-*** 1459,1465 ****
+*** 1423,1429 ****
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+! printf("yydebug: state %d, reading %d (%s)\n", yystate,
+ yychar, yys);
+ }
+ #endif
+--- 1406,1412 ----
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+! fprintf(stderr, "yydebug: state %d, reading %d (%s)\n", yystate,
+ yychar, yys);
+ }
+ #endif
+***************
+*** 1433,1444 ****
+ {
+ #if YYDEBUG
+ if (yydebug)
+! printf("yydebug: state %d, shifting to state %d\n",
+ yystate, yytable[yyn]);
#endif
if (yyssp >= yyss + yystacksize - 1)
{
}
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
---- 1475,1493 ----
+--- 1416,1441 ----
+ {
+ #if YYDEBUG
+ if (yydebug)
+! fprintf(stderr, "yydebug: state %d, shifting to state %d\n",
+ yystate, yytable[yyn]);
#endif
if (yyssp >= yyss + yystacksize - 1)
{
! int yyps_index = (yyssp - yyss);
! int yypv_index = (yyvsp - yyvs);
! yystacksize += YYSTACKSIZE;
-! yyvs = (YYSTYPE*)realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE));
-! yyss = (short*)realloc((char*)yyss,yystacksize * sizeof(short));
+! ysave->yyvs = yyvs =
+! (YYSTYPE*)realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE));
+! ysave->yyss = yyss =
+! (short*)realloc((char*)yyss,yystacksize * sizeof(short));
! if (!yyvs || !yyss)
! goto yyoverflow;
! yyssp = yyss + yyps_index;
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
***************
-*** 1500,1506 ****
+*** 1474,1485 ****
+ {
+ #if YYDEBUG
+ if (yydebug)
+! printf("yydebug: state %d, error recovery shifting\
+! to state %d\n", *yyssp, yytable[yyn]);
#endif
if (yyssp >= yyss + yystacksize - 1)
{
}
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
---- 1528,1548 ----
+--- 1471,1497 ----
+ {
+ #if YYDEBUG
+ if (yydebug)
+! fprintf(stderr,
+! "yydebug: state %d, error recovery shifting to state %d\n",
+! *yyssp, yytable[yyn]);
#endif
if (yyssp >= yyss + yystacksize - 1)
{
! int yyps_index = (yyssp - yyss);
! int yypv_index = (yyvsp - yyvs);
! yystacksize += YYSTACKSIZE;
-! yyvs = (YYSTYPE*)realloc((char*)yyvs,
+! ysave->yyvs = yyvs = (YYSTYPE*)realloc((char*)yyvs,
! yystacksize * sizeof(YYSTYPE));
-! yyss = (short*)realloc((char*)yyss,
+! ysave->yyss = yyss = (short*)realloc((char*)yyss,
! yystacksize * sizeof(short));
! if (!yyvs || !yyss)
! goto yyoverflow;
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
***************
-*** 2281,2295 ****
+*** 1489,1496 ****
+ {
+ #if YYDEBUG
+ if (yydebug)
+! printf("yydebug: error recovery discarding state %d\n",
+! *yyssp);
+ #endif
+ if (yyssp <= yyss) goto yyabort;
+ --yyssp;
+--- 1501,1509 ----
+ {
+ #if YYDEBUG
+ if (yydebug)
+! fprintf(stderr,
+! "yydebug: error recovery discarding state %d\n",
+! *yyssp);
+ #endif
+ if (yyssp <= yyss) goto yyabort;
+ --yyssp;
+***************
+*** 1507,1514 ****
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+! printf("yydebug: state %d, error recovery discards token %d (%s)\n",
+! yystate, yychar, yys);
+ }
+ #endif
+ yychar = (-1);
+--- 1520,1528 ----
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+! fprintf(stderr,
+! "yydebug: state %d, error recovery discards token %d (%s)\n",
+! yystate, yychar, yys);
+ }
+ #endif
+ yychar = (-1);
+***************
+*** 1517,1523 ****
+ yyreduce:
+ #if YYDEBUG
+ if (yydebug)
+! printf("yydebug: state %d, reducing by rule %d (%s)\n",
+ yystate, yyn, yyrule[yyn]);
+ #endif
+ yym = yylen[yyn];
+--- 1531,1537 ----
+ yyreduce:
+ #if YYDEBUG
+ if (yydebug)
+! fprintf(stderr, "yydebug: state %d, reducing by rule %d (%s)\n",
+ yystate, yyn, yyrule[yyn]);
+ #endif
+ yym = yylen[yyn];
+***************
+*** 2236,2243 ****
+ {
+ #if YYDEBUG
+ if (yydebug)
+! printf("yydebug: after reduction, shifting from state 0 to\
+! state %d\n", YYFINAL);
+ #endif
+ yystate = YYFINAL;
+ *++yyssp = YYFINAL;
+--- 2250,2258 ----
+ {
+ #if YYDEBUG
+ if (yydebug)
+! fprintf(stderr,
+! "yydebug: after reduction, shifting from state 0 to state %d\n",
+! YYFINAL);
+ #endif
+ yystate = YYFINAL;
+ *++yyssp = YYFINAL;
+***************
+*** 2251,2257 ****
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+! printf("yydebug: state %d, reading %d (%s)\n",
+ YYFINAL, yychar, yys);
+ }
+ #endif
+--- 2266,2272 ----
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+! fprintf(stderr, "yydebug: state %d, reading %d (%s)\n",
+ YYFINAL, yychar, yys);
+ }
+ #endif
+***************
+*** 2266,2285 ****
+ yystate = yydgoto[yym];
+ #if YYDEBUG
+ if (yydebug)
+! printf("yydebug: after reduction, shifting from state %d \
+! to state %d\n", *yyssp, yystate);
#endif
if (yyssp >= yyss + yystacksize - 1)
{
yyaccept:
! return (0);
}
---- 2323,2357 ----
+--- 2281,2315 ----
+ yystate = yydgoto[yym];
+ #if YYDEBUG
+ if (yydebug)
+! fprintf(stderr,
+! "yydebug: after reduction, shifting from state %d to state %d\n",
+! *yyssp, yystate);
#endif
if (yyssp >= yyss + yystacksize - 1)
{
! int yyps_index = (yyssp - yyss);
! int yypv_index = (yyvsp - yyvs);
! yystacksize += YYSTACKSIZE;
-! yyvs = (YYSTYPE*)realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE));
-! yyss = (short*)realloc((char*)yyss,yystacksize * sizeof(short));
+! ysave->yyvs = yyvs =
+! (YYSTYPE*)realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE));
+! ysave->yyss = yyss =
+! (short*)realloc((char*)yyss,yystacksize * sizeof(short));
! if (!yyvs || !yyss)
! goto yyoverflow;
! yyssp = yyss + yyps_index;
yyabort:
! retval = 1;
yyaccept:
-! if (yyss) free(yyss);
-! if (yyvs) free(yyvs);
-! yydebug = oldyydebug;
-! yynerrs = oldyynerrs;
-! yyerrflag = oldyyerrflag;
-! yychar = oldyychar;
-! yyval = oldyyval;
-! yylval = oldyylval;
! return retval;
}