*** perly.c.orig	Sun Feb  7 04:48:56 1999
--- perly.c	Sun Feb  7 05:30:49 1999
***************
*** 7,10 ****
--- 7,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
+ 
+ #ifdef PERL_OBJECT
+ static void
+ Dep(CPerlObj *pPerl)
+ {
+     pPerl->deprecate("\"do\" to call subroutines");
+ }
+ #define dep() Dep(this)
+ #else
  static void
  dep(void)
***************
*** 12,93 ****
      deprecate("\"do\" to call subroutines");
  }
  
  #line 30 "perly.y"
- /* I sense a Big Blue pattern here... */
- #if !defined(OEMVS) && !defined(__OPEN_VM) && !defined(POSIX_BC)
- #line 34 "perly.y"
- typedef union {
-     I32	ival;
-     char *pval;
-     OP *opval;
-     GV *gvval;
- } YYSTYPE;
- #line 42 "perly.y"
- #endif /* !OEMVS && !__OPEN_VM && !POSIX_BC */
- 
- #ifdef USE_PURE_BISON
- #define YYLEX_PARAM (&yychar)
- #endif
- #line 32 "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 OROP 297
- #define ANDOP 298
- #define NOTOP 299
- #define ASSIGNOP 300
- #define OROR 301
- #define ANDAND 302
- #define BITOROP 303
- #define BITANDOP 304
- #define SHIFTOP 305
- #define MATCHOP 306
- #define UMINUS 307
- #define REFGEN 308
- #define POWOP 309
- #define PREINC 310
- #define PREDEC 311
- #define POSTINC 312
- #define POSTDEC 313
- #define ARROW 314
  #define YYERRCODE 256
! short yylhs[] = {                                        -1,
     45,    0,    9,    7,   10,    8,   11,   11,   11,   12,
     12,   12,   12,   24,   24,   24,   24,   24,   24,   24,
--- 27,35 ----
      deprecate("\"do\" to call subroutines");
  }
+ #endif
  
  #line 30 "perly.y"
  #define YYERRCODE 256
! static short yylhs[] = {                                 -1,
     45,    0,    9,    7,   10,    8,   11,   11,   11,   12,
     12,   12,   12,   24,   24,   24,   24,   24,   24,   24,
***************
*** 109,113 ****
     20,   21,   22,   35,   35,   35,   35,
  };
! short yylen[] = {                                         2,
      0,    2,    4,    0,    4,    0,    0,    2,    2,    2,
      1,    2,    3,    1,    1,    3,    3,    3,    3,    3,
--- 51,55 ----
     20,   21,   22,   35,   35,   35,   35,
  };
! static short yylen[] = {                                  2,
      0,    2,    4,    0,    4,    0,    0,    2,    2,    2,
      1,    2,    3,    1,    1,    3,    3,    3,    3,    3,
***************
*** 129,133 ****
      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,
--- 71,75 ----
      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,
***************
*** 168,172 ****
     33,    0,   23,
  };
! short yydgoto[] = {                                       1,
      9,   66,   10,   18,   95,   17,   86,  339,   89,  328,
      3,   11,   12,   68,  344,  263,   70,   71,   72,   73,
--- 110,114 ----
     33,    0,   23,
  };
! static short yydgoto[] = {                                1,
      9,   66,   10,   18,   95,   17,   86,  339,   89,  328,
      3,   11,   12,   68,  344,  263,   70,   71,   72,   73,
***************
*** 175,179 ****
    250,  142,  267,   13,    2,   14,   15,   16,   85,  256,
  };
! short yysindex[] = {                                      0,
      0,    0,  -66,    0,    0,    0,  -48,    0,    0,    0,
      0,    0,  645,    0,    0,    0, -232, -227,  -27,    0,
--- 117,121 ----
    250,  142,  267,   13,    2,   14,   15,   16,   85,  256,
  };
! static short yysindex[] = {                               0,
      0,    0,  -66,    0,    0,    0,  -48,    0,    0,    0,
      0,    0,  645,    0,    0,    0, -232, -227,  -27,    0,
***************
*** 214,218 ****
      0, -238,    0,
  };
! short yyrindex[] = {                                      0,
      0,    0,  249,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,  184,    0,    0,    0,
--- 156,160 ----
      0, -238,    0,
  };
! static short yyrindex[] = {                               0,
      0,    0,  249,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,  184,    0,    0,    0,
***************
*** 253,257 ****
      0,  154,    0,
  };
! short yygindex[] = {                                      0,
      0,    0,    0,  374,  351,    0,  -12,    0,  946,  413,
    -83,    0,    0,    0, -311,  -13, 4139, 4198,    0,    0,
--- 195,199 ----
      0,  154,    0,
  };
! static short yygindex[] = {                               0,
      0,    0,    0,  374,  351,    0,  -12,    0,  946,  413,
    -83,    0,    0,    0, -311,  -13, 4139, 4198,    0,    0,
***************
*** 261,265 ****
  };
  #define YYTABLESIZE 4425
! short yytable[] = {                                      69,
    207,   62,  181,  105,  168,  102,  105,  204,  168,  248,
     20,  208,   62,  253,   58,  285,  274,  170,  298,  345,
--- 203,207 ----
  };
  #define YYTABLESIZE 4425
! static short yytable[] = {                               69,
    207,   62,  181,  105,  168,  102,  105,  204,  168,  248,
     20,  208,   62,  253,   58,  285,  274,  170,  298,  345,
***************
*** 706,710 ****
      0,    0,    0,    0,  317,
  };
! short yycheck[] = {                                      13,
     41,   36,   86,   41,   91,   40,   44,   59,   91,   59,
     59,   93,   36,  183,   59,   59,   41,   91,   41,  331,
--- 648,652 ----
      0,    0,    0,    0,  317,
  };
! static short yycheck[] = {                               13,
     41,   36,   86,   41,   91,   40,   44,   59,   91,   59,
     59,   93,   36,  183,   59,   59,   41,   91,   41,  331,
***************
*** 1157,1161 ****
  #define YYMAXTOKEN 314
  #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,
--- 1099,1103 ----
  #define YYMAXTOKEN 314
  #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,
***************
*** 1174,1178 ****
  "POSTDEC","ARROW",
  };
! char *yyrule[] = {
  "$accept : prog",
  "$$1 :",
--- 1116,1120 ----
  "POSTDEC","ARROW",
  };
! static char *yyrule[] = {
  "$accept : prog",
  "$$1 :",
***************
*** 1369,1397 ****
  #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 652 "perly.y"
   /* PROGRAM */
! #line 1385 "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"))
      {
--- 1311,1375 ----
  #endif
  #endif
  #line 652 "perly.y"
   /* PROGRAM */
! #line 1318 "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;
+ };
+ 
+ void
+ yydestruct(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(void)
  {
      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"))
      {
***************
*** 1406,1409 ****
--- 1384,1397 ----
      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;
***************
*** 1431,1440 ****
  #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];
--- 1419,1442 ----
  #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];
***************
*** 1472,1481 ****
  #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];
--- 1474,1498 ----
  #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];
***************
*** 1487,1492 ****
  #if YYDEBUG
                  if (yydebug)
!                     printf("yydebug: error recovery discarding state %d\n",
!                             *yyssp);
  #endif
                  if (yyssp <= yyss) goto yyabort;
--- 1504,1510 ----
  #if YYDEBUG
                  if (yydebug)
!                     PerlIO_printf(Perl_debug_log,
! 			"yydebug: error recovery discarding state %d\n",
! 			*yyssp);
  #endif
                  if (yyssp <= yyss) goto yyabort;
***************
*** 1505,1510 ****
              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
--- 1523,1529 ----
              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
***************
*** 1515,1519 ****
  #if YYDEBUG
      if (yydebug)
!         printf("yydebug: state %d, reducing by rule %d (%s)\n",
                  yystate, yyn, yyrule[yyn]);
  #endif
--- 1534,1538 ----
  #if YYDEBUG
      if (yydebug)
!         PerlIO_printf(Perl_debug_log, "yydebug: state %d, reducing by rule %d (%s)\n",
                  yystate, yyn, yyrule[yyn]);
  #endif
***************
*** 2305,2309 ****
  { yyval.opval = yyvsp[0].opval; }
  break;
! #line 2308 "y.tab.c"
      }
      yyssp -= yym;
--- 2324,2328 ----
  { yyval.opval = yyvsp[0].opval; }
  break;
! #line 2329 "perly.c"
      }
      yyssp -= yym;
***************
*** 2315,2320 ****
  #if YYDEBUG
          if (yydebug)
!             printf("yydebug: after reduction, shifting from state 0 to\
!  state %d\n", YYFINAL);
  #endif
          yystate = YYFINAL;
--- 2334,2340 ----
  #if YYDEBUG
          if (yydebug)
!             PerlIO_printf(Perl_debug_log,
! 		"yydebug: after reduction, shifting from state 0 to state %d\n",
! 		YYFINAL);
  #endif
          yystate = YYFINAL;
***************
*** 2330,2334 ****
                  if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
                  if (!yys) yys = "illegal-symbol";
!                 printf("yydebug: state %d, reading %d (%s)\n",
                          YYFINAL, yychar, yys);
              }
--- 2350,2354 ----
                  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);
              }
***************
*** 2345,2354 ****
  #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;
--- 2365,2389 ----
  #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;
***************
*** 2356,2363 ****
      goto yyloop;
  yyoverflow:
!     yyerror("yacc stack overflow");
  yyabort:
!     return (1);
  yyaccept:
!     return (0);
  }
--- 2391,2398 ----
      goto yyloop;
  yyoverflow:
!     yyerror("Out of memory for yacc stack");
  yyabort:
!     retval = 1;
  yyaccept:
!     return retval;
  }