This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
The base.pm changes need this, too?
[perl5.git] / perly_c.diff
index aa0555b..c0db93a 100644 (file)
-*** perly.c.orig       Tue Jul 28 15:02:41 1998
---- perly.c    Tue Jul 28 15:14:54 1998
+*** perly.c.orig       Tue Mar 26 01:38:52 2002
+--- perly.c    Tue Mar 26 01:38:54 2002
 ***************
-*** 7,11 ****
---- 7,19 ----
-  #include "perl.h"
+*** 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 */
   
-+ #ifdef PERL_OBJECT
-  static void
-+ Dep(CPerlObj *pPerl)
-+ {
-+     pPerl->deprecate("\"do\" to call subroutines");
-+ }
-+ #define dep() Dep(this)
-+ #else
-+ static void
-  dep(void)
-  {
 ***************
-*** 12,86 ****
-      deprecate("\"do\" to call subroutines");
-  }
+*** 50,119 ****
+  #define yylex yylex_r
+  #endif
   
-  #line 30 "perly.y"
-- #ifndef OEMVS
-- #line 33 "perly.y"
-- typedef union {
--     I32      ival;
--     char *pval;
--     OP *opval;
--     GV *gvval;
-- } YYSTYPE;
-- #line 41 "perly.y"
-- #endif /* OEMVS */
-- #line 27 "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
+! #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,
---- 20,26 ----
-      deprecate("\"do\" to call subroutines");
-  }
-+ #endif
+! 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 30 "perly.y"
+! #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,
+***************
+*** 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 '}'",
 ***************
-*** 1345,1365 ****
-  YYSTYPE yyval;
-  YYSTYPE yylval;
+*** 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 643 "perly.y"
+  #line 793 "perly.y"
    /* PROGRAM */
-! #line 1353 "y.tab.c"
+  
+--- 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
-  int
-! yyparse()
+***************
+*** 1485,1495 ****
+  yyparse()
   {
       register int yym, yyn, yystate;
   #if YYDEBUG
       register char *yys;
-      extern char *getenv();
+!     extern char *getenv();
   
-      if (yys = getenv("YYDEBUG"))
+!     if (yys = getenv("YYDEBUG"))
       {
---- 1285,1349 ----
-  YYSTYPE yyval;
-  YYSTYPE yylval;
-  #line 643 "perly.y"
-   /* PROGRAM */
-! #line 1353 "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)
+          yyn = *yys;
+          if (yyn >= '0' && yyn <= '9')
+--- 1413,1443 ----
+  yyparse()
   {
       register int yym, yyn, yystate;
 +     register short *yyssp;
 +     int retval = 0;
   #if YYDEBUG
       register char *yys;
-+ #ifndef __cplusplus
-      extern char *getenv();
-+ #endif
-+ #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"))
+!     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')
 ***************
-*** 1374,1377 ****
---- 1358,1371 ----
+*** 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);
   
 +     /*
 + 
       yyssp = yyss;
       yyvsp = yyvs;
+      *yyssp = yystate = 0;
+  
+  yyloop:
+!     if ((yyn = yydefred[yystate])) goto yyreduce;
+      if (yychar < 0)
+      {
+          if ((yychar = yylex()) < 0) yychar = 0;
 ***************
-*** 1389,1393 ****
+*** 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);
           }
---- 1383,1387 ----
+  #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
 ***************
-*** 1399,1403 ****
+*** 1526,1537 ****
+      {
   #if YYDEBUG
           if (yydebug)
 !             printf("yydebug: state %d, shifting to state %d\n",
                       yystate, yytable[yyn]);
   #endif
---- 1393,1397 ----
+          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
-***************
-*** 1404,1408 ****
           if (yyssp >= yyss + yystacksize - 1)
           {
-!             goto yyoverflow;
-          }
-          *++yyssp = yystate = yytable[yyn];
---- 1398,1416 ----
-          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*)realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE));
-!          ysave->yyss = yyss =
-!              (short*)realloc((char*)yyss,yystacksize * sizeof(short));
-!          if (!yyvs || !yyss)
-!              goto yyoverflow;
-!          yyssp = yyss + yyps_index;
-!          yyvsp = yyvs + yypv_index;
++          /*
++          ** 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)
 ***************
-*** 1440,1449 ****
+*** 1567,1578 ****
+              {
   #if YYDEBUG
                   if (yydebug)
 !                     printf("yydebug: state %d, error recovery shifting\
-!  to state %d\n", *yyssp, yytable[yyn]);
+   to state %d\n", *yyssp, yytable[yyn]);
   #endif
                   if (yyssp >= yyss + yystacksize - 1)
                   {
-!                     goto yyoverflow;
+                      goto yyoverflow;
                   }
                   *++yyssp = yystate = yytable[yyn];
---- 1448,1472 ----
+                  *++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]);
+!                     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*)realloc((char*)yyvs,
-!                      yystacksize * sizeof(YYSTYPE));
-!                  ysave->yyss = yyss = (short*)realloc((char*)yyss,
-!                      yystacksize * sizeof(short));
-!                  if (!yyvs || !yyss)
-!                      goto yyoverflow;
-!                  yyssp = yyss + yyps_index;
-!                  yyvsp = yyvs + yypv_index;
++                  /*
++                  ** 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;
 ***************
-*** 1455,1460 ****
+*** 1582,1588 ****
+              {
   #if YYDEBUG
                   if (yydebug)
 !                     printf("yydebug: error recovery discarding state %d\n",
-!                             *yyssp);
+                              *yyssp);
   #endif
                   if (yyssp <= yyss) goto yyabort;
---- 1478,1484 ----
+--- 1564,1570 ----
+              {
   #if YYDEBUG
                   if (yydebug)
-!                     PerlIO_printf(Perl_debug_log,
-!                      "yydebug: error recovery discarding state %d\n",
-!                      *yyssp);
+!                     PerlIO_printf(Perl_debug_log, "yydebug: error recovery discarding state %d\n",
+                              *yyssp);
   #endif
                   if (yyssp <= yyss) goto yyabort;
 ***************
-*** 1473,1478 ****
+*** 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);
+                      yystate, yychar, yys);
           }
   #endif
---- 1497,1503 ----
+--- 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);
+!             PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery discards token %d (%s)\n",
+                      yystate, yychar, yys);
           }
   #endif
 ***************
-*** 1483,1487 ****
+*** 1610,1616 ****
+  yyreduce:
   #if YYDEBUG
       if (yydebug)
 !         printf("yydebug: state %d, reducing by rule %d (%s)\n",
                   yystate, yyn, yyrule[yyn]);
   #endif
---- 1508,1512 ----
+      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];
 ***************
-*** 2267,2271 ****
+*** 2473,2479 ****
+  #line 790 "perly.y"
   { yyval.opval = yyvsp[0].opval; }
   break;
-! #line 2270 "y.tab.c"
+! #line 2477 "y.tab.c"
       }
       yyssp -= yym;
---- 2292,2296 ----
+      yystate = *yyssp;
+--- 2455,2461 ----
+  #line 790 "perly.y"
   { yyval.opval = yyvsp[0].opval; }
   break;
-! #line 2270 "perly.c"
+! #line 2459 "perly.c"
       }
       yyssp -= yym;
+      yystate = *yyssp;
 ***************
-*** 2277,2282 ****
+*** 2483,2489 ****
+      {
   #if YYDEBUG
           if (yydebug)
 !             printf("yydebug: after reduction, shifting from state 0 to\
-!  state %d\n", YYFINAL);
+   state %d\n", YYFINAL);
   #endif
           yystate = YYFINAL;
---- 2302,2308 ----
+--- 2465,2471 ----
+      {
   #if YYDEBUG
           if (yydebug)
-!             PerlIO_printf(Perl_debug_log,
-!              "yydebug: after reduction, shifting from state 0 to state %d\n",
-!              YYFINAL);
+!             PerlIO_printf(Perl_debug_log, "yydebug: after reduction, shifting from state 0 to\
+   state %d\n", YYFINAL);
   #endif
           yystate = YYFINAL;
 ***************
-*** 2292,2296 ****
+*** 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);
               }
---- 2318,2322 ----
+  #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
 ***************
-*** 2307,2316 ****
+*** 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;
---- 2333,2357 ----
-  #if YYDEBUG
-      if (yydebug)
-!         PerlIO_printf(Perl_debug_log,
-!          "yydebug: after reduction, shifting from state %d to state %d\n",
-!          *yyssp, yystate);
+  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*)realloc((char*)yyvs,yystacksize * sizeof(YYSTYPE));
-!      ysave->yyss = yyss =
-!          (short*)realloc((char*)yyss,yystacksize * sizeof(short));
-!      if (!yyvs || !yyss)
-!          goto yyoverflow;
-!      yyssp = yyss + yyps_index;
-!      yyvsp = yyvs + yypv_index;
+          goto yyoverflow;
       }
       *++yyssp = yystate;
-***************
-*** 2318,2325 ****
+      *++yyvsp = yyval;
       goto yyloop;
   yyoverflow:
 !     yyerror("yacc stack overflow");
   yyaccept:
 !     return (0);
   }
---- 2359,2366 ----
+--- 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);
   }