--- y.tab.c	Mon Sep 30 04:20:57 2002
+++ perly.c	Mon Sep 30 04:18:04 2002
@@ -1,5 +1,5 @@
 #ifndef lint
-static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91";
+/* static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; */
 #endif
 #define YYBYACC 1
 #line 16 "perly.y"
@@ -9,7 +9,7 @@
 #ifdef EBCDIC
 #undef YYDEBUG
 #endif
-#define dep() deprecate("\"do\" to call subroutines")
+#define dep() deprecate_old("\"do\" to call subroutines")
 
 /* stuff included here to make perly_c.diff apply better */
 
@@ -50,72 +50,9 @@
 #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 DOROP 301
-#define ANDOP 302
-#define NOTOP 303
-#define ASSIGNOP 304
-#define OROR 305
-#define DORDOR 306
-#define ANDAND 307
-#define BITOROP 308
-#define BITANDOP 309
-#define SHIFTOP 310
-#define MATCHOP 311
-#define UMINUS 312
-#define REFGEN 313
-#define POWOP 314
-#define PREINC 315
-#define PREDEC 316
-#define POSTINC 317
-#define POSTDEC 318
-#define ARROW 319
+#line 54 "perly.c"
 #define YYERRCODE 256
-short yylhs[] = {                                        -1,
+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,
@@ -137,7 +74,7 @@
    49,   49,   34,   34,   35,   35,   35,   44,   24,   19,
    20,   21,   22,   23,   36,   36,   36,   36,
 };
-short yylen[] = {                                         2,
+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,
@@ -159,7 +96,7 @@
     1,    1,    0,    1,    0,    1,    2,    1,    2,    2,
     2,    2,    2,    2,    1,    1,    1,    1,
 };
-short yydefred[] = {                                      4,
+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,    0,   14,    3,  174,    0,    0,  155,    0,
@@ -201,7 +138,7 @@
    32,    0,    0,    0,   22,    0,    0,    0,   31,    5,
     0,   30,    0,    0,   33,    0,   23,
 };
-short yydgoto[] = {                                       1,
+static short yydgoto[] = {                                       1,
    10,   11,   20,  103,   19,    2,   94,  373,   97,  362,
     3,   12,   13,   69,  378,  288,   71,   72,   73,   74,
    75,   76,   77,   78,  294,   80,  295,  284,  286,  289,
@@ -209,7 +146,7 @@
   195,  330,  155,  292,  274,  226,   14,   82,  136,   83,
    84,   85,   86,   15,   16,   17,   18,   92,  281,
 };
-short yysindex[] = {                                      0,
+static short yysindex[] = {                                      0,
     0,    0, -236,    0,    0,    0, -231,    0,    0,    0,
     0,    0,    0,    0,  819,    0,    0,    0, -211, -209,
     3,    0, -209,    0,    0,    0,  -32,  -32,    0,   23,
@@ -251,7 +188,7 @@
     0, 1859, -173,  350,    0, 2213, -173,  360,    0,    0,
   361,    0,  221,  221,    0, -240,    0,
 };
-short yyrindex[] = {                                      0,
+static short yyrindex[] = {                                      0,
     0,    0,  371,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,  289,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -293,7 +230,7 @@
     0,  435,   90,  880,    0,    0,   90,    0,    0,    0,
     0,    0,    0,    0,    0,  186,    0,
 };
-short yygindex[] = {                                      0,
+static short yygindex[] = {                                      0,
     0,    0,   50,  453,    0,    0,  -22,    0,   63,  153,
   -93,    0,    0,    0, -346,  -15, 2480,    0, 1744,  437,
   439,    0,    0,    0,  481,  755,    0,    0,  341, -186,
@@ -302,7 +239,7 @@
     0,    0,    0,    0,    0,    0,    0,    0,    0,
 };
 #define YYTABLESIZE 5051
-short yytable[] = {                                      70,
+static short yytable[] = {                                      70,
   198,  300,   75,   64,   60,  280,  228,   60,  279,   64,
   199,  328,  183,  257,  219,   62,  278,   64,  379,  186,
    75,  110,  296,  188,   15,   21,  197,  170,   64,    4,
@@ -810,7 +747,7 @@
     0,    0,    0,    0,  114,  114,  114,    0,  114,  114,
   114,
 };
-short yycheck[] = {                                      15,
+static short yycheck[] = {                                      15,
    94,   44,   41,   36,   59,   41,   41,  123,   44,   36,
    99,   59,   40,   40,   40,   59,  200,   36,  365,   91,
    59,   40,  209,   91,   41,  257,   93,   63,   59,  266,
@@ -1324,7 +1261,7 @@
 #endif
 #define YYMAXTOKEN 319
 #if YYDEBUG
-char *yyname[] = {
+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,
@@ -1341,7 +1278,7 @@
 "DORDOR","ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN",
 "POWOP","PREINC","PREDEC","POSTINC","POSTDEC","ARROW",
 };
-char *yyrule[] = {
+static char *yyrule[] = {
 "$accept : prog",
 "prog : progstart lineseq",
 "block : '{' remember lineseq '}'",
@@ -1557,17 +1494,6 @@
 #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 795 "perly.y"
  /* PROGRAM */
 
@@ -1578,7 +1504,7 @@
 #endif
 #define yyparse() Perl_yyparse(pTHX)
 
-#line 1582 "y.tab.c"
+#line 1582 "perly.c"
 #define YYABORT goto yyabort
 #define YYACCEPT goto yyaccept
 #define YYERROR goto yyerrlab
@@ -1586,11 +1512,31 @@
 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;
+#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 (yys = getenv("YYDEBUG"))
+#if YYDEBUG
+    if ((yys = getenv("YYDEBUG")))
     {
         yyn = *yys;
         if (yyn >= '0' && yyn <= '9')
@@ -1602,12 +1548,22 @@
     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 ((yyn = yydefred[yystate])) goto yyreduce;
     if (yychar < 0)
     {
         if ((yychar = yylex()) < 0) yychar = 0;
@@ -1617,7 +1573,7 @@
             yys = 0;
             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
             if (!yys) yys = "illegal-symbol";
-            printf("yydebug: state %d, reading %d (%s)\n", yystate,
+            PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", yystate,
                     yychar, yys);
         }
 #endif
@@ -1627,12 +1583,24 @@
     {
 #if YYDEBUG
         if (yydebug)
-            printf("yydebug: state %d, shifting to state %d\n",
+            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;
@@ -1648,14 +1616,14 @@
     }
     if (yyerrflag) goto yyinrecovery;
 #ifdef lint
-    goto yynewerror;
+
 #endif
-yynewerror:
+
     yyerror("syntax error");
 #ifdef lint
-    goto yyerrlab;
+
 #endif
-yyerrlab:
+
     ++yynerrs;
 yyinrecovery:
     if (yyerrflag < 3)
@@ -1668,12 +1636,24 @@
             {
 #if YYDEBUG
                 if (yydebug)
-                    printf("yydebug: state %d, error recovery shifting\
+                    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;
@@ -1683,7 +1663,7 @@
             {
 #if YYDEBUG
                 if (yydebug)
-                    printf("yydebug: error recovery discarding state %d\n",
+                    PerlIO_printf(Perl_debug_log, "yydebug: error recovery discarding state %d\n",
                             *yyssp);
 #endif
                 if (yyssp <= yyss) goto yyabort;
@@ -1701,7 +1681,7 @@
             yys = 0;
             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
             if (!yys) yys = "illegal-symbol";
-            printf("yydebug: state %d, error recovery discards token %d (%s)\n",
+            PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery discards token %d (%s)\n",
                     yystate, yychar, yys);
         }
 #endif
@@ -1711,7 +1691,7 @@
 yyreduce:
 #if YYDEBUG
     if (yydebug)
-        printf("yydebug: state %d, reducing by rule %d (%s)\n",
+        PerlIO_printf(Perl_debug_log, "yydebug: state %d, reducing by rule %d (%s)\n",
                 yystate, yyn, yyrule[yyn]);
 #endif
     yym = yylen[yyn];
@@ -2578,7 +2558,7 @@
 #line 792 "perly.y"
 { yyval.opval = yyvsp[0].opval; }
 break;
-#line 2582 "y.tab.c"
+#line 2582 "perly.c"
     }
     yyssp -= yym;
     yystate = *yyssp;
@@ -2588,7 +2568,7 @@
     {
 #if YYDEBUG
         if (yydebug)
-            printf("yydebug: after reduction, shifting from state 0 to\
+            PerlIO_printf(Perl_debug_log, "yydebug: after reduction, shifting from state 0 to\
  state %d\n", YYFINAL);
 #endif
         yystate = YYFINAL;
@@ -2603,7 +2583,7 @@
                 yys = 0;
                 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
                 if (!yys) yys = "illegal-symbol";
-                printf("yydebug: state %d, reading %d (%s)\n",
+                PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n",
                         YYFINAL, yychar, yys);
             }
 #endif
@@ -2618,20 +2598,50 @@
         yystate = yydgoto[yym];
 #if YYDEBUG
     if (yydebug)
-        printf("yydebug: after reduction, shifting from state %d \
+        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("yacc stack overflow");
+    yyerror("Out of memory for yacc stack");
 yyabort:
-    return (1);
+    retval = 1;
 yyaccept:
-    return (0);
+#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);
 }