perly.c revision 1.14
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 } 225 YYDPRINTF ((Perl_debug_log, "(freeing op)\n")); 226 op_free(ps->val.opval); 227 } 228 SvREFCNT_dec(ps->compcv); 229 ps--; 230 } 231 232 Safefree(parser->stack); 233} 234 235 236/*----------. 237| yyparse. | 238`----------*/ 239 240int 241#ifdef PERL_IN_MADLY_C 242Perl_madparse (pTHX_ int gramtype) 243#else 244Perl_yyparse (pTHX_ int gramtype) 245#endif 246{ 247 dVAR; 248 int yystate; 249 int yyn; 250 int yyresult; 251 252 /* Lookahead token as an internal (translated) token number. */ 253 int yytoken = 0; 254 255 yy_parser *parser; /* the parser object */ 256 yy_stack_frame *ps; /* current parser stack frame */ 257 258#define YYPOPSTACK parser->ps = --ps 259#define YYPUSHSTACK parser->ps = ++ps 260 261 /* The variable used to return semantic value and location from the 262 action routines: ie $$. */ 263 YYSTYPE yyval; 264 265#ifndef PERL_IN_MADLY_C 266# ifdef PERL_MAD 267 if (PL_madskills) 268 return madparse(gramtype); 269# endif 270#endif 271 272 YYDPRINTF ((Perl_debug_log, "Starting parse\n")); 273 274 parser = PL_parser; 275 276 ENTER; /* force parser state cleanup/restoration before we return */ 277 SAVEPPTR(parser->yylval.pval); 278 SAVEINT(parser->yychar); 279 SAVEINT(parser->yyerrstatus); 280 SAVEINT(parser->stack_size); 281 SAVEINT(parser->yylen); 282 SAVEVPTR(parser->stack); 283 SAVEVPTR(parser->ps); 284 285 /* initialise state for this parse */ 286 parser->yychar = gramtype; 287 parser->yyerrstatus = 0; 288 parser->stack_size = YYINITDEPTH; 289 parser->yylen = 0; 290 Newx(parser->stack, YYINITDEPTH, yy_stack_frame); 291 ps = parser->ps = parser->stack; 292 ps->state = 0; 293 SAVEDESTRUCTOR_X(S_clear_yystack, parser); 294 295/*------------------------------------------------------------. 296| yynewstate -- Push a new state, which is found in yystate. | 297`------------------------------------------------------------*/ 298 yynewstate: 299 300 yystate = ps->state; 301 302 YYDPRINTF ((Perl_debug_log, "Entering state %d\n", yystate)); 303 304 parser->yylen = 0; 305 306 { 307 size_t size = ps - parser->stack + 1; 308 309 /* grow the stack? We always leave 1 spare slot, 310 * in case of a '' -> 'foo' reduction */ 311 312 if (size >= (size_t)parser->stack_size - 1) { 313 /* this will croak on insufficient memory */ 314 parser->stack_size *= 2; 315 Renew(parser->stack, parser->stack_size, yy_stack_frame); 316 ps = parser->ps = parser->stack + size -1; 317 318 YYDPRINTF((Perl_debug_log, 319 "parser stack size increased to %lu frames\n", 320 (unsigned long int)parser->stack_size)); 321 } 322 } 323 324/* Do appropriate processing given the current state. */ 325/* Read a lookahead token if we need one and don't already have one. */ 326 327 /* First try to decide what to do without reference to lookahead token. */ 328 329 yyn = yypact[yystate]; 330 if (yyn == YYPACT_NINF) 331 goto yydefault; 332 333 /* Not known => get a lookahead token if don't already have one. */ 334 335 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ 336 if (parser->yychar == YYEMPTY) { 337 YYDPRINTF ((Perl_debug_log, "Reading a token: ")); 338#ifdef PERL_IN_MADLY_C 339 parser->yychar = PL_madskills ? madlex() : yylex(); 340#else 341 parser->yychar = yylex(); 342#endif 343 344# ifdef EBCDIC 345 if (parser->yychar >= 0 && parser->yychar < 255) { 346 parser->yychar = NATIVE_TO_ASCII(parser->yychar); 347 } 348# endif 349 } 350 351 if (parser->yychar <= YYEOF) { 352 parser->yychar = yytoken = YYEOF; 353 YYDPRINTF ((Perl_debug_log, "Now at end of input.\n")); 354 } 355 else { 356 yytoken = YYTRANSLATE (parser->yychar); 357 YYDSYMPRINTF ("Next token is", yytoken, &parser->yylval); 358 } 359 360 /* If the proper action on seeing token YYTOKEN is to reduce or to 361 detect an error, take that action. */ 362 yyn += yytoken; 363 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) 364 goto yydefault; 365 yyn = yytable[yyn]; 366 if (yyn <= 0) { 367 if (yyn == 0 || yyn == YYTABLE_NINF) 368 goto yyerrlab; 369 yyn = -yyn; 370 goto yyreduce; 371 } 372 373 if (yyn == YYFINAL) 374 YYACCEPT; 375 376 /* Shift the lookahead token. */ 377 YYDPRINTF ((Perl_debug_log, "Shifting token %s, ", yytname[yytoken])); 378 379 /* Discard the token being shifted unless it is eof. */ 380 if (parser->yychar != YYEOF) 381 parser->yychar = YYEMPTY; 382 383 YYPUSHSTACK; 384 ps->state = yyn; 385 ps->val = parser->yylval; 386 ps->compcv = (CV*)SvREFCNT_inc(PL_compcv); 387 ps->savestack_ix = PL_savestack_ix; 388#ifdef DEBUGGING 389 ps->name = (const char *)(yytname[yytoken]); 390#endif 391 392 /* Count tokens shifted since error; after three, turn off error 393 status. */ 394 if (parser->yyerrstatus) 395 parser->yyerrstatus--; 396 397 goto yynewstate; 398 399 400 /*-----------------------------------------------------------. 401 | yydefault -- do the default action for the current state. | 402 `-----------------------------------------------------------*/ 403 yydefault: 404 yyn = yydefact[yystate]; 405 if (yyn == 0) 406 goto yyerrlab; 407 goto yyreduce; 408 409 410 /*-----------------------------. 411 | yyreduce -- Do a reduction. | 412 `-----------------------------*/ 413 yyreduce: 414 /* yyn is the number of a rule to reduce with. */ 415 parser->yylen = yyr2[yyn]; 416 417 /* If YYLEN is nonzero, implement the default value of the action: 418 "$$ = $1". 419 420 Otherwise, the following line sets YYVAL to garbage. 421 This behavior is undocumented and Bison 422 users should not rely upon it. Assigning to YYVAL 423 unconditionally makes the parser a bit smaller, and it avoids a 424 GCC warning that YYVAL may be used uninitialized. */ 425 yyval = ps[1-parser->yylen].val; 426 427 YY_STACK_PRINT(parser); 428 YY_REDUCE_PRINT (yyn); 429 430 switch (yyn) { 431 432 433#define dep() deprecate("\"do\" to call subroutines") 434 435#ifdef PERL_IN_MADLY_C 436# define IVAL(i) (i)->tk_lval.ival 437# define PVAL(p) (p)->tk_lval.pval 438# define TOKEN_GETMAD(a,b,c) token_getmad((a),(b),(c)) 439# define TOKEN_FREE(a) token_free(a) 440# define OP_GETMAD(a,b,c) op_getmad((a),(b),(c)) 441# define IF_MAD(a,b) (a) 442# define DO_MAD(a) a 443# define MAD 444#else 445# define IVAL(i) (i) 446# define PVAL(p) (p) 447# define TOKEN_GETMAD(a,b,c) 448# define TOKEN_FREE(a) 449# define OP_GETMAD(a,b,c) 450# define IF_MAD(a,b) (b) 451# define DO_MAD(a) 452# undef MAD 453#endif 454 455/* contains all the rule actions; auto-generated from perly.y */ 456#include "perly.act" 457 458 } 459 460 { 461 int i; 462 for (i=0; i< parser->yylen; i++) { 463 SvREFCNT_dec(ps[-i].compcv); 464 } 465 } 466 467 parser->ps = ps -= (parser->yylen-1); 468 469 /* Now shift the result of the reduction. Determine what state 470 that goes to, based on the state we popped back to and the rule 471 number reduced by. */ 472 473 ps->val = yyval; 474 ps->compcv = (CV*)SvREFCNT_inc(PL_compcv); 475 ps->savestack_ix = PL_savestack_ix; 476#ifdef DEBUGGING 477 ps->name = (const char *)(yytname [yyr1[yyn]]); 478#endif 479 480 yyn = yyr1[yyn]; 481 482 yystate = yypgoto[yyn - YYNTOKENS] + ps[-1].state; 483 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == ps[-1].state) 484 yystate = yytable[yystate]; 485 else 486 yystate = yydefgoto[yyn - YYNTOKENS]; 487 ps->state = yystate; 488 489 goto yynewstate; 490 491 492 /*------------------------------------. 493 | yyerrlab -- here on detecting error | 494 `------------------------------------*/ 495 yyerrlab: 496 /* If not already recovering from an error, report this error. */ 497 if (!parser->yyerrstatus) { 498 yyerror ("syntax error"); 499 } 500 501 502 if (parser->yyerrstatus == 3) { 503 /* If just tried and failed to reuse lookahead token after an 504 error, discard it. */ 505 506 /* Return failure if at end of input. */ 507 if (parser->yychar == YYEOF) { 508 /* Pop the error token. */ 509 SvREFCNT_dec(ps->compcv); 510 YYPOPSTACK; 511 /* Pop the rest of the stack. */ 512 while (ps > parser->stack) { 513 YYDSYMPRINTF ("Error: popping", yystos[ps->state], &ps->val); 514 LEAVE_SCOPE(ps->savestack_ix); 515 if (yy_type_tab[yystos[ps->state]] == toketype_opval 516 && ps->val.opval) 517 { 518 YYDPRINTF ((Perl_debug_log, "(freeing op)\n")); 519 if (ps->compcv != PL_compcv) { 520 PL_compcv = ps->compcv; 521 PAD_SET_CUR_NOSAVE(CvPADLIST(PL_compcv), 1); 522 } 523 op_free(ps->val.opval); 524 } 525 SvREFCNT_dec(ps->compcv); 526 YYPOPSTACK; 527 } 528 YYABORT; 529 } 530 531 YYDSYMPRINTF ("Error: discarding", yytoken, &parser->yylval); 532 parser->yychar = YYEMPTY; 533 534 } 535 536 /* Else will try to reuse lookahead token after shifting the error 537 token. */ 538 goto yyerrlab1; 539 540 541 /*----------------------------------------------------. 542 | yyerrlab1 -- error raised explicitly by an action. | 543 `----------------------------------------------------*/ 544 yyerrlab1: 545 parser->yyerrstatus = 3; /* Each real token shifted decrements this. */ 546 547 for (;;) { 548 yyn = yypact[yystate]; 549 if (yyn != YYPACT_NINF) { 550 yyn += YYTERROR; 551 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { 552 yyn = yytable[yyn]; 553 if (0 < yyn) 554 break; 555 } 556 } 557 558 /* Pop the current state because it cannot handle the error token. */ 559 if (ps == parser->stack) 560 YYABORT; 561 562 YYDSYMPRINTF ("Error: popping", yystos[ps->state], &ps->val); 563 LEAVE_SCOPE(ps->savestack_ix); 564 if (yy_type_tab[yystos[ps->state]] == toketype_opval && ps->val.opval) { 565 YYDPRINTF ((Perl_debug_log, "(freeing op)\n")); 566 if (ps->compcv != PL_compcv) { 567 PL_compcv = ps->compcv; 568 PAD_SET_CUR_NOSAVE(CvPADLIST(PL_compcv), 1); 569 } 570 op_free(ps->val.opval); 571 } 572 SvREFCNT_dec(ps->compcv); 573 YYPOPSTACK; 574 yystate = ps->state; 575 576 YY_STACK_PRINT(parser); 577 } 578 579 if (yyn == YYFINAL) 580 YYACCEPT; 581 582 YYDPRINTF ((Perl_debug_log, "Shifting error token, ")); 583 584 YYPUSHSTACK; 585 ps->state = yyn; 586 ps->val = parser->yylval; 587 ps->compcv = (CV*)SvREFCNT_inc(PL_compcv); 588 ps->savestack_ix = PL_savestack_ix; 589#ifdef DEBUGGING 590 ps->name ="<err>"; 591#endif 592 593 goto yynewstate; 594 595 596 /*-------------------------------------. 597 | yyacceptlab -- YYACCEPT comes here. | 598 `-------------------------------------*/ 599 yyacceptlab: 600 yyresult = 0; 601 for (ps=parser->ps; ps > parser->stack; ps--) { 602 SvREFCNT_dec(ps->compcv); 603 } 604 parser->ps = parser->stack; /* disable cleanup */ 605 goto yyreturn; 606 607 /*-----------------------------------. 608 | yyabortlab -- YYABORT comes here. | 609 `-----------------------------------*/ 610 yyabortlab: 611 yyresult = 1; 612 goto yyreturn; 613 614 yyreturn: 615 LEAVE; /* force parser stack cleanup before we return */ 616 return yyresult; 617} 618 619/* 620 * Local variables: 621 * c-indentation-style: bsd 622 * c-basic-offset: 4 623 * indent-tabs-mode: nil 624 * End: 625 * 626 * ex: set ts=8 sts=4 sw=4 et: 627 */ 628