*** perly.c.orig Mon Jul 26 03:27:57 1999 --- perly.c Mon Jul 26 02:47:03 1999 *************** *** 8,91 **** #include "perl.h" #define dep() deprecate("\"do\" to call subroutines") ! #line 27 "perly.y" ! /* I sense a Big Blue pattern here... */ ! #if !defined(OEMVS) && !defined(__OPEN_VM) && !defined(POSIX_BC) ! #line 31 "perly.y" ! typedef union { ! I32 ival; ! char *pval; ! OP *opval; ! GV *gvval; ! } YYSTYPE; ! #line 39 "perly.y" ! #endif /* !OEMVS && !__OPEN_VM && !POSIX_BC */ ! #ifdef USE_PURE_BISON ! #define YYLEX_PARAM (&yychar) ! #endif ! #line 29 "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 PREC_LOW 297 ! #define OROP 298 ! #define ANDOP 299 ! #define NOTOP 300 ! #define ASSIGNOP 301 ! #define OROR 302 ! #define ANDAND 303 ! #define BITOROP 304 ! #define BITANDOP 305 ! #define SHIFTOP 306 ! #define MATCHOP 307 ! #define UMINUS 308 ! #define REFGEN 309 ! #define POWOP 310 ! #define PREINC 311 ! #define PREDEC 312 ! #define POSTINC 313 ! #define POSTDEC 314 ! #define ARROW 315 #define YYERRCODE 256 ! short yylhs[] = { -1, 46, 0, 9, 7, 10, 8, 11, 11, 11, 12, 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, --- 8,25 ---- #include "perl.h" + #define yydebug PL_yydebug + #define yynerrs PL_yynerrs + #define yyerrflag PL_yyerrflag + #define yychar PL_yychar + #define yyval PL_yyval + #define yylval PL_yylval + #define dep() deprecate("\"do\" to call subroutines") ! static void yydestruct(pTHXo_ void *ptr); ! #line 27 "perly.y" #define YYERRCODE 256 ! static short yylhs[] = { -1, 46, 0, 9, 7, 10, 8, 11, 11, 11, 12, 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, *************** *** 107,111 **** 24, 19, 20, 21, 22, 23, 36, 36, 36, 36, }; ! short yylen[] = { 2, 0, 2, 4, 0, 4, 0, 0, 2, 2, 2, 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, --- 41,45 ---- 24, 19, 20, 21, 22, 23, 36, 36, 36, 36, }; ! static short yylen[] = { 2, 0, 2, 4, 0, 4, 0, 0, 2, 2, 2, 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, *************** *** 127,131 **** 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, }; ! short yydefred[] = { 1, 0, 7, 0, 45, 56, 54, 0, 54, 8, 46, 9, 11, 0, 47, 48, 49, 0, 0, 0, 63, --- 61,65 ---- 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, }; ! static short yydefred[] = { 1, 0, 7, 0, 45, 56, 54, 0, 54, 8, 46, 9, 11, 0, 47, 48, 49, 0, 0, 0, 63, *************** *** 166,170 **** 5, 0, 30, 0, 0, 33, 0, 23, }; ! short yydgoto[] = { 1, 9, 66, 10, 18, 96, 17, 87, 344, 90, 333, 3, 11, 12, 68, 349, 267, 70, 71, 72, 73, --- 100,104 ---- 5, 0, 30, 0, 0, 33, 0, 23, }; ! static short yydgoto[] = { 1, 9, 66, 10, 18, 96, 17, 87, 344, 90, 333, 3, 11, 12, 68, 349, 267, 70, 71, 72, 73, *************** *** 174,178 **** 260, }; ! short yysindex[] = { 0, 0, 0, 142, 0, 0, 0, -57, 0, 0, 0, 0, 0, 622, 0, 0, 0, -239, -229, -10, 0, --- 108,112 ---- 260, }; ! static short yysindex[] = { 0, 0, 0, 142, 0, 0, 0, -57, 0, 0, 0, 0, 0, 622, 0, 0, 0, -239, -229, -10, 0, *************** *** 213,217 **** 0, 228, 0, 92, 92, 0, -204, 0, }; ! short yyrindex[] = { 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, --- 147,151 ---- 0, 228, 0, 92, 92, 0, -204, 0, }; ! static short yyrindex[] = { 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, *************** *** 252,256 **** 0, 0, 0, 0, 0, 0, 168, 0, }; ! short yygindex[] = { 0, 0, 0, 0, 339, 320, 0, -11, 0, 913, 360, -78, 0, 0, 0, -320, -13, 4321, 0, 1367, 0, --- 186,190 ---- 0, 0, 0, 0, 0, 0, 168, 0, }; ! static short yygindex[] = { 0, 0, 0, 0, 339, 320, 0, -11, 0, 913, 360, -78, 0, 0, 0, -320, -13, 4321, 0, 1367, 0, *************** *** 261,265 **** }; #define YYTABLESIZE 4610 ! short yytable[] = { 69, 206, 20, 295, 62, 113, 257, 184, 103, 183, 298, 172, 62, 125, 104, 252, 350, 104, 81, 209, 169, --- 195,199 ---- }; #define YYTABLESIZE 4610 ! static short yytable[] = { 69, 206, 20, 295, 62, 113, 257, 184, 103, 183, 298, 172, 62, 125, 104, 252, 350, 104, 81, 209, 169, *************** *** 724,728 **** 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, }; ! short yycheck[] = { 13, 59, 59, 59, 36, 43, 185, 92, 40, 87, 59, 91, 36, 51, 41, 59, 336, 44, 257, 41, 40, --- 658,662 ---- 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, }; ! static short yycheck[] = { 13, 59, 59, 59, 36, 43, 185, 92, 40, 87, 59, 91, 36, 51, 41, 59, 336, 44, 257, 41, 40, *************** *** 1193,1197 **** #define YYMAXTOKEN 315 #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, --- 1127,1131 ---- #define YYMAXTOKEN 315 #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, *************** *** 1210,1214 **** "POSTINC","POSTDEC","ARROW", }; ! char *yyrule[] = { "$accept : prog", "$$1 :", --- 1144,1148 ---- "POSTINC","POSTDEC","ARROW", }; ! static char *yyrule[] = { "$accept : prog", "$$1 :", *************** *** 1408,1436 **** #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 666 "perly.y" /* PROGRAM */ ! #line 1424 "y.tab.c" #define YYABORT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab int ! yyparse() { register int yym, yyn, yystate; #if YYDEBUG register char *yys; extern char *getenv(); if (yys = getenv("YYDEBUG")) { --- 1342,1391 ---- #endif #endif #line 666 "perly.y" /* PROGRAM */ ! #line 1427 "perly.c" #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; + }; + int ! Perl_yyparse(pTHX) { 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; + #ifndef __cplusplus extern char *getenv(); + #endif + #endif + + struct ysv *ysave; + New(73, ysave, 1, 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")) { *************** *** 1445,1448 **** --- 1400,1413 ---- 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; *************** *** 1470,1479 **** #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]; --- 1435,1458 ---- #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 = yyvs = ! (YYSTYPE*)PerlMem_realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); ! ysave->yyss = yyss = ! (short*)PerlMem_realloc((char*)yyss,yystacksize * sizeof(short)); ! if (!yyvs || !yyss) ! goto yyoverflow; ! yyssp = yyss + yyps_index; ! yyvsp = yyvs + yypv_index; } *++yyssp = yystate = yytable[yyn]; *************** *** 1511,1520 **** #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]; --- 1490,1514 ---- #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 = yyvs = (YYSTYPE*)PerlMem_realloc((char*)yyvs, ! yystacksize * sizeof(YYSTYPE)); ! ysave->yyss = yyss = (short*)PerlMem_realloc((char*)yyss, ! yystacksize * sizeof(short)); ! if (!yyvs || !yyss) ! goto yyoverflow; ! yyssp = yyss + yyps_index; ! yyvsp = yyvs + yypv_index; } *++yyssp = yystate = yytable[yyn]; *************** *** 1526,1531 **** #if YYDEBUG if (yydebug) ! printf("yydebug: error recovery discarding state %d\n", ! *yyssp); #endif if (yyssp <= yyss) goto yyabort; --- 1520,1526 ---- #if YYDEBUG if (yydebug) ! PerlIO_printf(Perl_debug_log, ! "yydebug: error recovery discarding state %d\n", ! *yyssp); #endif if (yyssp <= yyss) goto yyabort; *************** *** 1544,1549 **** 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 --- 1539,1545 ---- 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 *************** *** 1554,1558 **** #if YYDEBUG if (yydebug) ! printf("yydebug: state %d, reducing by rule %d (%s)\n", yystate, yyn, yyrule[yyn]); #endif --- 1550,1554 ---- #if YYDEBUG if (yydebug) ! PerlIO_printf(Perl_debug_log, "yydebug: state %d, reducing by rule %d (%s)\n", yystate, yyn, yyrule[yyn]); #endif *************** *** 2358,2362 **** { yyval.opval = yyvsp[0].opval; } break; ! #line 2361 "y.tab.c" } yyssp -= yym; --- 2354,2358 ---- { yyval.opval = yyvsp[0].opval; } break; ! #line 2365 "perly.c" } yyssp -= yym; *************** *** 2368,2373 **** #if YYDEBUG if (yydebug) ! printf("yydebug: after reduction, shifting from state 0 to\ ! state %d\n", YYFINAL); #endif yystate = YYFINAL; --- 2364,2370 ---- #if YYDEBUG if (yydebug) ! PerlIO_printf(Perl_debug_log, ! "yydebug: after reduction, shifting from state 0 to state %d\n", ! YYFINAL); #endif yystate = YYFINAL; *************** *** 2383,2387 **** if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; ! printf("yydebug: state %d, reading %d (%s)\n", YYFINAL, yychar, yys); } --- 2380,2384 ---- 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); } *************** *** 2398,2407 **** #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; --- 2395,2419 ---- #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 = yyvs = ! (YYSTYPE*)PerlMem_realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE)); ! ysave->yyss = yyss = ! (short*)PerlMem_realloc((char*)yyss,yystacksize * sizeof(short)); ! if (!yyvs || !yyss) ! goto yyoverflow; ! yyssp = yyss + yyps_index; ! yyvsp = yyvs + yypv_index; } *++yyssp = yystate; *************** *** 2409,2416 **** goto yyloop; yyoverflow: ! yyerror("yacc stack overflow"); yyabort: ! return (1); yyaccept: ! return (0); } --- 2421,2448 ---- goto yyloop; yyoverflow: ! yyerror("Out of memory for yacc stack"); yyabort: ! retval = 1; yyaccept: ! return retval; ! } ! ! #ifdef PERL_OBJECT ! #define NO_XSLOCKS ! #include "XSUB.h" ! #endif ! ! static void ! yydestruct(pTHXo_ 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); }