| 1 |
--- perly.c.orig Thu Apr 7 10:51:31 2005 |
| 2 |
+++ perly.c Thu Apr 7 10:54:13 2005 |
| 3 |
@@ -1,5 +1,5 @@ |
| 4 |
#ifndef lint |
| 5 |
-static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; |
| 6 |
+/* static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; */ |
| 7 |
#endif |
| 8 |
#define YYBYACC 1 |
| 9 |
#line 25 "perly.y" |
| 10 |
@@ -9,7 +9,7 @@ |
| 11 |
#ifdef EBCDIC |
| 12 |
#undef YYDEBUG |
| 13 |
#endif |
| 14 |
-#define dep() deprecate("\"do\" to call subroutines") |
| 15 |
+#define dep() deprecate_old("\"do\" to call subroutines") |
| 16 |
|
| 17 |
/* stuff included here to make perly_c.diff apply better */ |
| 18 |
|
| 19 |
@@ -50,70 +50,9 @@ |
| 20 |
#define yylex yylex_r |
| 21 |
#endif |
| 22 |
|
| 23 |
-#line 54 "y.tab.c" |
| 24 |
-#define WORD 257 |
| 25 |
-#define METHOD 258 |
| 26 |
-#define FUNCMETH 259 |
| 27 |
-#define THING 260 |
| 28 |
-#define PMFUNC 261 |
| 29 |
-#define PRIVATEREF 262 |
| 30 |
-#define FUNC0SUB 263 |
| 31 |
-#define UNIOPSUB 264 |
| 32 |
-#define LSTOPSUB 265 |
| 33 |
-#define LABEL 266 |
| 34 |
-#define FORMAT 267 |
| 35 |
-#define SUB 268 |
| 36 |
-#define ANONSUB 269 |
| 37 |
-#define PACKAGE 270 |
| 38 |
-#define USE 271 |
| 39 |
-#define WHILE 272 |
| 40 |
-#define UNTIL 273 |
| 41 |
-#define IF 274 |
| 42 |
-#define UNLESS 275 |
| 43 |
-#define ELSE 276 |
| 44 |
-#define ELSIF 277 |
| 45 |
-#define CONTINUE 278 |
| 46 |
-#define FOR 279 |
| 47 |
-#define LOOPEX 280 |
| 48 |
-#define DOTDOT 281 |
| 49 |
-#define FUNC0 282 |
| 50 |
-#define FUNC1 283 |
| 51 |
-#define FUNC 284 |
| 52 |
-#define UNIOP 285 |
| 53 |
-#define LSTOP 286 |
| 54 |
-#define RELOP 287 |
| 55 |
-#define EQOP 288 |
| 56 |
-#define MULOP 289 |
| 57 |
-#define ADDOP 290 |
| 58 |
-#define DOLSHARP 291 |
| 59 |
-#define DO 292 |
| 60 |
-#define HASHBRACK 293 |
| 61 |
-#define NOAMP 294 |
| 62 |
-#define LOCAL 295 |
| 63 |
-#define MY 296 |
| 64 |
-#define MYSUB 297 |
| 65 |
-#define COLONATTR 298 |
| 66 |
-#define PREC_LOW 299 |
| 67 |
-#define OROP 300 |
| 68 |
-#define ANDOP 301 |
| 69 |
-#define NOTOP 302 |
| 70 |
-#define ASSIGNOP 303 |
| 71 |
-#define OROR 304 |
| 72 |
-#define ANDAND 305 |
| 73 |
-#define BITOROP 306 |
| 74 |
-#define BITANDOP 307 |
| 75 |
-#define SHIFTOP 308 |
| 76 |
-#define MATCHOP 309 |
| 77 |
-#define UMINUS 310 |
| 78 |
-#define REFGEN 311 |
| 79 |
-#define POWOP 312 |
| 80 |
-#define PREINC 313 |
| 81 |
-#define PREDEC 314 |
| 82 |
-#define POSTINC 315 |
| 83 |
-#define POSTDEC 316 |
| 84 |
-#define ARROW 317 |
| 85 |
+#line 54 "perly.c" |
| 86 |
#define YYERRCODE 256 |
| 87 |
-short yylhs[] = { -1, |
| 88 |
+static short yylhs[] = { -1, |
| 89 |
0, 9, 7, 6, 10, 8, 11, 11, 11, 12, |
| 90 |
12, 12, 12, 25, 25, 25, 25, 25, 25, 25, |
| 91 |
15, 15, 15, 14, 14, 43, 43, 13, 13, 13, |
| 92 |
@@ -135,7 +74,7 @@ |
| 93 |
49, 34, 34, 35, 35, 35, 44, 24, 19, 20, |
| 94 |
21, 22, 23, 36, 36, 36, 36, |
| 95 |
}; |
| 96 |
-short yylen[] = { 2, |
| 97 |
+static short yylen[] = { 2, |
| 98 |
2, 4, 0, 0, 4, 0, 0, 2, 2, 2, |
| 99 |
1, 2, 3, 1, 1, 3, 3, 3, 3, 3, |
| 100 |
0, 2, 6, 7, 7, 0, 2, 8, 8, 10, |
| 101 |
@@ -157,7 +96,7 @@ |
| 102 |
1, 0, 1, 0, 1, 2, 1, 2, 2, 2, |
| 103 |
2, 2, 2, 1, 1, 1, 1, |
| 104 |
}; |
| 105 |
-short yydefred[] = { 4, |
| 106 |
+static short yydefred[] = { 4, |
| 107 |
0, 7, 0, 45, 58, 56, 0, 56, 56, 8, |
| 108 |
46, 9, 11, 48, 0, 47, 49, 50, 0, 0, |
| 109 |
0, 70, 71, 0, 14, 3, 173, 0, 0, 154, |
| 110 |
@@ -199,7 +138,7 @@ |
| 111 |
0, 22, 0, 0, 0, 31, 5, 0, 30, 0, |
| 112 |
0, 33, 0, 23, |
| 113 |
}; |
| 114 |
-short yydgoto[] = { 1, |
| 115 |
+static short yydgoto[] = { 1, |
| 116 |
10, 11, 20, 104, 19, 2, 95, 370, 98, 359, |
| 117 |
3, 12, 13, 70, 375, 285, 72, 73, 74, 75, |
| 118 |
76, 77, 78, 79, 291, 81, 292, 281, 283, 286, |
| 119 |
@@ -207,7 +146,7 @@ |
| 120 |
194, 327, 156, 289, 271, 225, 14, 83, 137, 84, |
| 121 |
85, 86, 87, 15, 16, 17, 18, 93, 278, |
| 122 |
}; |
| 123 |
-short yysindex[] = { 0, |
| 124 |
+static short yysindex[] = { 0, |
| 125 |
0, 0, -132, 0, 0, 0, -51, 0, 0, 0, |
| 126 |
0, 0, 0, 0, 650, 0, 0, 0, -239, -215, |
| 127 |
5, 0, 0, -215, 0, 0, 0, -31, -31, 0, |
| 128 |
@@ -249,7 +188,7 @@ |
| 129 |
449, 0, 2181, -150, 340, 0, 0, 355, 0, 216, |
| 130 |
216, 0, -123, 0, |
| 131 |
}; |
| 132 |
-short yyrindex[] = { 0, |
| 133 |
+static short yyrindex[] = { 0, |
| 134 |
0, 0, 247, 0, 0, 0, 0, 0, 0, 0, |
| 135 |
0, 0, 0, 0, 0, 0, 0, 0, 274, 0, |
| 136 |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 137 |
@@ -291,7 +230,7 @@ |
| 138 |
917, 0, 0, 119, 0, 0, 0, 0, 0, 0, |
| 139 |
0, 0, 179, 0, |
| 140 |
}; |
| 141 |
-short yygindex[] = { 0, |
| 142 |
+static short yygindex[] = { 0, |
| 143 |
0, 0, 196, 425, 0, 0, -2, 0, 37, 634, |
| 144 |
-94, 0, 0, 0, -323, -15, 2445, 0, 999, 414, |
| 145 |
417, 0, 0, 0, 463, -43, 0, 0, 321, -198, |
| 146 |
@@ -300,7 +239,7 @@ |
| 147 |
0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 148 |
}; |
| 149 |
#define YYTABLESIZE 4568 |
| 150 |
-short yytable[] = { 71, |
| 151 |
+static short yytable[] = { 71, |
| 152 |
197, 65, 121, 227, 65, 111, 220, 22, 198, 293, |
| 153 |
139, 296, 315, 275, 305, 102, 273, 88, 113, 228, |
| 154 |
60, 113, 279, 65, 317, 60, 182, 254, 325, 101, |
| 155 |
@@ -759,7 +698,7 @@ |
| 156 |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 157 |
0, 0, 0, 0, 0, 0, 77, 77, |
| 158 |
}; |
| 159 |
-short yycheck[] = { 15, |
| 160 |
+static short yycheck[] = { 15, |
| 161 |
95, 36, 46, 41, 36, 40, 59, 59, 100, 208, |
| 162 |
54, 41, 59, 199, 41, 40, 196, 257, 41, 93, |
| 163 |
123, 44, 202, 36, 93, 59, 40, 40, 59, 29, |
| 164 |
@@ -1224,7 +1163,7 @@ |
| 165 |
#endif |
| 166 |
#define YYMAXTOKEN 317 |
| 167 |
#if YYDEBUG |
| 168 |
-char *yyname[] = { |
| 169 |
+static char *yyname[] = { |
| 170 |
"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, |
| 171 |
"'!'",0,0,"'$'","'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'",0,0,0,0,0,0,0, |
| 172 |
0,0,0,0,0,"':'","';'",0,0,0,"'?'","'@'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
| 173 |
@@ -1241,7 +1180,7 @@ |
| 174 |
"ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP", |
| 175 |
"PREINC","PREDEC","POSTINC","POSTDEC","ARROW", |
| 176 |
}; |
| 177 |
-char *yyrule[] = { |
| 178 |
+static char *yyrule[] = { |
| 179 |
"$accept : prog", |
| 180 |
"prog : progstart lineseq", |
| 181 |
"block : '{' remember lineseq '}'", |
| 182 |
@@ -1456,17 +1395,6 @@ |
| 183 |
#define YYMAXDEPTH 500 |
| 184 |
#endif |
| 185 |
#endif |
| 186 |
-int yydebug; |
| 187 |
-int yynerrs; |
| 188 |
-int yyerrflag; |
| 189 |
-int yychar; |
| 190 |
-short *yyssp; |
| 191 |
-YYSTYPE *yyvsp; |
| 192 |
-YYSTYPE yyval; |
| 193 |
-YYSTYPE yylval; |
| 194 |
-short yyss[YYSTACKSIZE]; |
| 195 |
-YYSTYPE yyvs[YYSTACKSIZE]; |
| 196 |
-#define yystacksize YYSTACKSIZE |
| 197 |
#line 804 "perly.y" |
| 198 |
/* PROGRAM */ |
| 199 |
|
| 200 |
@@ -1477,7 +1405,7 @@ |
| 201 |
#endif |
| 202 |
#define yyparse() Perl_yyparse(pTHX) |
| 203 |
|
| 204 |
-#line 1481 "y.tab.c" |
| 205 |
+#line 1409 "perly.c" |
| 206 |
#define YYABORT goto yyabort |
| 207 |
#define YYACCEPT goto yyaccept |
| 208 |
#define YYERROR goto yyerrlab |
| 209 |
@@ -1485,11 +1413,31 @@ |
| 210 |
yyparse() |
| 211 |
{ |
| 212 |
register int yym, yyn, yystate; |
| 213 |
+ register short *yyssp; |
| 214 |
+ register YYSTYPE *yyvsp; |
| 215 |
+ short* yyss; |
| 216 |
+ YYSTYPE* yyvs; |
| 217 |
+ unsigned yystacksize = YYSTACKSIZE; |
| 218 |
+ int retval = 0; |
| 219 |
#if YYDEBUG |
| 220 |
register char *yys; |
| 221 |
- extern char *getenv(); |
| 222 |
+#endif |
| 223 |
+ |
| 224 |
+ struct ysv *ysave; |
| 225 |
+#ifdef USE_ITHREADS |
| 226 |
+ ENTER; /* force yydestruct() before we return */ |
| 227 |
+#endif |
| 228 |
+ New(73, ysave, 1, struct ysv); |
| 229 |
+ SAVEDESTRUCTOR_X(yydestruct, ysave); |
| 230 |
+ ysave->oldyydebug = yydebug; |
| 231 |
+ ysave->oldyynerrs = yynerrs; |
| 232 |
+ ysave->oldyyerrflag = yyerrflag; |
| 233 |
+ ysave->oldyychar = yychar; |
| 234 |
+ ysave->oldyyval = yyval; |
| 235 |
+ ysave->oldyylval = yylval; |
| 236 |
|
| 237 |
- if (yys = getenv("YYDEBUG")) |
| 238 |
+#if YYDEBUG |
| 239 |
+ if ((yys = getenv("YYDEBUG"))) |
| 240 |
{ |
| 241 |
yyn = *yys; |
| 242 |
if (yyn >= '0' && yyn <= '9') |
| 243 |
@@ -1501,12 +1449,22 @@ |
| 244 |
yyerrflag = 0; |
| 245 |
yychar = (-1); |
| 246 |
|
| 247 |
+ /* |
| 248 |
+ ** Initialize private stacks (yyparse may be called from an action) |
| 249 |
+ */ |
| 250 |
+ New(73, yyss, yystacksize, short); |
| 251 |
+ New(73, yyvs, yystacksize, YYSTYPE); |
| 252 |
+ ysave->yyss = yyss; |
| 253 |
+ ysave->yyvs = yyvs; |
| 254 |
+ if (!yyvs || !yyss) |
| 255 |
+ goto yyoverflow; |
| 256 |
+ |
| 257 |
yyssp = yyss; |
| 258 |
yyvsp = yyvs; |
| 259 |
*yyssp = yystate = 0; |
| 260 |
|
| 261 |
yyloop: |
| 262 |
- if (yyn = yydefred[yystate]) goto yyreduce; |
| 263 |
+ if ((yyn = yydefred[yystate])) goto yyreduce; |
| 264 |
if (yychar < 0) |
| 265 |
{ |
| 266 |
if ((yychar = yylex()) < 0) yychar = 0; |
| 267 |
@@ -1516,7 +1474,7 @@ |
| 268 |
yys = 0; |
| 269 |
if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; |
| 270 |
if (!yys) yys = "illegal-symbol"; |
| 271 |
- printf("yydebug: state %d, reading %d (%s)\n", yystate, |
| 272 |
+ PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", yystate, |
| 273 |
yychar, yys); |
| 274 |
} |
| 275 |
#endif |
| 276 |
@@ -1526,12 +1484,24 @@ |
| 277 |
{ |
| 278 |
#if YYDEBUG |
| 279 |
if (yydebug) |
| 280 |
- printf("yydebug: state %d, shifting to state %d\n", |
| 281 |
+ PerlIO_printf(Perl_debug_log, "yydebug: state %d, shifting to state %d\n", |
| 282 |
yystate, yytable[yyn]); |
| 283 |
#endif |
| 284 |
if (yyssp >= yyss + yystacksize - 1) |
| 285 |
{ |
| 286 |
+ /* |
| 287 |
+ ** reallocate and recover. Note that pointers |
| 288 |
+ ** have to be reset, or bad things will happen |
| 289 |
+ */ |
| 290 |
+ int yyps_index = (yyssp - yyss); |
| 291 |
+ int yypv_index = (yyvsp - yyvs); |
| 292 |
+ yystacksize += YYSTACKSIZE; |
| 293 |
+ ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); |
| 294 |
+ ysave->yyss = Renew(yyss, yystacksize, short); |
| 295 |
+ if (!yyvs || !yyss) |
| 296 |
goto yyoverflow; |
| 297 |
+ yyssp = yyss + yyps_index; |
| 298 |
+ yyvsp = yyvs + yypv_index; |
| 299 |
} |
| 300 |
*++yyssp = yystate = yytable[yyn]; |
| 301 |
*++yyvsp = yylval; |
| 302 |
@@ -1547,14 +1517,14 @@ |
| 303 |
} |
| 304 |
if (yyerrflag) goto yyinrecovery; |
| 305 |
#ifdef lint |
| 306 |
- goto yynewerror; |
| 307 |
+ |
| 308 |
#endif |
| 309 |
-yynewerror: |
| 310 |
+ |
| 311 |
yyerror("syntax error"); |
| 312 |
#ifdef lint |
| 313 |
- goto yyerrlab; |
| 314 |
+ |
| 315 |
#endif |
| 316 |
-yyerrlab: |
| 317 |
+ |
| 318 |
++yynerrs; |
| 319 |
yyinrecovery: |
| 320 |
if (yyerrflag < 3) |
| 321 |
@@ -1567,12 +1537,24 @@ |
| 322 |
{ |
| 323 |
#if YYDEBUG |
| 324 |
if (yydebug) |
| 325 |
- printf("yydebug: state %d, error recovery shifting\ |
| 326 |
+ PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery shifting\ |
| 327 |
to state %d\n", *yyssp, yytable[yyn]); |
| 328 |
#endif |
| 329 |
if (yyssp >= yyss + yystacksize - 1) |
| 330 |
{ |
| 331 |
+ /* |
| 332 |
+ ** reallocate and recover. Note that pointers |
| 333 |
+ ** have to be reset, or bad things will happen |
| 334 |
+ */ |
| 335 |
+ int yyps_index = (yyssp - yyss); |
| 336 |
+ int yypv_index = (yyvsp - yyvs); |
| 337 |
+ yystacksize += YYSTACKSIZE; |
| 338 |
+ ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); |
| 339 |
+ ysave->yyss = Renew(yyss, yystacksize, short); |
| 340 |
+ if (!yyvs || !yyss) |
| 341 |
goto yyoverflow; |
| 342 |
+ yyssp = yyss + yyps_index; |
| 343 |
+ yyvsp = yyvs + yypv_index; |
| 344 |
} |
| 345 |
*++yyssp = yystate = yytable[yyn]; |
| 346 |
*++yyvsp = yylval; |
| 347 |
@@ -1582,7 +1564,7 @@ |
| 348 |
{ |
| 349 |
#if YYDEBUG |
| 350 |
if (yydebug) |
| 351 |
- printf("yydebug: error recovery discarding state %d\n", |
| 352 |
+ PerlIO_printf(Perl_debug_log, "yydebug: error recovery discarding state %d\n", |
| 353 |
*yyssp); |
| 354 |
#endif |
| 355 |
if (yyssp <= yyss) goto yyabort; |
| 356 |
@@ -1600,7 +1582,7 @@ |
| 357 |
yys = 0; |
| 358 |
if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; |
| 359 |
if (!yys) yys = "illegal-symbol"; |
| 360 |
- printf("yydebug: state %d, error recovery discards token %d (%s)\n", |
| 361 |
+ PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery discards token %d (%s)\n", |
| 362 |
yystate, yychar, yys); |
| 363 |
} |
| 364 |
#endif |
| 365 |
@@ -1610,7 +1592,7 @@ |
| 366 |
yyreduce: |
| 367 |
#if YYDEBUG |
| 368 |
if (yydebug) |
| 369 |
- printf("yydebug: state %d, reducing by rule %d (%s)\n", |
| 370 |
+ PerlIO_printf(Perl_debug_log, "yydebug: state %d, reducing by rule %d (%s)\n", |
| 371 |
yystate, yyn, yyrule[yyn]); |
| 372 |
#endif |
| 373 |
yym = yylen[yyn]; |
| 374 |
@@ -2485,7 +2467,7 @@ |
| 375 |
{ |
| 376 |
#if YYDEBUG |
| 377 |
if (yydebug) |
| 378 |
- printf("yydebug: after reduction, shifting from state 0 to\ |
| 379 |
+ PerlIO_printf(Perl_debug_log, "yydebug: after reduction, shifting from state 0 to\ |
| 380 |
state %d\n", YYFINAL); |
| 381 |
#endif |
| 382 |
yystate = YYFINAL; |
| 383 |
@@ -2500,7 +2482,7 @@ |
| 384 |
yys = 0; |
| 385 |
if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; |
| 386 |
if (!yys) yys = "illegal-symbol"; |
| 387 |
- printf("yydebug: state %d, reading %d (%s)\n", |
| 388 |
+ PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", |
| 389 |
YYFINAL, yychar, yys); |
| 390 |
} |
| 391 |
#endif |
| 392 |
@@ -2515,20 +2497,50 @@ |
| 393 |
yystate = yydgoto[yym]; |
| 394 |
#if YYDEBUG |
| 395 |
if (yydebug) |
| 396 |
- printf("yydebug: after reduction, shifting from state %d \ |
| 397 |
+ PerlIO_printf(Perl_debug_log, "yydebug: after reduction, shifting from state %d \ |
| 398 |
to state %d\n", *yyssp, yystate); |
| 399 |
#endif |
| 400 |
if (yyssp >= yyss + yystacksize - 1) |
| 401 |
{ |
| 402 |
+ /* |
| 403 |
+ ** reallocate and recover. Note that pointers |
| 404 |
+ ** have to be reset, or bad things will happen |
| 405 |
+ */ |
| 406 |
+ int yyps_index = (yyssp - yyss); |
| 407 |
+ int yypv_index = (yyvsp - yyvs); |
| 408 |
+ yystacksize += YYSTACKSIZE; |
| 409 |
+ ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); |
| 410 |
+ ysave->yyss = Renew(yyss, yystacksize, short); |
| 411 |
+ if (!yyvs || !yyss) |
| 412 |
goto yyoverflow; |
| 413 |
+ yyssp = yyss + yyps_index; |
| 414 |
+ yyvsp = yyvs + yypv_index; |
| 415 |
} |
| 416 |
*++yyssp = yystate; |
| 417 |
*++yyvsp = yyval; |
| 418 |
goto yyloop; |
| 419 |
yyoverflow: |
| 420 |
- yyerror("yacc stack overflow"); |
| 421 |
+ yyerror("Out of memory for yacc stack"); |
| 422 |
yyabort: |
| 423 |
- return (1); |
| 424 |
+ retval = 1; |
| 425 |
yyaccept: |
| 426 |
- return (0); |
| 427 |
+#ifdef USE_ITHREADS |
| 428 |
+ LEAVE; /* force yydestruct() before we return */ |
| 429 |
+#endif |
| 430 |
+ return retval; |
| 431 |
+} |
| 432 |
+ |
| 433 |
+static void |
| 434 |
+yydestruct(pTHX_ void *ptr) |
| 435 |
+{ |
| 436 |
+ struct ysv* ysave = (struct ysv*)ptr; |
| 437 |
+ if (ysave->yyss) Safefree(ysave->yyss); |
| 438 |
+ if (ysave->yyvs) Safefree(ysave->yyvs); |
| 439 |
+ yydebug = ysave->oldyydebug; |
| 440 |
+ yynerrs = ysave->oldyynerrs; |
| 441 |
+ yyerrflag = ysave->oldyyerrflag; |
| 442 |
+ yychar = ysave->oldyychar; |
| 443 |
+ yyval = ysave->oldyyval; |
| 444 |
+ yylval = ysave->oldyylval; |
| 445 |
+ Safefree(ysave); |
| 446 |
} |