*** perly.c.orig Tue Mar 26 01:38:52 2002 --- perly.c Tue Mar 26 01:38:54 2002 *************** *** 1,5 **** #ifndef lint ! static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; #endif #define YYBYACC 1 #line 16 "perly.y" --- 1,5 ---- #ifndef lint ! /* static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; */ #endif #define YYBYACC 1 #line 16 "perly.y" *************** *** 9,15 **** #ifdef EBCDIC #undef YYDEBUG #endif ! #define dep() deprecate("\"do\" to call subroutines") /* stuff included here to make perly_c.diff apply better */ --- 9,15 ---- #ifdef EBCDIC #undef YYDEBUG #endif ! #define dep() deprecate_old("\"do\" to call subroutines") /* stuff included here to make perly_c.diff apply better */ *************** *** 50,119 **** #define yylex yylex_r #endif ! #line 54 "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 MYSUB 297 ! #define COLONATTR 298 ! #define PREC_LOW 299 ! #define OROP 300 ! #define ANDOP 301 ! #define NOTOP 302 ! #define ASSIGNOP 303 ! #define OROR 304 ! #define ANDAND 305 ! #define BITOROP 306 ! #define BITANDOP 307 ! #define SHIFTOP 308 ! #define MATCHOP 309 ! #define UMINUS 310 ! #define REFGEN 311 ! #define POWOP 312 ! #define PREINC 313 ! #define PREDEC 314 ! #define POSTINC 315 ! #define POSTDEC 316 ! #define ARROW 317 #define YYERRCODE 256 ! short yylhs[] = { -1, 0, 9, 7, 6, 10, 8, 11, 11, 11, 12, 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, 15, 15, 15, 14, 14, 43, 43, 13, 13, 13, --- 50,58 ---- #define yylex yylex_r #endif ! #line 54 "perly.c" #define YYERRCODE 256 ! static short yylhs[] = { -1, 0, 9, 7, 6, 10, 8, 11, 11, 11, 12, 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, 15, 15, 15, 14, 14, 43, 43, 13, 13, 13, *************** *** 135,141 **** 49, 34, 34, 35, 35, 35, 44, 24, 19, 20, 21, 22, 23, 36, 36, 36, 36, }; ! short yylen[] = { 2, 2, 4, 0, 0, 4, 0, 0, 2, 2, 2, 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, 0, 2, 6, 7, 7, 0, 2, 8, 8, 10, --- 74,80 ---- 49, 34, 34, 35, 35, 35, 44, 24, 19, 20, 21, 22, 23, 36, 36, 36, 36, }; ! static short yylen[] = { 2, 2, 4, 0, 0, 4, 0, 0, 2, 2, 2, 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, 0, 2, 6, 7, 7, 0, 2, 8, 8, 10, *************** *** 157,163 **** 1, 0, 1, 0, 1, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, }; ! short yydefred[] = { 4, 0, 7, 0, 45, 58, 56, 0, 56, 56, 8, 46, 9, 11, 48, 0, 47, 49, 50, 0, 0, 0, 70, 71, 0, 14, 3, 173, 0, 0, 154, --- 96,102 ---- 1, 0, 1, 0, 1, 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, }; ! static short yydefred[] = { 4, 0, 7, 0, 45, 58, 56, 0, 56, 56, 8, 46, 9, 11, 48, 0, 47, 49, 50, 0, 0, 0, 70, 71, 0, 14, 3, 173, 0, 0, 154, *************** *** 199,205 **** 0, 22, 0, 0, 0, 31, 5, 0, 30, 0, 0, 33, 0, 23, }; ! short yydgoto[] = { 1, 10, 11, 20, 104, 19, 2, 95, 370, 98, 359, 3, 12, 13, 70, 375, 285, 72, 73, 74, 75, 76, 77, 78, 79, 291, 81, 292, 281, 283, 286, --- 138,144 ---- 0, 22, 0, 0, 0, 31, 5, 0, 30, 0, 0, 33, 0, 23, }; ! static short yydgoto[] = { 1, 10, 11, 20, 104, 19, 2, 95, 370, 98, 359, 3, 12, 13, 70, 375, 285, 72, 73, 74, 75, 76, 77, 78, 79, 291, 81, 292, 281, 283, 286, *************** *** 207,213 **** 194, 327, 156, 289, 271, 225, 14, 83, 137, 84, 85, 86, 87, 15, 16, 17, 18, 93, 278, }; ! short yysindex[] = { 0, 0, 0, -132, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, -239, -215, 5, 0, 0, -215, 0, 0, 0, -31, -31, 0, --- 146,152 ---- 194, 327, 156, 289, 271, 225, 14, 83, 137, 84, 85, 86, 87, 15, 16, 17, 18, 93, 278, }; ! static short yysindex[] = { 0, 0, 0, -132, 0, 0, 0, -51, 0, 0, 0, 0, 0, 0, 0, 650, 0, 0, 0, -239, -215, 5, 0, 0, -215, 0, 0, 0, -31, -31, 0, *************** *** 249,255 **** 449, 0, 2181, -150, 340, 0, 0, 355, 0, 216, 216, 0, -123, 0, }; ! short yyrindex[] = { 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, --- 188,194 ---- 449, 0, 2181, -150, 340, 0, 0, 355, 0, 216, 216, 0, -123, 0, }; ! static short yyrindex[] = { 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, *************** *** 291,297 **** 917, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, }; ! short yygindex[] = { 0, 0, 0, 196, 425, 0, 0, -2, 0, 37, 634, -94, 0, 0, 0, -323, -15, 2445, 0, 999, 414, 417, 0, 0, 0, 463, -43, 0, 0, 321, -198, --- 230,236 ---- 917, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 179, 0, }; ! static short yygindex[] = { 0, 0, 0, 196, 425, 0, 0, -2, 0, 37, 634, -94, 0, 0, 0, -323, -15, 2445, 0, 999, 414, 417, 0, 0, 0, 463, -43, 0, 0, 321, -198, *************** *** 300,306 **** 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #define YYTABLESIZE 4568 ! short yytable[] = { 71, 197, 65, 121, 227, 65, 111, 220, 22, 198, 293, 139, 296, 315, 275, 305, 102, 273, 88, 113, 228, 60, 113, 279, 65, 317, 60, 182, 254, 325, 101, --- 239,245 ---- 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #define YYTABLESIZE 4568 ! static short yytable[] = { 71, 197, 65, 121, 227, 65, 111, 220, 22, 198, 293, 139, 296, 315, 275, 305, 102, 273, 88, 113, 228, 60, 113, 279, 65, 317, 60, 182, 254, 325, 101, *************** *** 759,765 **** 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, }; ! short yycheck[] = { 15, 95, 36, 46, 41, 36, 40, 59, 59, 100, 208, 54, 41, 59, 199, 41, 40, 196, 257, 41, 93, 123, 44, 202, 36, 93, 59, 40, 40, 59, 29, --- 698,704 ---- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, }; ! static short yycheck[] = { 15, 95, 36, 46, 41, 36, 40, 59, 59, 100, 208, 54, 41, 59, 199, 41, 40, 196, 257, 41, 93, 123, 44, 202, 36, 93, 59, 40, 40, 59, 29, *************** *** 1224,1230 **** #endif #define YYMAXTOKEN 317 #if YYDEBUG ! char *yyname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, "'!'",0,0,"'$'","'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'",0,0,0,0,0,0,0, 0,0,0,0,0,"':'","';'",0,0,0,"'?'","'@'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, --- 1163,1169 ---- #endif #define YYMAXTOKEN 317 #if YYDEBUG ! static char *yyname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, "'!'",0,0,"'$'","'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'",0,0,0,0,0,0,0, 0,0,0,0,0,"':'","';'",0,0,0,"'?'","'@'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, *************** *** 1241,1247 **** "ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP", "PREINC","PREDEC","POSTINC","POSTDEC","ARROW", }; ! char *yyrule[] = { "$accept : prog", "prog : progstart lineseq", "block : '{' remember lineseq '}'", --- 1180,1186 ---- "ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP", "PREINC","PREDEC","POSTINC","POSTDEC","ARROW", }; ! static char *yyrule[] = { "$accept : prog", "prog : progstart lineseq", "block : '{' remember lineseq '}'", *************** *** 1456,1472 **** #define YYMAXDEPTH 500 #endif #endif - int yydebug; - int yynerrs; - int yyerrflag; - int yychar; - short *yyssp; - YYSTYPE *yyvsp; - YYSTYPE yyval; - YYSTYPE yylval; - short yyss[YYSTACKSIZE]; - YYSTYPE yyvs[YYSTACKSIZE]; - #define yystacksize YYSTACKSIZE #line 793 "perly.y" /* PROGRAM */ --- 1395,1400 ---- *************** *** 1477,1483 **** #endif #define yyparse() Perl_yyparse(pTHX) ! #line 1481 "y.tab.c" #define YYABORT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab --- 1405,1411 ---- #endif #define yyparse() Perl_yyparse(pTHX) ! #line 1409 "perly.c" #define YYABORT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab *************** *** 1485,1495 **** yyparse() { register int yym, yyn, yystate; #if YYDEBUG register char *yys; ! extern char *getenv(); ! if (yys = getenv("YYDEBUG")) { yyn = *yys; if (yyn >= '0' && yyn <= '9') --- 1413,1443 ---- 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; ! #endif ! struct ysv *ysave; ! #ifdef USE_ITHREADS ! ENTER; /* force yydestruct() before we return */ ! #endif ! New(73, ysave, 1, struct ysv); ! SAVEDESTRUCTOR_X(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; if (yyn >= '0' && yyn <= '9') *************** *** 1501,1512 **** yyerrflag = 0; yychar = (-1); yyssp = yyss; yyvsp = yyvs; *yyssp = yystate = 0; yyloop: ! if (yyn = yydefred[yystate]) goto yyreduce; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; --- 1449,1470 ---- yyerrflag = 0; yychar = (-1); + /* + ** Initialize private stacks (yyparse may be called from an action) + */ + New(73, yyss, yystacksize, short); + New(73, yyvs, yystacksize, YYSTYPE); + ysave->yyss = yyss; + ysave->yyvs = yyvs; + if (!yyvs || !yyss) + goto yyoverflow; + yyssp = yyss; yyvsp = yyvs; *yyssp = yystate = 0; yyloop: ! if ((yyn = yydefred[yystate])) goto yyreduce; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; *************** *** 1516,1522 **** 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 --- 1474,1480 ---- yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; ! PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", yystate, yychar, yys); } #endif *************** *** 1526,1537 **** { #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; --- 1484,1507 ---- { #if YYDEBUG if (yydebug) ! PerlIO_printf(Perl_debug_log, "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 = Renew(yyvs, yystacksize, YYSTYPE); + ysave->yyss = Renew(yyss, yystacksize, short); + if (!yyvs || !yyss) goto yyoverflow; + yyssp = yyss + yyps_index; + yyvsp = yyvs + yypv_index; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; *************** *** 1547,1560 **** } if (yyerrflag) goto yyinrecovery; #ifdef lint ! goto yynewerror; #endif ! yynewerror: yyerror("syntax error"); #ifdef lint ! goto yyerrlab; #endif ! yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) --- 1517,1530 ---- } if (yyerrflag) goto yyinrecovery; #ifdef lint ! #endif ! yyerror("syntax error"); #ifdef lint ! #endif ! ++yynerrs; yyinrecovery: if (yyerrflag < 3) *************** *** 1567,1578 **** { #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; --- 1537,1560 ---- { #if YYDEBUG if (yydebug) ! PerlIO_printf(Perl_debug_log, "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 = Renew(yyvs, yystacksize, YYSTYPE); + ysave->yyss = Renew(yyss, yystacksize, short); + if (!yyvs || !yyss) goto yyoverflow; + yyssp = yyss + yyps_index; + yyvsp = yyvs + yypv_index; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; *************** *** 1582,1588 **** { #if YYDEBUG if (yydebug) ! printf("yydebug: error recovery discarding state %d\n", *yyssp); #endif if (yyssp <= yyss) goto yyabort; --- 1564,1570 ---- { #if YYDEBUG if (yydebug) ! PerlIO_printf(Perl_debug_log, "yydebug: error recovery discarding state %d\n", *yyssp); #endif if (yyssp <= yyss) goto yyabort; *************** *** 1600,1606 **** 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 --- 1582,1588 ---- yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; ! PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery discards token %d (%s)\n", yystate, yychar, yys); } #endif *************** *** 1610,1616 **** yyreduce: #if YYDEBUG if (yydebug) ! printf("yydebug: state %d, reducing by rule %d (%s)\n", yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; --- 1592,1598 ---- yyreduce: #if YYDEBUG if (yydebug) ! PerlIO_printf(Perl_debug_log, "yydebug: state %d, reducing by rule %d (%s)\n", yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; *************** *** 2473,2479 **** #line 790 "perly.y" { yyval.opval = yyvsp[0].opval; } break; ! #line 2477 "y.tab.c" } yyssp -= yym; yystate = *yyssp; --- 2455,2461 ---- #line 790 "perly.y" { yyval.opval = yyvsp[0].opval; } break; ! #line 2459 "perly.c" } yyssp -= yym; yystate = *yyssp; *************** *** 2483,2489 **** { #if YYDEBUG if (yydebug) ! printf("yydebug: after reduction, shifting from state 0 to\ state %d\n", YYFINAL); #endif yystate = YYFINAL; --- 2465,2471 ---- { #if YYDEBUG if (yydebug) ! PerlIO_printf(Perl_debug_log, "yydebug: after reduction, shifting from state 0 to\ state %d\n", YYFINAL); #endif yystate = YYFINAL; *************** *** 2498,2504 **** 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 --- 2480,2486 ---- yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; ! PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", YYFINAL, yychar, yys); } #endif *************** *** 2513,2532 **** 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); } --- 2495,2544 ---- yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) ! PerlIO_printf(Perl_debug_log, "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 = Renew(yyvs, yystacksize, YYSTYPE); + ysave->yyss = Renew(yyss, yystacksize, 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: ! #ifdef USE_ITHREADS ! LEAVE; /* force yydestruct() before we return */ ! #endif ! return retval; ! } ! ! static void ! yydestruct(pTHX_ 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); }