-*** perly.c.orig Fri Jan 14 03:56:26 1994
---- perly.c Sun Jan 16 18:29:19 1994
+Index: perly.c
***************
-*** 1635,1647 ****
- int yynerrs;
+*** 13,82 ****
+ }
+
+! #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 UNIOP 285
+! #define LSTOP 286
+! #define RELOP 287
+! #define EQOP 288
+! #define MULOP 289
+! #define ADDOP 290
+! #define DOLSHARP 291
+! #define DO 292
+! #define HASHBRACK 293
+! #define NOAMP 294
+! #define LOCAL 295
+! #define MY 296
+! #define OROP 297
+! #define ANDOP 298
+! #define NOTOP 299
+! #define ASSIGNOP 300
+! #define OROR 301
+! #define ANDAND 302
+! #define BITOROP 303
+! #define BITANDOP 304
+! #define SHIFTOP 305
+! #define MATCHOP 306
+! #define UMINUS 307
+! #define REFGEN 308
+! #define POWOP 309
+! #define PREINC 310
+! #define PREDEC 311
+! #define POSTINC 312
+! #define POSTDEC 313
+! #define ARROW 314
+ #define YYERRCODE 256
+ short yylhs[] = { -1,
+--- 13,17 ----
+ }
+
+! #line 16 "perly.c"
+ #define YYERRCODE 256
+ short yylhs[] = { -1,
+***************
+*** 1303,1313 ****
int yyerrflag;
int yychar;
- short *yyssp;
- short yyss[YYSTACKSIZE];
- YYSTYPE yyvs[YYSTACKSIZE];
- #define yystacksize YYSTACKSIZE
- #line 605 "perly.y"
+ #line 624 "perly.y"
/* PROGRAM */
- #line 1648 "y.tab.c"
---- 1635,1642 ----
+--- 1238,1243 ----
***************
-*** 1652,1657 ****
---- 1647,1665 ----
+*** 1316,1327 ****
+--- 1246,1302 ----
+ #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"))
+ {
***************
-*** 1668,1673 ****
---- 1676,1689 ----
- yyerrflag = 0;
+*** 1336,1339 ****
+--- 1311,1322 ----
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;
+
yyssp = yyss;
yyvsp = yyvs;
- *yyssp = yystate = 0;
***************
-*** 1683,1689 ****
- yys = 0;
+*** 1351,1355 ****
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
! printf("yydebug: state %d, reading %d (%s)\n", yystate,
yychar, yys);
}
- #endif
---- 1699,1705 ----
- yys = 0;
+--- 1334,1338 ----
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
! fprintf(stderr, "yydebug: state %d, reading %d (%s)\n", yystate,
yychar, yys);
}
- #endif
***************
-*** 1693,1704 ****
- {
+*** 1361,1370 ****
#if YYDEBUG
if (yydebug)
! printf("yydebug: state %d, shifting to state %d\n",
! goto yyoverflow;
}
*++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
---- 1709,1732 ----
- {
+--- 1344,1367 ----
#if YYDEBUG
if (yydebug)
! fprintf(stderr, "yydebug: state %d, shifting to state %d\n",
! 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;
! yyvsp = yyvs + yypv_index;
}
*++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
***************
-*** 1734,1745 ****
- {
+*** 1402,1411 ****
#if YYDEBUG
if (yydebug)
! printf("yydebug: state %d, error recovery shifting\
! goto yyoverflow;
}
*++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
---- 1762,1788 ----
- {
+--- 1399,1423 ----
#if YYDEBUG
if (yydebug)
! fprintf(stderr,
! 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;
! yyvsp = yyvs + yypv_index;
}
*++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
***************
-*** 1749,1756 ****
- {
+*** 1417,1422 ****
#if YYDEBUG
if (yydebug)
! printf("yydebug: error recovery discarding state %d\n",
! *yyssp);
#endif
if (yyssp <= yyss) goto yyabort;
- --yyssp;
---- 1792,1800 ----
- {
+--- 1429,1435 ----
#if YYDEBUG
if (yydebug)
! fprintf(stderr,
! *yyssp);
#endif
if (yyssp <= yyss) goto yyabort;
- --yyssp;
***************
-*** 1767,1774 ****
- yys = 0;
+*** 1435,1440 ****
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);
---- 1811,1819 ----
- yys = 0;
+--- 1448,1454 ----
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
! fprintf(stderr,
! yystate, yychar, yys);
}
#endif
- yychar = (-1);
***************
-*** 1777,1783 ****
- yyreduce:
+*** 1445,1449 ****
#if YYDEBUG
if (yydebug)
! printf("yydebug: state %d, reducing by rule %d (%s)\n",
yystate, yyn, yyrule[yyn]);
#endif
- yym = yylen[yyn];
---- 1822,1828 ----
- yyreduce:
+--- 1459,1463 ----
#if YYDEBUG
if (yydebug)
! fprintf(stderr, "yydebug: state %d, reducing by rule %d (%s)\n",
yystate, yyn, yyrule[yyn]);
#endif
- yym = yylen[yyn];
***************
-*** 2529,2536 ****
- {
+*** 2222,2227 ****
#if YYDEBUG
if (yydebug)
! printf("yydebug: after reduction, shifting from state 0 to\
! state %d\n", YYFINAL);
#endif
yystate = YYFINAL;
- *++yyssp = YYFINAL;
---- 2574,2582 ----
- {
+--- 2236,2242 ----
#if YYDEBUG
if (yydebug)
! fprintf(stderr,
! YYFINAL);
#endif
yystate = YYFINAL;
- *++yyssp = YYFINAL;
***************
-*** 2544,2550 ****
- yys = 0;
+*** 2237,2241 ****
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
! printf("yydebug: state %d, reading %d (%s)\n",
YYFINAL, yychar, yys);
}
- #endif
---- 2590,2596 ----
- yys = 0;
+--- 2252,2256 ----
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
! fprintf(stderr, "yydebug: state %d, reading %d (%s)\n",
YYFINAL, yychar, yys);
}
- #endif
***************
-*** 2559,2578 ****
- yystate = yydgoto[yym];
+*** 2252,2261 ****
#if YYDEBUG
if (yydebug)
! printf("yydebug: after reduction, shifting from state %d \
! goto yyoverflow;
}
*++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
- yyoverflow:
-! yyerror("yacc stack overflow");
- yyabort:
-! return (1);
- yyaccept:
-! return (0);
- }
---- 2605,2645 ----
- yystate = yydgoto[yym];
+--- 2267,2291 ----
#if YYDEBUG
if (yydebug)
! fprintf(stderr,
! 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;
! yyvsp = yyvs + yypv_index;
}
*++yyssp = yystate;
- *++yyvsp = yyval;
+***************
+*** 2263,2270 ****
+ goto yyloop;
+ yyoverflow:
+! yyerror("yacc stack overflow");
+ yyabort:
+! return (1);
+ yyaccept:
+! return (0);
+ }
+--- 2293,2300 ----
goto yyloop;
yyoverflow:
! yyerror("Out of memory for yacc stack");
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;
}