3 * Copyright (c) 2004, 2005, 2006, 2007, 2008,
4 * 2009, 2010, 2011 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
9 * Note that this file was originally generated as an output from
10 * GNU bison version 1.875, but now the code is statically maintained
11 * and edited; the bits that are dependent on perly.y are now
12 * #included from the files perly.tab and perly.act.
14 * Here is an important copyright statement from the original, generated
17 * As a special exception, when this file is copied by Bison into a
18 * Bison output file, you may use that output file without
19 * restriction. This special exception was added by the Free
20 * Software Foundation in version 1.24 of Bison.
22 * Note that this file is also #included in madly.c, to allow compilation
23 * of a second parser, Perl_madparse, that is identical to Perl_yyparse,
24 * but which includes extra code for dumping the parse tree.
25 * This is controlled by the PERL_IN_MADLY_C define.
29 #define PERL_IN_PERLY_C
32 typedef unsigned char yytype_uint8;
33 typedef signed char yytype_int8;
34 typedef unsigned short int yytype_uint16;
35 typedef short int yytype_int16;
36 typedef signed char yysigned_char;
38 /* YYINITDEPTH -- initial size of the parser's stacks. */
39 #define YYINITDEPTH 200
47 /* contains all the parser state tables; auto-generated from perly.y */
50 # define YYSIZE_T size_t
55 #define YYACCEPT goto yyacceptlab
56 #define YYABORT goto yyabortlab
57 #define YYERROR goto yyerrlab1
59 /* Enable debugging if requested. */
62 # define yydebug (DEBUG_p_TEST)
64 # define YYFPRINTF PerlIO_printf
66 # define YYDPRINTF(Args) \
72 # define YYDSYMPRINTF(Title, Token, Value) \
75 YYFPRINTF (Perl_debug_log, "%s ", Title); \
76 yysymprint (aTHX_ Perl_debug_log, Token, Value); \
77 YYFPRINTF (Perl_debug_log, "\n"); \
81 /*--------------------------------.
82 | Print this symbol on YYOUTPUT. |
83 `--------------------------------*/
86 yysymprint(pTHX_ PerlIO * const yyoutput, int yytype, const YYSTYPE * const yyvaluep)
88 if (yytype < YYNTOKENS) {
89 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
91 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
93 YYFPRINTF (yyoutput, "0x%"UVxf, (UV)yyvaluep->ival);
97 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
99 YYFPRINTF (yyoutput, ")");
104 * print the top 8 items on the parse stack.
108 yy_stack_print (pTHX_ const yy_parser *parser)
110 const yy_stack_frame *ps, *min;
112 min = parser->ps - 8 + 1;
113 if (min <= parser->stack)
114 min = parser->stack + 1;
116 PerlIO_printf(Perl_debug_log, "\nindex:");
117 for (ps = min; ps <= parser->ps; ps++)
118 PerlIO_printf(Perl_debug_log, " %8d", (int)(ps - parser->stack));
120 PerlIO_printf(Perl_debug_log, "\nstate:");
121 for (ps = min; ps <= parser->ps; ps++)
122 PerlIO_printf(Perl_debug_log, " %8d", ps->state);
124 PerlIO_printf(Perl_debug_log, "\ntoken:");
125 for (ps = min; ps <= parser->ps; ps++)
126 PerlIO_printf(Perl_debug_log, " %8.8s", ps->name);
128 PerlIO_printf(Perl_debug_log, "\nvalue:");
129 for (ps = min; ps <= parser->ps; ps++) {
130 switch (yy_type_tab[yystos[ps->state]]) {
132 PerlIO_printf(Perl_debug_log, " %8.8s",
134 ? PL_op_name[ps->val.opval->op_type]
138 #ifndef PERL_IN_MADLY_C
139 case toketype_p_tkval:
140 PerlIO_printf(Perl_debug_log, " %8.8s",
141 ps->val.pval ? ps->val.pval : "(NULL)");
144 case toketype_i_tkval:
147 PerlIO_printf(Perl_debug_log, " %8"IVdf, (IV)ps->val.ival);
150 PerlIO_printf(Perl_debug_log, " %8"UVxf, (UV)ps->val.ival);
153 PerlIO_printf(Perl_debug_log, "\n\n");
156 # define YY_STACK_PRINT(parser) \
158 if (yydebug && DEBUG_v_TEST) \
159 yy_stack_print (aTHX_ parser); \
163 /*------------------------------------------------.
164 | Report that the YYRULE is going to be reduced. |
165 `------------------------------------------------*/
168 yy_reduce_print (pTHX_ int yyrule)
171 const unsigned int yylineno = yyrline[yyrule];
172 YYFPRINTF (Perl_debug_log, "Reducing stack by rule %d (line %u), ",
173 yyrule - 1, yylineno);
174 /* Print the symbols being reduced, and their result. */
175 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
176 YYFPRINTF (Perl_debug_log, "%s ", yytname [yyrhs[yyi]]);
177 YYFPRINTF (Perl_debug_log, "-> %s\n", yytname [yyr1[yyrule]]);
180 # define YY_REDUCE_PRINT(Rule) \
183 yy_reduce_print (aTHX_ Rule); \
186 #else /* !DEBUGGING */
187 # define YYDPRINTF(Args)
188 # define YYDSYMPRINTF(Title, Token, Value)
189 # define YY_STACK_PRINT(parser)
190 # define YY_REDUCE_PRINT(Rule)
191 #endif /* !DEBUGGING */
193 /* called during cleanup (via SAVEDESTRUCTOR_X) to free any items on the
194 * parse stack, thus avoiding leaks if we die */
197 S_clear_yystack(pTHX_ const yy_parser *parser)
199 yy_stack_frame *ps = parser->ps;
205 YYDPRINTF ((Perl_debug_log, "clearing the parse stack\n"));
207 /* Freeing ops on the stack, and the op_latefree / op_latefreed /
210 * When we pop tokens off the stack during error recovery, or when
211 * we pop all the tokens off the stack after a die during a shift or
212 * reduce (i.e. Perl_croak somewhere in yylex() or in one of the
213 * newFOO() functions), then it's possible that some of these tokens are
214 * of type opval, pointing to an OP. All these ops are orphans; each is
215 * its own miniature subtree that has not yet been attached to a
216 * larger tree. In this case, we should clearly free the op (making
217 * sure, for each op we free that we have PL_comppad pointing to the
218 * right place for freeing any SVs attached to the op in threaded
221 * However, there is a particular problem if we die in newFOO() called
222 * by a reducing action; e.g.
225 * { $$ = newFOO($1,$2,$3) }
228 * OP *newFOO { ....; if (...) croak; .... }
230 * In this case, when we come to clean bar baz and boz off the stack,
231 * we don't know whether newFOO() has already:
234 * * attached them to part of a larger tree
235 * * attached them to PL_compcv
236 * * attached them to PL_compcv then freed it (as in BEGIN {die } )
238 * To get round this problem, we set the flag op_latefree on every op
239 * that gets pushed onto the parser stack. If op_free() sees this
240 * flag, it clears the op and frees any children,, but *doesn't* free
241 * the op itself; instead it sets the op_latefreed flag. This means
242 * that we can safely call op_free() multiple times on each stack op.
243 * So, when clearing the stack, we first, for each op that was being
244 * reduced, call op_free with op_latefree=1. This ensures that all ops
245 * hanging off these op are freed, but the reducing ops themselves are
246 * just undefed. Then we set op_latefreed=0 on *all* ops on the stack
247 * and free them. A little thought should convince you that this
248 * two-part approach to the reducing ops should handle the first three
249 * cases above safely.
251 * In the case of attaching to PL_compcv (currently just newATTRSUB
252 * does this), then we set the op_attached flag on the op that has
253 * been so attached, then avoid doing the final op_free during
254 * cleanup, on the assumption that it will happen (or has already
255 * happened) when PL_compcv is freed.
257 * Note this is fairly fragile mechanism. A more robust approach
258 * would be to use two of these flag bits as 2-bit reference count
259 * field for each op, indicating whether it is pointed to from:
263 * but this would involve reworking all code (core and external) that
264 * manipulate op trees.
266 * XXX DAPM 17/1/07 I've decided its too fragile for now, and so have
269 #define DISABLE_STACK_FREE
272 #ifdef DISABLE_STACK_FREE
273 for (i=0; i< parser->yylen; i++) {
274 SvREFCNT_dec(ps[-i].compcv);
278 /* clear any reducing ops (1st pass) */
280 for (i=0; i< parser->yylen; i++) {
281 LEAVE_SCOPE(ps[-i].savestack_ix);
282 if (yy_type_tab[yystos[ps[-i].state]] == toketype_opval
283 && ps[-i].val.opval) {
284 if ( ! (ps[-i].val.opval->op_attached
285 && !ps[-i].val.opval->op_latefreed))
287 if (ps[-i].compcv != PL_compcv) {
288 PL_compcv = ps[-i].compcv;
289 PAD_SET_CUR_NOSAVE(CvPADLIST(PL_compcv), 1);
291 op_free(ps[-i].val.opval);
297 /* now free whole the stack, including the just-reduced ops */
299 while (ps > parser->stack) {
300 LEAVE_SCOPE(ps->savestack_ix);
301 if (yy_type_tab[yystos[ps->state]] == toketype_opval
304 if (ps->compcv != PL_compcv) {
305 PL_compcv = ps->compcv;
306 PAD_SET_CUR_NOSAVE(CvPADLIST(PL_compcv), 1);
308 YYDPRINTF ((Perl_debug_log, "(freeing op)\n"));
309 #ifndef DISABLE_STACK_FREE
310 ps->val.opval->op_latefree = 0;
311 if (!(ps->val.opval->op_attached && !ps->val.opval->op_latefreed))
313 op_free(ps->val.opval);
315 SvREFCNT_dec(ps->compcv);
319 Safefree(parser->stack);
328 #ifdef PERL_IN_MADLY_C
329 Perl_madparse (pTHX_ int gramtype)
331 Perl_yyparse (pTHX_ int gramtype)
335 register int yystate;
339 /* Lookahead token as an internal (translated) token number. */
342 register yy_parser *parser; /* the parser object */
343 register yy_stack_frame *ps; /* current parser stack frame */
345 #define YYPOPSTACK parser->ps = --ps
346 #define YYPUSHSTACK parser->ps = ++ps
348 /* The variable used to return semantic value and location from the
349 action routines: ie $$. */
352 #ifndef PERL_IN_MADLY_C
355 return madparse(gramtype);
359 YYDPRINTF ((Perl_debug_log, "Starting parse\n"));
363 ENTER; /* force parser state cleanup/restoration before we return */
364 SAVEPPTR(parser->yylval.pval);
365 SAVEINT(parser->yychar);
366 SAVEINT(parser->yyerrstatus);
367 SAVEINT(parser->stack_size);
368 SAVEINT(parser->yylen);
369 SAVEVPTR(parser->stack);
370 SAVEVPTR(parser->ps);
372 /* initialise state for this parse */
373 parser->yychar = gramtype;
374 parser->yyerrstatus = 0;
375 parser->stack_size = YYINITDEPTH;
377 Newx(parser->stack, YYINITDEPTH, yy_stack_frame);
378 ps = parser->ps = parser->stack;
380 SAVEDESTRUCTOR_X(S_clear_yystack, parser);
382 /*------------------------------------------------------------.
383 | yynewstate -- Push a new state, which is found in yystate. |
384 `------------------------------------------------------------*/
389 YYDPRINTF ((Perl_debug_log, "Entering state %d\n", yystate));
391 #ifndef DISABLE_STACK_FREE
392 if (yy_type_tab[yystos[yystate]] == toketype_opval && ps->val.opval) {
393 ps->val.opval->op_latefree = 1;
394 ps->val.opval->op_latefreed = 0;
401 size_t size = ps - parser->stack + 1;
403 /* grow the stack? We always leave 1 spare slot,
404 * in case of a '' -> 'foo' reduction */
406 if (size >= (size_t)parser->stack_size - 1) {
407 /* this will croak on insufficient memory */
408 parser->stack_size *= 2;
409 Renew(parser->stack, parser->stack_size, yy_stack_frame);
410 ps = parser->ps = parser->stack + size -1;
412 YYDPRINTF((Perl_debug_log,
413 "parser stack size increased to %lu frames\n",
414 (unsigned long int)parser->stack_size));
418 /* Do appropriate processing given the current state. */
419 /* Read a lookahead token if we need one and don't already have one. */
421 /* First try to decide what to do without reference to lookahead token. */
423 yyn = yypact[yystate];
424 if (yyn == YYPACT_NINF)
427 /* Not known => get a lookahead token if don't already have one. */
429 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
430 if (parser->yychar == YYEMPTY) {
431 YYDPRINTF ((Perl_debug_log, "Reading a token: "));
432 #ifdef PERL_IN_MADLY_C
433 parser->yychar = PL_madskills ? madlex() : yylex();
435 parser->yychar = yylex();
439 if (parser->yychar >= 0 && parser->yychar < 255) {
440 parser->yychar = NATIVE_TO_ASCII(parser->yychar);
445 if (parser->yychar <= YYEOF) {
446 parser->yychar = yytoken = YYEOF;
447 YYDPRINTF ((Perl_debug_log, "Now at end of input.\n"));
450 yytoken = YYTRANSLATE (parser->yychar);
451 YYDSYMPRINTF ("Next token is", yytoken, &parser->yylval);
454 /* If the proper action on seeing token YYTOKEN is to reduce or to
455 detect an error, take that action. */
457 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
461 if (yyn == 0 || yyn == YYTABLE_NINF)
470 /* Shift the lookahead token. */
471 YYDPRINTF ((Perl_debug_log, "Shifting token %s, ", yytname[yytoken]));
473 /* Discard the token being shifted unless it is eof. */
474 if (parser->yychar != YYEOF)
475 parser->yychar = YYEMPTY;
479 ps->val = parser->yylval;
480 ps->compcv = (CV*)SvREFCNT_inc(PL_compcv);
481 ps->savestack_ix = PL_savestack_ix;
483 ps->name = (const char *)(yytname[yytoken]);
486 /* Count tokens shifted since error; after three, turn off error
488 if (parser->yyerrstatus)
489 parser->yyerrstatus--;
494 /*-----------------------------------------------------------.
495 | yydefault -- do the default action for the current state. |
496 `-----------------------------------------------------------*/
498 yyn = yydefact[yystate];
504 /*-----------------------------.
505 | yyreduce -- Do a reduction. |
506 `-----------------------------*/
508 /* yyn is the number of a rule to reduce with. */
509 parser->yylen = yyr2[yyn];
511 /* If YYLEN is nonzero, implement the default value of the action:
514 Otherwise, the following line sets YYVAL to garbage.
515 This behavior is undocumented and Bison
516 users should not rely upon it. Assigning to YYVAL
517 unconditionally makes the parser a bit smaller, and it avoids a
518 GCC warning that YYVAL may be used uninitialized. */
519 yyval = ps[1-parser->yylen].val;
521 YY_STACK_PRINT(parser);
522 YY_REDUCE_PRINT (yyn);
527 #define dep() deprecate("\"do\" to call subroutines")
529 #ifdef PERL_IN_MADLY_C
530 # define IVAL(i) (i)->tk_lval.ival
531 # define PVAL(p) (p)->tk_lval.pval
532 # define TOKEN_GETMAD(a,b,c) token_getmad((a),(b),(c))
533 # define TOKEN_FREE(a) token_free(a)
534 # define OP_GETMAD(a,b,c) op_getmad((a),(b),(c))
535 # define IF_MAD(a,b) (a)
541 # define TOKEN_GETMAD(a,b,c)
542 # define TOKEN_FREE(a)
543 # define OP_GETMAD(a,b,c)
544 # define IF_MAD(a,b) (b)
549 /* contains all the rule actions; auto-generated from perly.y */
554 /* any just-reduced ops with the op_latefreed flag cleared need to be
555 * freed; the rest need the flag resetting */
558 for (i=0; i< parser->yylen; i++) {
559 #ifndef DISABLE_STACK_FREE
560 if (yy_type_tab[yystos[ps[-i].state]] == toketype_opval
563 ps[-i].val.opval->op_latefree = 0;
564 if (ps[-i].val.opval->op_latefreed)
565 op_free(ps[-i].val.opval);
568 SvREFCNT_dec(ps[-i].compcv);
572 parser->ps = ps -= (parser->yylen-1);
574 /* Now shift the result of the reduction. Determine what state
575 that goes to, based on the state we popped back to and the rule
576 number reduced by. */
579 ps->compcv = (CV*)SvREFCNT_inc(PL_compcv);
580 ps->savestack_ix = PL_savestack_ix;
582 ps->name = (const char *)(yytname [yyr1[yyn]]);
587 yystate = yypgoto[yyn - YYNTOKENS] + ps[-1].state;
588 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == ps[-1].state)
589 yystate = yytable[yystate];
591 yystate = yydefgoto[yyn - YYNTOKENS];
597 /*------------------------------------.
598 | yyerrlab -- here on detecting error |
599 `------------------------------------*/
601 /* If not already recovering from an error, report this error. */
602 if (!parser->yyerrstatus) {
603 yyerror ("syntax error");
607 if (parser->yyerrstatus == 3) {
608 /* If just tried and failed to reuse lookahead token after an
609 error, discard it. */
611 /* Return failure if at end of input. */
612 if (parser->yychar == YYEOF) {
613 /* Pop the error token. */
614 SvREFCNT_dec(ps->compcv);
616 /* Pop the rest of the stack. */
617 while (ps > parser->stack) {
618 YYDSYMPRINTF ("Error: popping", yystos[ps->state], &ps->val);
619 LEAVE_SCOPE(ps->savestack_ix);
620 if (yy_type_tab[yystos[ps->state]] == toketype_opval
623 YYDPRINTF ((Perl_debug_log, "(freeing op)\n"));
624 if (ps->compcv != PL_compcv) {
625 PL_compcv = ps->compcv;
626 PAD_SET_CUR_NOSAVE(CvPADLIST(PL_compcv), 1);
628 ps->val.opval->op_latefree = 0;
629 op_free(ps->val.opval);
631 SvREFCNT_dec(ps->compcv);
637 YYDSYMPRINTF ("Error: discarding", yytoken, &parser->yylval);
638 if (yy_type_tab[yytoken] == toketype_opval)
639 op_free(parser->yylval.opval);
640 parser->yychar = YYEMPTY;
644 /* Else will try to reuse lookahead token after shifting the error
649 /*----------------------------------------------------.
650 | yyerrlab1 -- error raised explicitly by an action. |
651 `----------------------------------------------------*/
653 parser->yyerrstatus = 3; /* Each real token shifted decrements this. */
656 yyn = yypact[yystate];
657 if (yyn != YYPACT_NINF) {
659 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) {
666 /* Pop the current state because it cannot handle the error token. */
667 if (ps == parser->stack)
670 YYDSYMPRINTF ("Error: popping", yystos[ps->state], &ps->val);
671 LEAVE_SCOPE(ps->savestack_ix);
672 if (yy_type_tab[yystos[ps->state]] == toketype_opval && ps->val.opval) {
673 YYDPRINTF ((Perl_debug_log, "(freeing op)\n"));
674 if (ps->compcv != PL_compcv) {
675 PL_compcv = ps->compcv;
676 PAD_SET_CUR_NOSAVE(CvPADLIST(PL_compcv), 1);
678 ps->val.opval->op_latefree = 0;
679 op_free(ps->val.opval);
681 SvREFCNT_dec(ps->compcv);
685 YY_STACK_PRINT(parser);
691 YYDPRINTF ((Perl_debug_log, "Shifting error token, "));
695 ps->val = parser->yylval;
696 ps->compcv = (CV*)SvREFCNT_inc(PL_compcv);
697 ps->savestack_ix = PL_savestack_ix;
705 /*-------------------------------------.
706 | yyacceptlab -- YYACCEPT comes here. |
707 `-------------------------------------*/
710 for (ps=parser->ps; ps > parser->stack; ps--) {
711 SvREFCNT_dec(ps->compcv);
713 parser->ps = parser->stack; /* disable cleanup */
716 /*-----------------------------------.
717 | yyabortlab -- YYABORT comes here. |
718 `-----------------------------------*/
724 LEAVE; /* force parser stack cleanup before we return */
730 * c-indentation-style: bsd
732 * indent-tabs-mode: t
735 * ex: set ts=8 sts=4 sw=4 noet: