*** perly.c.orig Mon Feb 14 14:24:43 1994 --- perly.c Mon Feb 14 14:24:44 1994 *************** *** 1591,1603 **** int yynerrs; int yyerrflag; int yychar; - short *yyssp; - YYSTYPE *yyvsp; YYSTYPE yyval; YYSTYPE yylval; - short yyss[YYSTACKSIZE]; - YYSTYPE yyvs[YYSTACKSIZE]; - #define yystacksize YYSTACKSIZE #line 611 "perly.y" /* PROGRAM */ #line 1604 "y.tab.c" --- 1591,1598 ---- *************** *** 1608,1613 **** --- 1603,1621 ---- yyparse() { register int yym, yyn, yystate; + register short *yyssp; + register YYSTYPE *yyvsp; + 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(); *************** *** 1624,1629 **** --- 1632,1645 ---- 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)); + if (!yyvs || !yyss) + goto yyoverflow; + yyssp = yyss; yyvsp = yyvs; *yyssp = yystate = 0; *************** *** 1639,1645 **** 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 --- 1655,1661 ---- 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 *************** *** 1649,1660 **** { #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; --- 1665,1688 ---- { #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; ! yyvs = (YYSTYPE*)realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); ! 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; *************** *** 1690,1701 **** { #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; --- 1718,1744 ---- { #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; ! yyvs = (YYSTYPE*)realloc((char*)yyvs, ! yystacksize * sizeof(YYSTYPE)); ! 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; *************** *** 1705,1712 **** { #if YYDEBUG if (yydebug) ! printf("yydebug: error recovery discarding state %d\n", ! *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; --- 1748,1756 ---- { #if YYDEBUG if (yydebug) ! fprintf(stderr, ! "yydebug: error recovery discarding state %d\n", ! *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; *************** *** 1723,1730 **** 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); --- 1767,1775 ---- 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); *************** *** 1733,1739 **** yyreduce: #if YYDEBUG if (yydebug) ! printf("yydebug: state %d, reducing by rule %d (%s)\n", yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; --- 1778,1784 ---- yyreduce: #if YYDEBUG if (yydebug) ! fprintf(stderr, "yydebug: state %d, reducing by rule %d (%s)\n", yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; *************** *** 2490,2497 **** { #if YYDEBUG if (yydebug) ! printf("yydebug: after reduction, shifting from state 0 to\ ! state %d\n", YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; --- 2535,2543 ---- { #if YYDEBUG if (yydebug) ! fprintf(stderr, ! "yydebug: after reduction, shifting from state 0 to state %d\n", ! YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; *************** *** 2505,2511 **** 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 --- 2551,2557 ---- 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 *************** *** 2520,2539 **** 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); } --- 2566,2606 ---- 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; ! yyvs = (YYSTYPE*)realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); ! 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: ! if (yyss) free(yyss); ! if (yyvs) free(yyvs); ! yydebug = oldyydebug; ! yynerrs = oldyynerrs; ! yyerrflag = oldyyerrflag; ! yychar = oldyychar; ! yyval = oldyyval; ! yylval = oldyylval; ! return retval; }