This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add two missing perldiag entries
[perl5.git] / perly.c
... / ...
CommitLineData
1/* perly.c
2 *
3 * Copyright (c) 2004, 2005, 2006, 2007, 2008,
4 * 2009, 2010, 2011 by Larry Wall and others
5 *
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.
8 *
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.
13 *
14 * Here is an important copyright statement from the original, generated
15 * file:
16 *
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.
21 *
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.
26 */
27
28#include "EXTERN.h"
29#define PERL_IN_PERLY_C
30#include "perl.h"
31
32typedef unsigned char yytype_uint8;
33typedef signed char yytype_int8;
34typedef unsigned short int yytype_uint16;
35typedef short int yytype_int16;
36typedef signed char yysigned_char;
37
38/* YYINITDEPTH -- initial size of the parser's stacks. */
39#define YYINITDEPTH 200
40
41#ifdef YYDEBUG
42# undef YYDEBUG
43#endif
44#ifdef DEBUGGING
45# define YYDEBUG 1
46#else
47# define YYDEBUG 0
48#endif
49
50#ifndef YY_NULL
51# define YY_NULL 0
52#endif
53
54/* contains all the parser state tables; auto-generated from perly.y */
55#include "perly.tab"
56
57# define YYSIZE_T size_t
58
59#define YYEOF 0
60#define YYTERROR 1
61
62#define YYACCEPT goto yyacceptlab
63#define YYABORT goto yyabortlab
64#define YYERROR goto yyerrlab1
65
66/* Enable debugging if requested. */
67#ifdef DEBUGGING
68
69# define yydebug (DEBUG_p_TEST)
70
71# define YYFPRINTF PerlIO_printf
72
73# define YYDPRINTF(Args) \
74do { \
75 if (yydebug) \
76 YYFPRINTF Args; \
77} while (0)
78
79# define YYDSYMPRINTF(Title, Token, Value) \
80do { \
81 if (yydebug) { \
82 YYFPRINTF (Perl_debug_log, "%s ", Title); \
83 yysymprint (aTHX_ Perl_debug_log, Token, Value); \
84 YYFPRINTF (Perl_debug_log, "\n"); \
85 } \
86} while (0)
87
88/*--------------------------------.
89| Print this symbol on YYOUTPUT. |
90`--------------------------------*/
91
92static void
93yysymprint(pTHX_ PerlIO * const yyoutput, int yytype, const YYSTYPE * const yyvaluep)
94{
95 if (yytype < YYNTOKENS) {
96 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
97# ifdef YYPRINT
98 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
99# else
100 YYFPRINTF (yyoutput, "0x%"UVxf, (UV)yyvaluep->ival);
101# endif
102 }
103 else
104 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
105
106 YYFPRINTF (yyoutput, ")");
107}
108
109
110/* yy_stack_print()
111 * print the top 8 items on the parse stack.
112 */
113
114static void
115yy_stack_print (pTHX_ const yy_parser *parser)
116{
117 const yy_stack_frame *ps, *min;
118
119 min = parser->ps - 8 + 1;
120 if (min <= parser->stack)
121 min = parser->stack + 1;
122
123 PerlIO_printf(Perl_debug_log, "\nindex:");
124 for (ps = min; ps <= parser->ps; ps++)
125 PerlIO_printf(Perl_debug_log, " %8d", (int)(ps - parser->stack));
126
127 PerlIO_printf(Perl_debug_log, "\nstate:");
128 for (ps = min; ps <= parser->ps; ps++)
129 PerlIO_printf(Perl_debug_log, " %8d", ps->state);
130
131 PerlIO_printf(Perl_debug_log, "\ntoken:");
132 for (ps = min; ps <= parser->ps; ps++)
133 PerlIO_printf(Perl_debug_log, " %8.8s", ps->name);
134
135 PerlIO_printf(Perl_debug_log, "\nvalue:");
136 for (ps = min; ps <= parser->ps; ps++) {
137 switch (yy_type_tab[yystos[ps->state]]) {
138 case toketype_opval:
139 PerlIO_printf(Perl_debug_log, " %8.8s",
140 ps->val.opval
141 ? PL_op_name[ps->val.opval->op_type]
142 : "(Nullop)"
143 );
144 break;
145#ifndef PERL_IN_MADLY_C
146 case toketype_i_tkval:
147#endif
148 case toketype_ival:
149 PerlIO_printf(Perl_debug_log, " %8"IVdf, (IV)ps->val.ival);
150 break;
151 default:
152 PerlIO_printf(Perl_debug_log, " %8"UVxf, (UV)ps->val.ival);
153 }
154 }
155 PerlIO_printf(Perl_debug_log, "\n\n");
156}
157
158# define YY_STACK_PRINT(parser) \
159do { \
160 if (yydebug && DEBUG_v_TEST) \
161 yy_stack_print (aTHX_ parser); \
162} while (0)
163
164
165/*------------------------------------------------.
166| Report that the YYRULE is going to be reduced. |
167`------------------------------------------------*/
168
169static void
170yy_reduce_print (pTHX_ int yyrule)
171{
172 int yyi;
173 const unsigned int yylineno = yyrline[yyrule];
174 YYFPRINTF (Perl_debug_log, "Reducing stack by rule %d (line %u), ",
175 yyrule - 1, yylineno);
176 /* Print the symbols being reduced, and their result. */
177 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
178 YYFPRINTF (Perl_debug_log, "%s ", yytname [yyrhs[yyi]]);
179 YYFPRINTF (Perl_debug_log, "-> %s\n", yytname [yyr1[yyrule]]);
180}
181
182# define YY_REDUCE_PRINT(Rule) \
183do { \
184 if (yydebug) \
185 yy_reduce_print (aTHX_ Rule); \
186} while (0)
187
188#else /* !DEBUGGING */
189# define YYDPRINTF(Args)
190# define YYDSYMPRINTF(Title, Token, Value)
191# define YY_STACK_PRINT(parser)
192# define YY_REDUCE_PRINT(Rule)
193#endif /* !DEBUGGING */
194
195/* called during cleanup (via SAVEDESTRUCTOR_X) to free any items on the
196 * parse stack, thus avoiding leaks if we die */
197
198static void
199S_clear_yystack(pTHX_ const yy_parser *parser)
200{
201 yy_stack_frame *ps = parser->ps;
202 int i = 0;
203
204 if (!parser->stack)
205 return;
206
207 YYDPRINTF ((Perl_debug_log, "clearing the parse stack\n"));
208
209 for (i=0; i< parser->yylen; i++) {
210 SvREFCNT_dec(ps[-i].compcv);
211 }
212 ps -= parser->yylen;
213
214 /* now free whole the stack, including the just-reduced ops */
215
216 while (ps > parser->stack) {
217 LEAVE_SCOPE(ps->savestack_ix);
218 if (yy_type_tab[yystos[ps->state]] == toketype_opval
219 && ps->val.opval)
220 {
221 if (ps->compcv != PL_compcv) {
222 PL_compcv = ps->compcv;
223 PAD_SET_CUR_NOSAVE(CvPADLIST(PL_compcv), 1);
224 PL_comppad_name = PadlistNAMES(CvPADLIST(PL_compcv));
225 }
226 YYDPRINTF ((Perl_debug_log, "(freeing op)\n"));
227 op_free(ps->val.opval);
228 }
229 SvREFCNT_dec(ps->compcv);
230 ps--;
231 }
232
233 Safefree(parser->stack);
234}
235
236
237/*----------.
238| yyparse. |
239`----------*/
240
241int
242#ifdef PERL_IN_MADLY_C
243Perl_madparse (pTHX_ int gramtype)
244#else
245Perl_yyparse (pTHX_ int gramtype)
246#endif
247{
248 dVAR;
249 int yystate;
250 int yyn;
251 int yyresult;
252
253 /* Lookahead token as an internal (translated) token number. */
254 int yytoken = 0;
255
256 yy_parser *parser; /* the parser object */
257 yy_stack_frame *ps; /* current parser stack frame */
258
259#define YYPOPSTACK parser->ps = --ps
260#define YYPUSHSTACK parser->ps = ++ps
261
262 /* The variable used to return semantic value and location from the
263 action routines: ie $$. */
264 YYSTYPE yyval;
265
266#ifndef PERL_IN_MADLY_C
267# ifdef PERL_MAD
268 if (PL_madskills)
269 return madparse(gramtype);
270# endif
271#endif
272
273 YYDPRINTF ((Perl_debug_log, "Starting parse\n"));
274
275 parser = PL_parser;
276
277 ENTER; /* force parser state cleanup/restoration before we return */
278 SAVEPPTR(parser->yylval.pval);
279 SAVEINT(parser->yychar);
280 SAVEINT(parser->yyerrstatus);
281 SAVEINT(parser->stack_size);
282 SAVEINT(parser->yylen);
283 SAVEVPTR(parser->stack);
284 SAVEVPTR(parser->ps);
285
286 /* initialise state for this parse */
287 parser->yychar = gramtype;
288 parser->yyerrstatus = 0;
289 parser->stack_size = YYINITDEPTH;
290 parser->yylen = 0;
291 Newx(parser->stack, YYINITDEPTH, yy_stack_frame);
292 ps = parser->ps = parser->stack;
293 ps->state = 0;
294 SAVEDESTRUCTOR_X(S_clear_yystack, parser);
295
296/*------------------------------------------------------------.
297| yynewstate -- Push a new state, which is found in yystate. |
298`------------------------------------------------------------*/
299 yynewstate:
300
301 yystate = ps->state;
302
303 YYDPRINTF ((Perl_debug_log, "Entering state %d\n", yystate));
304
305 parser->yylen = 0;
306
307 {
308 size_t size = ps - parser->stack + 1;
309
310 /* grow the stack? We always leave 1 spare slot,
311 * in case of a '' -> 'foo' reduction */
312
313 if (size >= (size_t)parser->stack_size - 1) {
314 /* this will croak on insufficient memory */
315 parser->stack_size *= 2;
316 Renew(parser->stack, parser->stack_size, yy_stack_frame);
317 ps = parser->ps = parser->stack + size -1;
318
319 YYDPRINTF((Perl_debug_log,
320 "parser stack size increased to %lu frames\n",
321 (unsigned long int)parser->stack_size));
322 }
323 }
324
325/* Do appropriate processing given the current state. */
326/* Read a lookahead token if we need one and don't already have one. */
327
328 /* First try to decide what to do without reference to lookahead token. */
329
330 yyn = yypact[yystate];
331 if (yyn == YYPACT_NINF)
332 goto yydefault;
333
334 /* Not known => get a lookahead token if don't already have one. */
335
336 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
337 if (parser->yychar == YYEMPTY) {
338 YYDPRINTF ((Perl_debug_log, "Reading a token: "));
339#ifdef PERL_IN_MADLY_C
340 parser->yychar = PL_madskills ? madlex() : yylex();
341#else
342 parser->yychar = yylex();
343#endif
344
345/* perly.tab is shipped based on an ASCII system; if it were to be regenerated
346 * on a platform that doesn't use ASCII, this translation back would need to be
347 * removed */
348# ifdef EBCDIC
349 if (parser->yychar >= 0 && parser->yychar < 255) {
350 parser->yychar = NATIVE_TO_LATIN1(parser->yychar);
351 }
352# endif
353 }
354
355 if (parser->yychar <= YYEOF) {
356 parser->yychar = yytoken = YYEOF;
357 YYDPRINTF ((Perl_debug_log, "Now at end of input.\n"));
358 }
359 else {
360 yytoken = YYTRANSLATE (parser->yychar);
361 YYDSYMPRINTF ("Next token is", yytoken, &parser->yylval);
362 }
363
364 /* If the proper action on seeing token YYTOKEN is to reduce or to
365 detect an error, take that action. */
366 yyn += yytoken;
367 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
368 goto yydefault;
369 yyn = yytable[yyn];
370 if (yyn <= 0) {
371 if (yyn == 0 || yyn == YYTABLE_NINF)
372 goto yyerrlab;
373 yyn = -yyn;
374 goto yyreduce;
375 }
376
377 if (yyn == YYFINAL)
378 YYACCEPT;
379
380 /* Shift the lookahead token. */
381 YYDPRINTF ((Perl_debug_log, "Shifting token %s, ", yytname[yytoken]));
382
383 /* Discard the token being shifted unless it is eof. */
384 if (parser->yychar != YYEOF)
385 parser->yychar = YYEMPTY;
386
387 YYPUSHSTACK;
388 ps->state = yyn;
389 ps->val = parser->yylval;
390 ps->compcv = (CV*)SvREFCNT_inc(PL_compcv);
391 ps->savestack_ix = PL_savestack_ix;
392#ifdef DEBUGGING
393 ps->name = (const char *)(yytname[yytoken]);
394#endif
395
396 /* Count tokens shifted since error; after three, turn off error
397 status. */
398 if (parser->yyerrstatus)
399 parser->yyerrstatus--;
400
401 goto yynewstate;
402
403
404 /*-----------------------------------------------------------.
405 | yydefault -- do the default action for the current state. |
406 `-----------------------------------------------------------*/
407 yydefault:
408 yyn = yydefact[yystate];
409 if (yyn == 0)
410 goto yyerrlab;
411 goto yyreduce;
412
413
414 /*-----------------------------.
415 | yyreduce -- Do a reduction. |
416 `-----------------------------*/
417 yyreduce:
418 /* yyn is the number of a rule to reduce with. */
419 parser->yylen = yyr2[yyn];
420
421 /* If YYLEN is nonzero, implement the default value of the action:
422 "$$ = $1".
423
424 Otherwise, the following line sets YYVAL to garbage.
425 This behavior is undocumented and Bison
426 users should not rely upon it. Assigning to YYVAL
427 unconditionally makes the parser a bit smaller, and it avoids a
428 GCC warning that YYVAL may be used uninitialized. */
429 yyval = ps[1-parser->yylen].val;
430
431 YY_STACK_PRINT(parser);
432 YY_REDUCE_PRINT (yyn);
433
434 switch (yyn) {
435
436
437#define dep() deprecate("\"do\" to call subroutines")
438
439#ifdef PERL_IN_MADLY_C
440# define IVAL(i) (i)->tk_lval.ival
441# define PVAL(p) (p)->tk_lval.pval
442# define TOKEN_GETMAD(a,b,c) token_getmad((a),(b),(c))
443# define TOKEN_FREE(a) token_free(a)
444# define OP_GETMAD(a,b,c) op_getmad((a),(b),(c))
445# define IF_MAD(a,b) (a)
446# define DO_MAD(a) a
447# define MAD
448#else
449# define IVAL(i) (i)
450# define PVAL(p) (p)
451# define TOKEN_GETMAD(a,b,c)
452# define TOKEN_FREE(a)
453# define OP_GETMAD(a,b,c)
454# define IF_MAD(a,b) (b)
455# define DO_MAD(a)
456# undef MAD
457#endif
458
459/* contains all the rule actions; auto-generated from perly.y */
460#include "perly.act"
461
462 }
463
464 {
465 int i;
466 for (i=0; i< parser->yylen; i++) {
467 SvREFCNT_dec(ps[-i].compcv);
468 }
469 }
470
471 parser->ps = ps -= (parser->yylen-1);
472
473 /* Now shift the result of the reduction. Determine what state
474 that goes to, based on the state we popped back to and the rule
475 number reduced by. */
476
477 ps->val = yyval;
478 ps->compcv = (CV*)SvREFCNT_inc(PL_compcv);
479 ps->savestack_ix = PL_savestack_ix;
480#ifdef DEBUGGING
481 ps->name = (const char *)(yytname [yyr1[yyn]]);
482#endif
483
484 yyn = yyr1[yyn];
485
486 yystate = yypgoto[yyn - YYNTOKENS] + ps[-1].state;
487 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == ps[-1].state)
488 yystate = yytable[yystate];
489 else
490 yystate = yydefgoto[yyn - YYNTOKENS];
491 ps->state = yystate;
492
493 goto yynewstate;
494
495
496 /*------------------------------------.
497 | yyerrlab -- here on detecting error |
498 `------------------------------------*/
499 yyerrlab:
500 /* If not already recovering from an error, report this error. */
501 if (!parser->yyerrstatus) {
502 yyerror ("syntax error");
503 }
504
505
506 if (parser->yyerrstatus == 3) {
507 /* If just tried and failed to reuse lookahead token after an
508 error, discard it. */
509
510 /* Return failure if at end of input. */
511 if (parser->yychar == YYEOF) {
512 /* Pop the error token. */
513 SvREFCNT_dec(ps->compcv);
514 YYPOPSTACK;
515 /* Pop the rest of the stack. */
516 while (ps > parser->stack) {
517 YYDSYMPRINTF ("Error: popping", yystos[ps->state], &ps->val);
518 LEAVE_SCOPE(ps->savestack_ix);
519 if (yy_type_tab[yystos[ps->state]] == toketype_opval
520 && ps->val.opval)
521 {
522 YYDPRINTF ((Perl_debug_log, "(freeing op)\n"));
523 if (ps->compcv != PL_compcv) {
524 PL_compcv = ps->compcv;
525 PAD_SET_CUR_NOSAVE(CvPADLIST(PL_compcv), 1);
526 }
527 op_free(ps->val.opval);
528 }
529 SvREFCNT_dec(ps->compcv);
530 YYPOPSTACK;
531 }
532 YYABORT;
533 }
534
535 YYDSYMPRINTF ("Error: discarding", yytoken, &parser->yylval);
536 parser->yychar = YYEMPTY;
537
538 }
539
540 /* Else will try to reuse lookahead token after shifting the error
541 token. */
542 goto yyerrlab1;
543
544
545 /*----------------------------------------------------.
546 | yyerrlab1 -- error raised explicitly by an action. |
547 `----------------------------------------------------*/
548 yyerrlab1:
549 parser->yyerrstatus = 3; /* Each real token shifted decrements this. */
550
551 for (;;) {
552 yyn = yypact[yystate];
553 if (yyn != YYPACT_NINF) {
554 yyn += YYTERROR;
555 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) {
556 yyn = yytable[yyn];
557 if (0 < yyn)
558 break;
559 }
560 }
561
562 /* Pop the current state because it cannot handle the error token. */
563 if (ps == parser->stack)
564 YYABORT;
565
566 YYDSYMPRINTF ("Error: popping", yystos[ps->state], &ps->val);
567 LEAVE_SCOPE(ps->savestack_ix);
568 if (yy_type_tab[yystos[ps->state]] == toketype_opval && ps->val.opval) {
569 YYDPRINTF ((Perl_debug_log, "(freeing op)\n"));
570 if (ps->compcv != PL_compcv) {
571 PL_compcv = ps->compcv;
572 PAD_SET_CUR_NOSAVE(CvPADLIST(PL_compcv), 1);
573 }
574 op_free(ps->val.opval);
575 }
576 SvREFCNT_dec(ps->compcv);
577 YYPOPSTACK;
578 yystate = ps->state;
579
580 YY_STACK_PRINT(parser);
581 }
582
583 if (yyn == YYFINAL)
584 YYACCEPT;
585
586 YYDPRINTF ((Perl_debug_log, "Shifting error token, "));
587
588 YYPUSHSTACK;
589 ps->state = yyn;
590 ps->val = parser->yylval;
591 ps->compcv = (CV*)SvREFCNT_inc(PL_compcv);
592 ps->savestack_ix = PL_savestack_ix;
593#ifdef DEBUGGING
594 ps->name ="<err>";
595#endif
596
597 goto yynewstate;
598
599
600 /*-------------------------------------.
601 | yyacceptlab -- YYACCEPT comes here. |
602 `-------------------------------------*/
603 yyacceptlab:
604 yyresult = 0;
605 for (ps=parser->ps; ps > parser->stack; ps--) {
606 SvREFCNT_dec(ps->compcv);
607 }
608 parser->ps = parser->stack; /* disable cleanup */
609 goto yyreturn;
610
611 /*-----------------------------------.
612 | yyabortlab -- YYABORT comes here. |
613 `-----------------------------------*/
614 yyabortlab:
615 yyresult = 1;
616 goto yyreturn;
617
618 yyreturn:
619 LEAVE; /* force parser stack cleanup before we return */
620 return yyresult;
621}
622
623/*
624 * Local variables:
625 * c-indentation-style: bsd
626 * c-basic-offset: 4
627 * indent-tabs-mode: nil
628 * End:
629 *
630 * ex: set ts=8 sts=4 sw=4 et:
631 */