Bump version of PerlIO::via after last change
[p5sagit/p5-mst-13.2.git] / perly.c
CommitLineData
0de566d7 1/* perly.c
2 *
bc641c27 3 * Copyright (c) 2004, 2005, 2006, 2007, by Larry Wall and others
0de566d7 4 *
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
7 *
8 * Note that this file was originally generated as an output from
9 * GNU bison version 1.875, but now the code is statically maintained
f05e27e5 10 * and edited; the bits that are dependent on perly.y are now
11 * #included from the files perly.tab and perly.act.
0de566d7 12 *
13 * Here is an important copyright statement from the original, generated
14 * file:
15 *
16 * As a special exception, when this file is copied by Bison into a
17 * Bison output file, you may use that output file without
18 * restriction. This special exception was added by the Free
19 * Software Foundation in version 1.24 of Bison.
bc463c31 20 *
21 * Note that this file is also #included in madly.c, to allow compilation
22 * of a second parser, Perl_madparse, that is identical to Perl_yyparse,
f05e27e5 23 * but which includes extra code for dumping the parse tree.
24 * This is controlled by the PERL_IN_MADLY_C define.
0de566d7 25 */
26
79072805 27#include "EXTERN.h"
864dbfa3 28#define PERL_IN_PERLY_C
79072805 29#include "perl.h"
09bef843 30
3797f23d 31typedef unsigned char yytype_uint8;
32typedef signed char yytype_int8;
33typedef unsigned short int yytype_uint16;
34typedef short int yytype_int16;
0de566d7 35typedef signed char yysigned_char;
36
37#ifdef DEBUGGING
38# define YYDEBUG 1
93a17b20 39#else
0de566d7 40# define YYDEBUG 0
93a17b20 41#endif
09bef843 42
f05e27e5 43/* contains all the parser state tables; auto-generated from perly.y */
44#include "perly.tab"
0de566d7 45
46# define YYSIZE_T size_t
47
0de566d7 48#define YYEOF 0
07a06489 49#define YYTERROR 1
0de566d7 50
51#define YYACCEPT goto yyacceptlab
52#define YYABORT goto yyabortlab
53#define YYERROR goto yyerrlab1
54
0de566d7 55/* Enable debugging if requested. */
9388183f 56#ifdef DEBUGGING
0de566d7 57
58# define yydebug (DEBUG_p_TEST)
59
60# define YYFPRINTF PerlIO_printf
61
62# define YYDPRINTF(Args) \
63do { \
64 if (yydebug) \
65 YYFPRINTF Args; \
66} while (0)
67
9388183f 68# define YYDSYMPRINTF(Title, Token, Value) \
0de566d7 69do { \
70 if (yydebug) { \
71 YYFPRINTF (Perl_debug_log, "%s ", Title); \
356f4fed 72 yysymprint (aTHX_ Perl_debug_log, Token, Value); \
0de566d7 73 YYFPRINTF (Perl_debug_log, "\n"); \
74 } \
75} while (0)
76
77/*--------------------------------.
78| Print this symbol on YYOUTPUT. |
79`--------------------------------*/
80
81static void
356f4fed 82yysymprint(pTHX_ PerlIO * const yyoutput, int yytype, const YYSTYPE * const yyvaluep)
0de566d7 83{
0de566d7 84 if (yytype < YYNTOKENS) {
85 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
86# ifdef YYPRINT
87 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
9388183f 88# else
e4584336 89 YYFPRINTF (yyoutput, "0x%"UVxf, (UV)yyvaluep->ival);
0de566d7 90# endif
91 }
92 else
93 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
94
0de566d7 95 YYFPRINTF (yyoutput, ")");
96}
97
98
9388183f 99/* yy_stack_print()
1654d593 100 * print the top 8 items on the parse stack.
101 */
0de566d7 102
103static void
1654d593 104yy_stack_print (pTHX_ const yy_parser *parser)
0de566d7 105{
1654d593 106 const yy_stack_frame *ps, *min;
9388183f 107
2d29f438 108 min = parser->ps - 8 + 1;
22735491 109 if (min <= parser->stack)
110 min = parser->stack + 1;
9388183f 111
112 PerlIO_printf(Perl_debug_log, "\nindex:");
1654d593 113 for (ps = min; ps <= parser->ps; ps++)
22735491 114 PerlIO_printf(Perl_debug_log, " %8d", ps - parser->stack);
1654d593 115
9388183f 116 PerlIO_printf(Perl_debug_log, "\nstate:");
1654d593 117 for (ps = min; ps <= parser->ps; ps++)
118 PerlIO_printf(Perl_debug_log, " %8d", ps->state);
119
9388183f 120 PerlIO_printf(Perl_debug_log, "\ntoken:");
1654d593 121 for (ps = min; ps <= parser->ps; ps++)
122 PerlIO_printf(Perl_debug_log, " %8.8s", ps->name);
123
9388183f 124 PerlIO_printf(Perl_debug_log, "\nvalue:");
1654d593 125 for (ps = min; ps <= parser->ps; ps++) {
126 switch (yy_type_tab[yystos[ps->state]]) {
d5c6462e 127 case toketype_opval:
21612876 128 PerlIO_printf(Perl_debug_log, " %8.8s",
1654d593 129 ps->val.opval
130 ? PL_op_name[ps->val.opval->op_type]
670f3923 131 : "(Nullop)"
21612876 132 );
d5c6462e 133 break;
134#ifndef PERL_IN_MADLY_C
135 case toketype_p_tkval:
136 PerlIO_printf(Perl_debug_log, " %8.8s",
1654d593 137 ps->val.pval ? ps->val.pval : "(NULL)");
d5c6462e 138 break;
139
140 case toketype_i_tkval:
141#endif
142 case toketype_ival:
1654d593 143 PerlIO_printf(Perl_debug_log, " %8"IVdf, (IV)ps->val.ival);
d5c6462e 144 break;
145 default:
1654d593 146 PerlIO_printf(Perl_debug_log, " %8"UVxf, (UV)ps->val.ival);
d5c6462e 147 }
21612876 148 }
9388183f 149 PerlIO_printf(Perl_debug_log, "\n\n");
0de566d7 150}
151
1654d593 152# define YY_STACK_PRINT(parser) \
153do { \
154 if (yydebug && DEBUG_v_TEST) \
155 yy_stack_print (aTHX_ parser); \
0de566d7 156} while (0)
157
09bef843 158
0de566d7 159/*------------------------------------------------.
160| Report that the YYRULE is going to be reduced. |
161`------------------------------------------------*/
162
163static void
164yy_reduce_print (pTHX_ int yyrule)
165{
166 int yyi;
df35152e 167 const unsigned int yylineno = yyrline[yyrule];
0de566d7 168 YYFPRINTF (Perl_debug_log, "Reducing stack by rule %d (line %u), ",
169 yyrule - 1, yylineno);
170 /* Print the symbols being reduced, and their result. */
171 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
172 YYFPRINTF (Perl_debug_log, "%s ", yytname [yyrhs[yyi]]);
173 YYFPRINTF (Perl_debug_log, "-> %s\n", yytname [yyr1[yyrule]]);
174}
175
176# define YY_REDUCE_PRINT(Rule) \
177do { \
178 if (yydebug) \
179 yy_reduce_print (aTHX_ Rule); \
180} while (0)
181
182#else /* !DEBUGGING */
183# define YYDPRINTF(Args)
9388183f 184# define YYDSYMPRINTF(Title, Token, Value)
1654d593 185# define YY_STACK_PRINT(parser)
0de566d7 186# define YY_REDUCE_PRINT(Rule)
187#endif /* !DEBUGGING */
188
718a7425 189/* called during cleanup (via SAVEDESTRUCTOR_X) to free any items on the
190 * parse stack, thus avoiding leaks if we die */
191
192static void
22735491 193S_clear_yystack(pTHX_ const yy_parser *parser)
718a7425 194{
1654d593 195 yy_stack_frame *ps = parser->ps;
670f3923 196 int i;
718a7425 197
199e78b7 198 if (!parser->stack || ps == parser->stack)
718a7425 199 return;
1654d593 200
718a7425 201 YYDPRINTF ((Perl_debug_log, "clearing the parse stack\n"));
670f3923 202
7e5d8ed2 203 /* Freeing ops on the stack, and the op_latefree / op_latefreed /
204 * op_attached flags:
670f3923 205 *
206 * When we pop tokens off the stack during error recovery, or when
207 * we pop all the tokens off the stack after a die during a shift or
7e5d8ed2 208 * reduce (i.e. Perl_croak somewhere in yylex() or in one of the
209 * newFOO() functions), then it's possible that some of these tokens are
670f3923 210 * of type opval, pointing to an OP. All these ops are orphans; each is
211 * its own miniature subtree that has not yet been attached to a
7e5d8ed2 212 * larger tree. In this case, we should clearly free the op (making
213 * sure, for each op we free that we have PL_comppad pointing to the
670f3923 214 * right place for freeing any SVs attached to the op in threaded
215 * builds.
216 *
7e5d8ed2 217 * However, there is a particular problem if we die in newFOO() called
670f3923 218 * by a reducing action; e.g.
219 *
220 * foo : bar baz boz
221 * { $$ = newFOO($1,$2,$3) }
222 *
223 * where
7e5d8ed2 224 * OP *newFOO { ....; if (...) croak; .... }
670f3923 225 *
226 * In this case, when we come to clean bar baz and boz off the stack,
227 * we don't know whether newFOO() has already:
228 * * freed them
7e5d8ed2 229 * * left them as is
670f3923 230 * * attached them to part of a larger tree
7e5d8ed2 231 * * attached them to PL_compcv
232 * * attached them to PL_compcv then freed it (as in BEGIN {die } )
670f3923 233 *
234 * To get round this problem, we set the flag op_latefree on every op
235 * that gets pushed onto the parser stack. If op_free() sees this
236 * flag, it clears the op and frees any children,, but *doesn't* free
237 * the op itself; instead it sets the op_latefreed flag. This means
238 * that we can safely call op_free() multiple times on each stack op.
239 * So, when clearing the stack, we first, for each op that was being
240 * reduced, call op_free with op_latefree=1. This ensures that all ops
241 * hanging off these op are freed, but the reducing ops themselces are
242 * just undefed. Then we set op_latefreed=0 on *all* ops on the stack
7e5d8ed2 243 * and free them. A little thought should convince you that this
244 * two-part approach to the reducing ops should handle the first three
245 * cases above safely.
246 *
247 * In the case of attaching to PL_compcv (currently just newATTRSUB
248 * does this), then we set the op_attached flag on the op that has
249 * been so attached, then avoid doing the final op_free during
250 * cleanup, on the assumption that it will happen (or has already
251 * happened) when PL_compcv is freed.
252 *
253 * Note this is fairly fragile mechanism. A more robust approach
254 * would be to use two of these flag bits as 2-bit reference count
255 * field for each op, indicating whether it is pointed to from:
256 * * a parent op
257 * * the parser stack
258 * * a CV
259 * but this would involve reworking all code (core and external) that
260 * manipulate op trees.
670f3923 261 */
262
7e5d8ed2 263 /* clear any reducing ops (1st pass) */
670f3923 264
5912531f 265 for (i=0; i< parser->yylen; i++) {
1654d593 266 if (yy_type_tab[yystos[ps[-i].state]] == toketype_opval
267 && ps[-i].val.opval) {
7e5d8ed2 268 if ( ! (ps[-i].val.opval->op_attached
269 && !ps[-i].val.opval->op_latefreed))
270 {
271 if (ps[-i].comppad != PL_comppad) {
272 PAD_RESTORE_LOCAL(ps[-i].comppad);
273 }
274 op_free(ps[-i].val.opval);
670f3923 275 }
670f3923 276 }
277 }
278
279 /* now free whole the stack, including the just-reduced ops */
280
22735491 281 while (ps > parser->stack) {
1654d593 282 if (yy_type_tab[yystos[ps->state]] == toketype_opval
283 && ps->val.opval)
670f3923 284 {
1654d593 285 if (ps->comppad != PL_comppad) {
286 PAD_RESTORE_LOCAL(ps->comppad);
718a7425 287 }
288 YYDPRINTF ((Perl_debug_log, "(freeing op)\n"));
1654d593 289 ps->val.opval->op_latefree = 0;
7e5d8ed2 290 if (!(ps->val.opval->op_attached && !ps->val.opval->op_latefreed))
291 op_free(ps->val.opval);
718a7425 292 }
1654d593 293 ps--;
718a7425 294 }
295}
296
22735491 297/* delete a parser object */
298
93c535ac 299#ifndef PERL_IN_MADLY_C
acdf0a21 300void
301Perl_parser_free(pTHX_ const yy_parser *parser)
22735491 302{
303 S_clear_yystack(aTHX_ parser);
304 Safefree(parser->stack);
7d84b8ac 305 Safefree(parser->lex_brackstack);
306 Safefree(parser->lex_casestack);
22735491 307 PL_parser = parser->old_parser;
7d84b8ac 308 Safefree(parser);
22735491 309}
93c535ac 310#endif
718a7425 311
0de566d7 312/*----------.
313| yyparse. |
314`----------*/
315
79072805 316int
bc463c31 317#ifdef PERL_IN_MADLY_C
318Perl_madparse (pTHX)
319#else
0de566d7 320Perl_yyparse (pTHX)
bc463c31 321#endif
79072805 322{
97aff369 323 dVAR;
0de566d7 324 register int yystate;
325 register int yyn;
326 int yyresult;
327
0de566d7 328 /* Lookahead token as an internal (translated) token number. */
714c8e96 329 int yytoken = 0;
0de566d7 330
5912531f 331 register yy_parser *parser; /* the parser object */
1654d593 332 register yy_stack_frame *ps; /* current parser stack frame */
a0d0e21e 333
1654d593 334#define YYPOPSTACK parser->ps = --ps
335#define YYPUSHSTACK parser->ps = ++ps
0de566d7 336
acdf0a21 337 /* The variable used to return semantic value and location from the
5912531f 338 action routines: ie $$. */
0de566d7 339 YYSTYPE yyval;
340
bc463c31 341#ifndef PERL_IN_MADLY_C
342# ifdef PERL_MAD
00e74f14 343 if (PL_madskills)
344 return madparse();
bc463c31 345# endif
81d86705 346#endif
347
0de566d7 348 YYDPRINTF ((Perl_debug_log, "Starting parse\n"));
349
acdf0a21 350 parser = PL_parser;
351 ps = parser->ps;
1654d593 352
22735491 353 ENTER; /* force parser free before we return */
7c197c94 354 SAVEPARSER(parser);
0de566d7 355
0de566d7 356/*------------------------------------------------------------.
357| yynewstate -- Push a new state, which is found in yystate. |
358`------------------------------------------------------------*/
359 yynewstate:
0de566d7 360
1654d593 361 yystate = ps->state;
05a03161 362
670f3923 363 YYDPRINTF ((Perl_debug_log, "Entering state %d\n", yystate));
0de566d7 364
1654d593 365 if (yy_type_tab[yystos[yystate]] == toketype_opval && ps->val.opval) {
366 ps->val.opval->op_latefree = 1;
367 ps->val.opval->op_latefreed = 0;
670f3923 368 }
369
5912531f 370 parser->yylen = 0;
0de566d7 371
1654d593 372 {
22735491 373 size_t size = ps - parser->stack + 1;
0de566d7 374
1654d593 375 /* grow the stack? We always leave 1 spare slot,
376 * in case of a '' -> 'foo' reduction */
0de566d7 377
85c508c3 378 if (size >= (size_t)parser->stack_size - 1) {
1654d593 379 /* this will croak on insufficient memory */
380 parser->stack_size *= 2;
22735491 381 Renew(parser->stack, parser->stack_size, yy_stack_frame);
382 ps = parser->ps = parser->stack + size -1;
670f3923 383
1654d593 384 YYDPRINTF((Perl_debug_log,
385 "parser stack size increased to %lu frames\n",
386 (unsigned long int)parser->stack_size));
387 }
93a17b20 388 }
0de566d7 389
0de566d7 390/* Do appropriate processing given the current state. */
391/* Read a lookahead token if we need one and don't already have one. */
0de566d7 392
393 /* First try to decide what to do without reference to lookahead token. */
394
395 yyn = yypact[yystate];
396 if (yyn == YYPACT_NINF)
397 goto yydefault;
398
399 /* Not known => get a lookahead token if don't already have one. */
400
401 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
5912531f 402 if (parser->yychar == YYEMPTY) {
0de566d7 403 YYDPRINTF ((Perl_debug_log, "Reading a token: "));
f05e27e5 404#ifdef PERL_IN_MADLY_C
5912531f 405 parser->yychar = PL_madskills ? madlex() : yylex();
f05e27e5 406#else
5912531f 407 parser->yychar = yylex();
81d86705 408#endif
bc463c31 409
12fbd33b 410# ifdef EBCDIC
5912531f 411 if (parser->yychar >= 0 && parser->yychar < 255) {
412 parser->yychar = NATIVE_TO_ASCII(parser->yychar);
12fbd33b 413 }
414# endif
0de566d7 415 }
416
5912531f 417 if (parser->yychar <= YYEOF) {
418 parser->yychar = yytoken = YYEOF;
0de566d7 419 YYDPRINTF ((Perl_debug_log, "Now at end of input.\n"));
93a17b20 420 }
0de566d7 421 else {
5912531f 422 yytoken = YYTRANSLATE (parser->yychar);
423 YYDSYMPRINTF ("Next token is", yytoken, &parser->yylval);
93a17b20 424 }
771df094 425
0de566d7 426 /* If the proper action on seeing token YYTOKEN is to reduce or to
427 detect an error, take that action. */
428 yyn += yytoken;
429 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
430 goto yydefault;
431 yyn = yytable[yyn];
432 if (yyn <= 0) {
433 if (yyn == 0 || yyn == YYTABLE_NINF)
434 goto yyerrlab;
435 yyn = -yyn;
436 goto yyreduce;
437 }
7b57b0ea 438
0de566d7 439 if (yyn == YYFINAL)
440 YYACCEPT;
771df094 441
0de566d7 442 /* Shift the lookahead token. */
443 YYDPRINTF ((Perl_debug_log, "Shifting token %s, ", yytname[yytoken]));
444
445 /* Discard the token being shifted unless it is eof. */
5912531f 446 if (parser->yychar != YYEOF)
447 parser->yychar = YYEMPTY;
0de566d7 448
1654d593 449 YYPUSHSTACK;
450 ps->state = yyn;
5912531f 451 ps->val = parser->yylval;
1654d593 452 ps->comppad = PL_comppad;
9388183f 453#ifdef DEBUGGING
1654d593 454 ps->name = (const char *)(yytname[yytoken]);
9388183f 455#endif
0de566d7 456
0de566d7 457 /* Count tokens shifted since error; after three, turn off error
458 status. */
5912531f 459 if (parser->yyerrstatus)
460 parser->yyerrstatus--;
0de566d7 461
0de566d7 462 goto yynewstate;
463
464
465 /*-----------------------------------------------------------.
466 | yydefault -- do the default action for the current state. |
467 `-----------------------------------------------------------*/
468 yydefault:
469 yyn = yydefact[yystate];
470 if (yyn == 0)
471 goto yyerrlab;
472 goto yyreduce;
473
474
475 /*-----------------------------.
476 | yyreduce -- Do a reduction. |
477 `-----------------------------*/
478 yyreduce:
479 /* yyn is the number of a rule to reduce with. */
5912531f 480 parser->yylen = yyr2[yyn];
0de566d7 481
482 /* If YYLEN is nonzero, implement the default value of the action:
a0288114 483 "$$ = $1".
0de566d7 484
485 Otherwise, the following line sets YYVAL to garbage.
486 This behavior is undocumented and Bison
487 users should not rely upon it. Assigning to YYVAL
488 unconditionally makes the parser a bit smaller, and it avoids a
489 GCC warning that YYVAL may be used uninitialized. */
5912531f 490 yyval = ps[1-parser->yylen].val;
0de566d7 491
1654d593 492 YY_STACK_PRINT(parser);
0de566d7 493 YY_REDUCE_PRINT (yyn);
718a7425 494
0de566d7 495 switch (yyn) {
496
0de566d7 497
498#define dep() deprecate("\"do\" to call subroutines")
f05e27e5 499
bc463c31 500#ifdef PERL_IN_MADLY_C
f05e27e5 501# define IVAL(i) (i)->tk_lval.ival
502# define PVAL(p) (p)->tk_lval.pval
503# define TOKEN_GETMAD(a,b,c) token_getmad((a),(b),(c))
504# define TOKEN_FREE(a) token_free(a)
505# define OP_GETMAD(a,b,c) op_getmad((a),(b),(c))
506# define IF_MAD(a,b) (a)
507# define DO_MAD(a) a
508# define MAD
bc463c31 509#else
f05e27e5 510# define IVAL(i) (i)
511# define PVAL(p) (p)
512# define TOKEN_GETMAD(a,b,c)
513# define TOKEN_FREE(a)
514# define OP_GETMAD(a,b,c)
515# define IF_MAD(a,b) (b)
516# define DO_MAD(a)
517# undef MAD
bc463c31 518#endif
7b57b0ea 519
f05e27e5 520/* contains all the rule actions; auto-generated from perly.y */
521#include "perly.act"
522
93a17b20 523 }
0de566d7 524
670f3923 525 /* any just-reduced ops with the op_latefreed flag cleared need to be
526 * freed; the rest need the flag resetting */
527 {
528 int i;
5912531f 529 for (i=0; i< parser->yylen; i++) {
1654d593 530 if (yy_type_tab[yystos[ps[-i].state]] == toketype_opval
531 && ps[-i].val.opval)
670f3923 532 {
1654d593 533 ps[-i].val.opval->op_latefree = 0;
534 if (ps[-i].val.opval->op_latefreed)
535 op_free(ps[-i].val.opval);
670f3923 536 }
537 }
538 }
539
5912531f 540 parser->ps = ps -= (parser->yylen-1);
0de566d7 541
05a03161 542 /* Now shift the result of the reduction. Determine what state
543 that goes to, based on the state we popped back to and the rule
544 number reduced by. */
545
1654d593 546 ps->val = yyval;
547 ps->comppad = PL_comppad;
9388183f 548#ifdef DEBUGGING
1654d593 549 ps->name = (const char *)(yytname [yyr1[yyn]]);
9388183f 550#endif
0de566d7 551
552 yyn = yyr1[yyn];
553
1654d593 554 yystate = yypgoto[yyn - YYNTOKENS] + ps[-1].state;
555 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == ps[-1].state)
0de566d7 556 yystate = yytable[yystate];
93a17b20 557 else
0de566d7 558 yystate = yydefgoto[yyn - YYNTOKENS];
1654d593 559 ps->state = yystate;
05a03161 560
0de566d7 561 goto yynewstate;
562
563
564 /*------------------------------------.
565 | yyerrlab -- here on detecting error |
566 `------------------------------------*/
567 yyerrlab:
568 /* If not already recovering from an error, report this error. */
5912531f 569 if (!parser->yyerrstatus) {
07a06489 570 yyerror ("syntax error");
93a17b20 571 }
0de566d7 572
573
5912531f 574 if (parser->yyerrstatus == 3) {
0de566d7 575 /* If just tried and failed to reuse lookahead token after an
576 error, discard it. */
577
578 /* Return failure if at end of input. */
5912531f 579 if (parser->yychar == YYEOF) {
0de566d7 580 /* Pop the error token. */
581 YYPOPSTACK;
582 /* Pop the rest of the stack. */
22735491 583 while (ps > parser->stack) {
1654d593 584 YYDSYMPRINTF ("Error: popping", yystos[ps->state], &ps->val);
585 if (yy_type_tab[yystos[ps->state]] == toketype_opval
586 && ps->val.opval)
670f3923 587 {
0539ab63 588 YYDPRINTF ((Perl_debug_log, "(freeing op)\n"));
1654d593 589 if (ps->comppad != PL_comppad) {
590 PAD_RESTORE_LOCAL(ps->comppad);
718a7425 591 }
1654d593 592 ps->val.opval->op_latefree = 0;
593 op_free(ps->val.opval);
0539ab63 594 }
0de566d7 595 YYPOPSTACK;
596 }
597 YYABORT;
598 }
599
5912531f 600 YYDSYMPRINTF ("Error: discarding", yytoken, &parser->yylval);
601 parser->yychar = YYEMPTY;
0de566d7 602
93a17b20 603 }
0de566d7 604
605 /* Else will try to reuse lookahead token after shifting the error
606 token. */
607 goto yyerrlab1;
608
609
610 /*----------------------------------------------------.
611 | yyerrlab1 -- error raised explicitly by an action. |
612 `----------------------------------------------------*/
613 yyerrlab1:
5912531f 614 parser->yyerrstatus = 3; /* Each real token shifted decrements this. */
0de566d7 615
616 for (;;) {
617 yyn = yypact[yystate];
618 if (yyn != YYPACT_NINF) {
619 yyn += YYTERROR;
620 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) {
621 yyn = yytable[yyn];
622 if (0 < yyn)
623 break;
624 }
625 }
626
627 /* Pop the current state because it cannot handle the error token. */
22735491 628 if (ps == parser->stack)
0de566d7 629 YYABORT;
630
1654d593 631 YYDSYMPRINTF ("Error: popping", yystos[ps->state], &ps->val);
632 if (yy_type_tab[yystos[ps->state]] == toketype_opval && ps->val.opval) {
0539ab63 633 YYDPRINTF ((Perl_debug_log, "(freeing op)\n"));
1654d593 634 if (ps->comppad != PL_comppad) {
635 PAD_RESTORE_LOCAL(ps->comppad);
718a7425 636 }
1654d593 637 ps->val.opval->op_latefree = 0;
638 op_free(ps->val.opval);
0539ab63 639 }
1654d593 640 YYPOPSTACK;
641 yystate = ps->state;
0de566d7 642
1654d593 643 YY_STACK_PRINT(parser);
93a17b20 644 }
0de566d7 645
646 if (yyn == YYFINAL)
647 YYACCEPT;
648
649 YYDPRINTF ((Perl_debug_log, "Shifting error token, "));
650
1654d593 651 YYPUSHSTACK;
652 ps->state = yyn;
5912531f 653 ps->val = parser->yylval;
1654d593 654 ps->comppad = PL_comppad;
9388183f 655#ifdef DEBUGGING
1654d593 656 ps->name ="<err>";
9388183f 657#endif
0de566d7 658
0de566d7 659 goto yynewstate;
660
661
662 /*-------------------------------------.
663 | yyacceptlab -- YYACCEPT comes here. |
664 `-------------------------------------*/
665 yyacceptlab:
666 yyresult = 0;
22735491 667 parser->ps = parser->stack; /* disable cleanup */
0de566d7 668 goto yyreturn;
669
670 /*-----------------------------------.
671 | yyabortlab -- YYABORT comes here. |
672 `-----------------------------------*/
673 yyabortlab:
674 yyresult = 1;
675 goto yyreturn;
676
0de566d7 677 yyreturn:
22735491 678 LEAVE; /* force parser free before we return */
0de566d7 679 return yyresult;
e1f15930 680}
66610fdd 681
682/*
683 * Local variables:
684 * c-indentation-style: bsd
685 * c-basic-offset: 4
686 * indent-tabs-mode: t
687 * End:
688 *
37442d52 689 * ex: set ts=8 sts=4 sw=4 noet:
690 */