move easy lexer state variables into PL_parser
[p5sagit/p5-mst-13.2.git] / perly.c
CommitLineData
0de566d7 1/* perly.c
2 *
54ca4ee7 3 * Copyright (c) 2004, 2005, 2006 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
acdf0a21 299void
300Perl_parser_free(pTHX_ const yy_parser *parser)
22735491 301{
302 S_clear_yystack(aTHX_ parser);
303 Safefree(parser->stack);
304 PL_parser = parser->old_parser;
305}
718a7425 306
307
0de566d7 308/*----------.
309| yyparse. |
310`----------*/
311
79072805 312int
bc463c31 313#ifdef PERL_IN_MADLY_C
314Perl_madparse (pTHX)
315#else
0de566d7 316Perl_yyparse (pTHX)
bc463c31 317#endif
79072805 318{
97aff369 319 dVAR;
0de566d7 320 register int yystate;
321 register int yyn;
322 int yyresult;
323
0de566d7 324 /* Lookahead token as an internal (translated) token number. */
714c8e96 325 int yytoken = 0;
0de566d7 326
5912531f 327 register yy_parser *parser; /* the parser object */
1654d593 328 register yy_stack_frame *ps; /* current parser stack frame */
a0d0e21e 329
1654d593 330#define YYPOPSTACK parser->ps = --ps
331#define YYPUSHSTACK parser->ps = ++ps
0de566d7 332
acdf0a21 333 /* The variable used to return semantic value and location from the
5912531f 334 action routines: ie $$. */
0de566d7 335 YYSTYPE yyval;
336
bc463c31 337#ifndef PERL_IN_MADLY_C
338# ifdef PERL_MAD
00e74f14 339 if (PL_madskills)
340 return madparse();
bc463c31 341# endif
81d86705 342#endif
343
0de566d7 344 YYDPRINTF ((Perl_debug_log, "Starting parse\n"));
345
acdf0a21 346 parser = PL_parser;
347 ps = parser->ps;
1654d593 348
22735491 349 ENTER; /* force parser free before we return */
acdf0a21 350 SAVEDESTRUCTOR_X(Perl_parser_free, (void*) parser);
0de566d7 351
0de566d7 352/*------------------------------------------------------------.
353| yynewstate -- Push a new state, which is found in yystate. |
354`------------------------------------------------------------*/
355 yynewstate:
0de566d7 356
1654d593 357 yystate = ps->state;
05a03161 358
670f3923 359 YYDPRINTF ((Perl_debug_log, "Entering state %d\n", yystate));
0de566d7 360
1654d593 361 if (yy_type_tab[yystos[yystate]] == toketype_opval && ps->val.opval) {
362 ps->val.opval->op_latefree = 1;
363 ps->val.opval->op_latefreed = 0;
670f3923 364 }
365
5912531f 366 parser->yylen = 0;
0de566d7 367
1654d593 368 {
22735491 369 size_t size = ps - parser->stack + 1;
0de566d7 370
1654d593 371 /* grow the stack? We always leave 1 spare slot,
372 * in case of a '' -> 'foo' reduction */
0de566d7 373
1654d593 374 if (size >= parser->stack_size - 1) {
375 /* this will croak on insufficient memory */
376 parser->stack_size *= 2;
22735491 377 Renew(parser->stack, parser->stack_size, yy_stack_frame);
378 ps = parser->ps = parser->stack + size -1;
670f3923 379
1654d593 380 YYDPRINTF((Perl_debug_log,
381 "parser stack size increased to %lu frames\n",
382 (unsigned long int)parser->stack_size));
383 }
93a17b20 384 }
0de566d7 385
0de566d7 386/* Do appropriate processing given the current state. */
387/* Read a lookahead token if we need one and don't already have one. */
0de566d7 388
389 /* First try to decide what to do without reference to lookahead token. */
390
391 yyn = yypact[yystate];
392 if (yyn == YYPACT_NINF)
393 goto yydefault;
394
395 /* Not known => get a lookahead token if don't already have one. */
396
397 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
5912531f 398 if (parser->yychar == YYEMPTY) {
0de566d7 399 YYDPRINTF ((Perl_debug_log, "Reading a token: "));
f05e27e5 400#ifdef PERL_IN_MADLY_C
5912531f 401 parser->yychar = PL_madskills ? madlex() : yylex();
f05e27e5 402#else
5912531f 403 parser->yychar = yylex();
81d86705 404#endif
bc463c31 405
12fbd33b 406# ifdef EBCDIC
5912531f 407 if (parser->yychar >= 0 && parser->yychar < 255) {
408 parser->yychar = NATIVE_TO_ASCII(parser->yychar);
12fbd33b 409 }
410# endif
0de566d7 411 }
412
5912531f 413 if (parser->yychar <= YYEOF) {
414 parser->yychar = yytoken = YYEOF;
0de566d7 415 YYDPRINTF ((Perl_debug_log, "Now at end of input.\n"));
93a17b20 416 }
0de566d7 417 else {
5912531f 418 yytoken = YYTRANSLATE (parser->yychar);
419 YYDSYMPRINTF ("Next token is", yytoken, &parser->yylval);
93a17b20 420 }
771df094 421
0de566d7 422 /* If the proper action on seeing token YYTOKEN is to reduce or to
423 detect an error, take that action. */
424 yyn += yytoken;
425 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
426 goto yydefault;
427 yyn = yytable[yyn];
428 if (yyn <= 0) {
429 if (yyn == 0 || yyn == YYTABLE_NINF)
430 goto yyerrlab;
431 yyn = -yyn;
432 goto yyreduce;
433 }
7b57b0ea 434
0de566d7 435 if (yyn == YYFINAL)
436 YYACCEPT;
771df094 437
0de566d7 438 /* Shift the lookahead token. */
439 YYDPRINTF ((Perl_debug_log, "Shifting token %s, ", yytname[yytoken]));
440
441 /* Discard the token being shifted unless it is eof. */
5912531f 442 if (parser->yychar != YYEOF)
443 parser->yychar = YYEMPTY;
0de566d7 444
1654d593 445 YYPUSHSTACK;
446 ps->state = yyn;
5912531f 447 ps->val = parser->yylval;
1654d593 448 ps->comppad = PL_comppad;
9388183f 449#ifdef DEBUGGING
1654d593 450 ps->name = (const char *)(yytname[yytoken]);
9388183f 451#endif
0de566d7 452
0de566d7 453 /* Count tokens shifted since error; after three, turn off error
454 status. */
5912531f 455 if (parser->yyerrstatus)
456 parser->yyerrstatus--;
0de566d7 457
0de566d7 458 goto yynewstate;
459
460
461 /*-----------------------------------------------------------.
462 | yydefault -- do the default action for the current state. |
463 `-----------------------------------------------------------*/
464 yydefault:
465 yyn = yydefact[yystate];
466 if (yyn == 0)
467 goto yyerrlab;
468 goto yyreduce;
469
470
471 /*-----------------------------.
472 | yyreduce -- Do a reduction. |
473 `-----------------------------*/
474 yyreduce:
475 /* yyn is the number of a rule to reduce with. */
5912531f 476 parser->yylen = yyr2[yyn];
0de566d7 477
478 /* If YYLEN is nonzero, implement the default value of the action:
a0288114 479 "$$ = $1".
0de566d7 480
481 Otherwise, the following line sets YYVAL to garbage.
482 This behavior is undocumented and Bison
483 users should not rely upon it. Assigning to YYVAL
484 unconditionally makes the parser a bit smaller, and it avoids a
485 GCC warning that YYVAL may be used uninitialized. */
5912531f 486 yyval = ps[1-parser->yylen].val;
0de566d7 487
1654d593 488 YY_STACK_PRINT(parser);
0de566d7 489 YY_REDUCE_PRINT (yyn);
718a7425 490
0de566d7 491 switch (yyn) {
492
0de566d7 493
494#define dep() deprecate("\"do\" to call subroutines")
f05e27e5 495
bc463c31 496#ifdef PERL_IN_MADLY_C
f05e27e5 497# define IVAL(i) (i)->tk_lval.ival
498# define PVAL(p) (p)->tk_lval.pval
499# define TOKEN_GETMAD(a,b,c) token_getmad((a),(b),(c))
500# define TOKEN_FREE(a) token_free(a)
501# define OP_GETMAD(a,b,c) op_getmad((a),(b),(c))
502# define IF_MAD(a,b) (a)
503# define DO_MAD(a) a
504# define MAD
bc463c31 505#else
f05e27e5 506# define IVAL(i) (i)
507# define PVAL(p) (p)
508# define TOKEN_GETMAD(a,b,c)
509# define TOKEN_FREE(a)
510# define OP_GETMAD(a,b,c)
511# define IF_MAD(a,b) (b)
512# define DO_MAD(a)
513# undef MAD
bc463c31 514#endif
7b57b0ea 515
f05e27e5 516/* contains all the rule actions; auto-generated from perly.y */
517#include "perly.act"
518
93a17b20 519 }
0de566d7 520
670f3923 521 /* any just-reduced ops with the op_latefreed flag cleared need to be
522 * freed; the rest need the flag resetting */
523 {
524 int i;
5912531f 525 for (i=0; i< parser->yylen; i++) {
1654d593 526 if (yy_type_tab[yystos[ps[-i].state]] == toketype_opval
527 && ps[-i].val.opval)
670f3923 528 {
1654d593 529 ps[-i].val.opval->op_latefree = 0;
530 if (ps[-i].val.opval->op_latefreed)
531 op_free(ps[-i].val.opval);
670f3923 532 }
533 }
534 }
535
5912531f 536 parser->ps = ps -= (parser->yylen-1);
0de566d7 537
05a03161 538 /* Now shift the result of the reduction. Determine what state
539 that goes to, based on the state we popped back to and the rule
540 number reduced by. */
541
1654d593 542 ps->val = yyval;
543 ps->comppad = PL_comppad;
9388183f 544#ifdef DEBUGGING
1654d593 545 ps->name = (const char *)(yytname [yyr1[yyn]]);
9388183f 546#endif
0de566d7 547
548 yyn = yyr1[yyn];
549
1654d593 550 yystate = yypgoto[yyn - YYNTOKENS] + ps[-1].state;
551 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == ps[-1].state)
0de566d7 552 yystate = yytable[yystate];
93a17b20 553 else
0de566d7 554 yystate = yydefgoto[yyn - YYNTOKENS];
1654d593 555 ps->state = yystate;
05a03161 556
0de566d7 557 goto yynewstate;
558
559
560 /*------------------------------------.
561 | yyerrlab -- here on detecting error |
562 `------------------------------------*/
563 yyerrlab:
564 /* If not already recovering from an error, report this error. */
5912531f 565 if (!parser->yyerrstatus) {
07a06489 566 yyerror ("syntax error");
93a17b20 567 }
0de566d7 568
569
5912531f 570 if (parser->yyerrstatus == 3) {
0de566d7 571 /* If just tried and failed to reuse lookahead token after an
572 error, discard it. */
573
574 /* Return failure if at end of input. */
5912531f 575 if (parser->yychar == YYEOF) {
0de566d7 576 /* Pop the error token. */
577 YYPOPSTACK;
578 /* Pop the rest of the stack. */
22735491 579 while (ps > parser->stack) {
1654d593 580 YYDSYMPRINTF ("Error: popping", yystos[ps->state], &ps->val);
581 if (yy_type_tab[yystos[ps->state]] == toketype_opval
582 && ps->val.opval)
670f3923 583 {
0539ab63 584 YYDPRINTF ((Perl_debug_log, "(freeing op)\n"));
1654d593 585 if (ps->comppad != PL_comppad) {
586 PAD_RESTORE_LOCAL(ps->comppad);
718a7425 587 }
1654d593 588 ps->val.opval->op_latefree = 0;
589 op_free(ps->val.opval);
0539ab63 590 }
0de566d7 591 YYPOPSTACK;
592 }
593 YYABORT;
594 }
595
5912531f 596 YYDSYMPRINTF ("Error: discarding", yytoken, &parser->yylval);
597 parser->yychar = YYEMPTY;
0de566d7 598
93a17b20 599 }
0de566d7 600
601 /* Else will try to reuse lookahead token after shifting the error
602 token. */
603 goto yyerrlab1;
604
605
606 /*----------------------------------------------------.
607 | yyerrlab1 -- error raised explicitly by an action. |
608 `----------------------------------------------------*/
609 yyerrlab1:
5912531f 610 parser->yyerrstatus = 3; /* Each real token shifted decrements this. */
0de566d7 611
612 for (;;) {
613 yyn = yypact[yystate];
614 if (yyn != YYPACT_NINF) {
615 yyn += YYTERROR;
616 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) {
617 yyn = yytable[yyn];
618 if (0 < yyn)
619 break;
620 }
621 }
622
623 /* Pop the current state because it cannot handle the error token. */
22735491 624 if (ps == parser->stack)
0de566d7 625 YYABORT;
626
1654d593 627 YYDSYMPRINTF ("Error: popping", yystos[ps->state], &ps->val);
628 if (yy_type_tab[yystos[ps->state]] == toketype_opval && ps->val.opval) {
0539ab63 629 YYDPRINTF ((Perl_debug_log, "(freeing op)\n"));
1654d593 630 if (ps->comppad != PL_comppad) {
631 PAD_RESTORE_LOCAL(ps->comppad);
718a7425 632 }
1654d593 633 ps->val.opval->op_latefree = 0;
634 op_free(ps->val.opval);
0539ab63 635 }
1654d593 636 YYPOPSTACK;
637 yystate = ps->state;
0de566d7 638
1654d593 639 YY_STACK_PRINT(parser);
93a17b20 640 }
0de566d7 641
642 if (yyn == YYFINAL)
643 YYACCEPT;
644
645 YYDPRINTF ((Perl_debug_log, "Shifting error token, "));
646
1654d593 647 YYPUSHSTACK;
648 ps->state = yyn;
5912531f 649 ps->val = parser->yylval;
1654d593 650 ps->comppad = PL_comppad;
9388183f 651#ifdef DEBUGGING
1654d593 652 ps->name ="<err>";
9388183f 653#endif
0de566d7 654
0de566d7 655 goto yynewstate;
656
657
658 /*-------------------------------------.
659 | yyacceptlab -- YYACCEPT comes here. |
660 `-------------------------------------*/
661 yyacceptlab:
662 yyresult = 0;
22735491 663 parser->ps = parser->stack; /* disable cleanup */
0de566d7 664 goto yyreturn;
665
666 /*-----------------------------------.
667 | yyabortlab -- YYABORT comes here. |
668 `-----------------------------------*/
669 yyabortlab:
670 yyresult = 1;
671 goto yyreturn;
672
0de566d7 673 yyreturn:
22735491 674 LEAVE; /* force parser free before we return */
0de566d7 675 return yyresult;
e1f15930 676}
66610fdd 677
678/*
679 * Local variables:
680 * c-indentation-style: bsd
681 * c-basic-offset: 4
682 * indent-tabs-mode: t
683 * End:
684 *
37442d52 685 * ex: set ts=8 sts=4 sw=4 noet:
686 */