*** perly.c.orig Thu Feb 9 17:56:15 1995 --- perly.c Thu Feb 9 17:56:17 1995 *************** *** 12,79 **** 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 LABEL 263 - #define FORMAT 264 - #define SUB 265 - #define ANONSUB 266 - #define PACKAGE 267 - #define USE 268 - #define WHILE 269 - #define UNTIL 270 - #define IF 271 - #define UNLESS 272 - #define ELSE 273 - #define ELSIF 274 - #define CONTINUE 275 - #define FOR 276 - #define LOOPEX 277 - #define DOTDOT 278 - #define FUNC0 279 - #define FUNC1 280 - #define FUNC 281 - #define RELOP 282 - #define EQOP 283 - #define MULOP 284 - #define ADDOP 285 - #define DOLSHARP 286 - #define DO 287 - #define LOCAL 288 - #define HASHBRACK 289 - #define NOAMP 290 - #define OROP 291 - #define ANDOP 292 - #define NOTOP 293 - #define LSTOP 294 - #define ASSIGNOP 295 - #define OROR 296 - #define ANDAND 297 - #define BITOROP 298 - #define BITANDOP 299 - #define UNIOP 300 - #define SHIFTOP 301 - #define MATCHOP 302 - #define UMINUS 303 - #define REFGEN 304 - #define POWOP 305 - #define PREINC 306 - #define PREDEC 307 - #define POSTINC 308 - #define POSTDEC 309 - #define ARROW 310 #define YYERRCODE 256 short yylhs[] = { -1, 30, 0, 5, 3, 6, 6, 6, 7, 7, 7, --- 12,17 ---- *************** *** 1334,1346 **** int yynerrs; int yyerrflag; int yychar; - short *yyssp; - YYSTYPE *yyvsp; YYSTYPE yyval; YYSTYPE yylval; - short yyss[YYSTACKSIZE]; - YYSTYPE yyvs[YYSTACKSIZE]; - #define yystacksize YYSTACKSIZE #line 545 "perly.y" /* PROGRAM */ #line 1347 "y.tab.c" --- 1272,1279 ---- *************** *** 1347,1360 **** --- 1280,1338 ---- #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; + register short *yyssp; + register YYSTYPE *yyvsp; + short* yyss; + YYSTYPE* yyvs; + unsigned yystacksize = YYSTACKSIZE; + 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; *************** *** 1367,1372 **** --- 1345,1358 ---- yyerrflag = 0; yychar = (-1); + /* + ** Initialize private stacks (yyparse may be called from an action) + */ + 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; *************** *** 1382,1388 **** 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 --- 1368,1374 ---- 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 *************** *** 1392,1403 **** { #if YYDEBUG if (yydebug) ! printf("yydebug: state %d, shifting to state %d\n", yystate, yytable[yyn]); #endif if (yyssp >= yyss + yystacksize - 1) { ! goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; --- 1378,1403 ---- { #if YYDEBUG if (yydebug) ! fprintf(stderr, "yydebug: state %d, shifting to state %d\n", yystate, yytable[yyn]); #endif if (yyssp >= yyss + yystacksize - 1) { ! /* ! ** reallocate and recover. Note that pointers ! ** have to be reset, or bad things will happen ! */ ! int yyps_index = (yyssp - yyss); ! int yypv_index = (yyvsp - yyvs); ! yystacksize += YYSTACKSIZE; ! 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; *************** *** 1433,1444 **** { #if YYDEBUG if (yydebug) ! printf("yydebug: state %d, error recovery shifting\ ! to state %d\n", *yyssp, yytable[yyn]); #endif if (yyssp >= yyss + yystacksize - 1) { ! goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; --- 1433,1459 ---- { #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) { ! /* ! ** reallocate and recover. Note that pointers ! ** have to be reset, or bad things will happen ! */ ! int yyps_index = (yyssp - yyss); ! int yypv_index = (yyvsp - yyvs); ! yystacksize += YYSTACKSIZE; ! 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; *************** *** 1448,1455 **** { #if YYDEBUG if (yydebug) ! printf("yydebug: error recovery discarding state %d\n", ! *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; --- 1463,1471 ---- { #if YYDEBUG if (yydebug) ! fprintf(stderr, ! "yydebug: error recovery discarding state %d\n", ! *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; *************** *** 1466,1473 **** 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); --- 1482,1490 ---- 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); *************** *** 1476,1482 **** yyreduce: #if YYDEBUG if (yydebug) ! printf("yydebug: state %d, reducing by rule %d (%s)\n", yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; --- 1493,1499 ---- yyreduce: #if YYDEBUG if (yydebug) ! fprintf(stderr, "yydebug: state %d, reducing by rule %d (%s)\n", yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; *************** *** 2163,2170 **** { #if YYDEBUG if (yydebug) ! printf("yydebug: after reduction, shifting from state 0 to\ ! state %d\n", YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; --- 2180,2188 ---- { #if YYDEBUG if (yydebug) ! fprintf(stderr, ! "yydebug: after reduction, shifting from state 0 to state %d\n", ! YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; *************** *** 2178,2184 **** 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 --- 2196,2202 ---- 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 *************** *** 2193,2212 **** 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) { ! goto yyoverflow; } *++yyssp = yystate; *++yyvsp = yyval; goto yyloop; yyoverflow: ! yyerror("yacc stack overflow"); yyabort: ! return (1); yyaccept: ! return (0); } --- 2211,2245 ---- 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) { ! /* ! ** reallocate and recover. Note that pointers ! ** have to be reset, or bad things will happen ! */ ! int yyps_index = (yyssp - yyss); ! int yypv_index = (yyvsp - yyvs); ! yystacksize += YYSTACKSIZE; ! 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; goto yyloop; yyoverflow: ! yyerror("Out of memory for yacc stack"); yyabort: ! retval = 1; yyaccept: ! return retval; }