diff --git a/imcc/imcparser.c b/imcc/imcparser.c index 5ae1dd3779..47087d076b 100644 --- a/imcc/imcparser.c +++ b/imcc/imcparser.c @@ -303,14 +303,18 @@ static Instruction * iLABEL(SymReg * r0) { i->type = ITLABEL; r0->first_ins = i; i = emitb(i); + i->line = line; clear_state(); return i; } static Instruction * iSUBROUTINE(SymReg * r0) { + Instruction *i; function = r0->name; - return iLABEL(r0); /* XXX mark label global */ + i = iLABEL(r0); /* XXX mark label global */ + i->line = line - 1; + return i; } @@ -589,7 +593,7 @@ iANY(struct Parrot_Interp *interpreter, char * name, #endif #ifndef YYSTYPE -#line 398 "imcc.y" +#line 402 "imcc.y" typedef union { int t; char * s; @@ -597,7 +601,7 @@ typedef union { Instruction *i; } yystype; /* Line 193 of /usr/share/bison/yacc.c. */ -#line 601 "imcparser.c" +#line 605 "imcparser.c" # define YYSTYPE yystype # define YYSTYPE_IS_TRIVIAL 1 #endif @@ -618,7 +622,7 @@ typedef struct yyltype /* Line 213 of /usr/share/bison/yacc.c. */ -#line 622 "imcparser.c" +#line 626 "imcparser.c" #if ! defined (yyoverflow) || YYERROR_VERBOSE @@ -845,20 +849,20 @@ static const yysigned_char yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short yyrline[] = { - 0, 434, 434, 434, 442, 443, 446, 447, 450, 450, - 452, 454, 459, 458, 469, 476, 479, 479, 486, 487, - 490, 490, 494, 495, 498, 499, 502, 505, 507, 509, - 511, 512, 513, 514, 514, 515, 515, 517, 517, 519, - 520, 521, 522, 523, 525, 527, 528, 529, 530, 531, - 532, 533, 536, 538, 539, 540, 543, 547, 549, 550, - 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, - 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, - 571, 572, 574, 576, 578, 579, 580, 580, 582, 583, - 585, 588, 592, 595, 597, 599, 601, 606, 608, 609, - 610, 611, 612, 616, 617, 619, 620, 623, 624, 627, - 628, 631, 632, 636, 638, 639, 642, 643, 646, 646, - 650, 651, 654, 657, 658, 661, 662, 663, 664, 665, - 668, 669, 670, 673, 674 + 0, 438, 438, 438, 446, 447, 450, 451, 454, 454, + 456, 458, 463, 462, 473, 480, 483, 483, 490, 491, + 494, 494, 498, 499, 502, 503, 506, 509, 511, 513, + 515, 516, 517, 518, 518, 519, 519, 521, 521, 523, + 524, 525, 526, 527, 529, 531, 532, 533, 534, 535, + 536, 537, 540, 542, 543, 544, 547, 551, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, + 575, 576, 578, 580, 582, 583, 584, 584, 586, 587, + 589, 592, 596, 599, 601, 603, 605, 610, 612, 613, + 614, 615, 616, 620, 621, 623, 624, 627, 628, 631, + 632, 635, 636, 640, 642, 643, 646, 647, 650, 650, + 654, 655, 658, 661, 662, 665, 666, 667, 668, 669, + 672, 673, 674, 677, 678 }; #endif @@ -1665,12 +1669,12 @@ int yynerrs; switch (yyn) { case 2: -#line 434 "imcc.y" +#line 438 "imcc.y" { open_comp_unit(); } break; case 3: -#line 435 "imcc.y" +#line 439 "imcc.y" { yyval.i = 0; allocate(interp); emit_flush(interp); @@ -1678,45 +1682,45 @@ int yynerrs; break; case 6: -#line 446 "imcc.y" +#line 450 "imcc.y" { yyval.i = 0; } break; case 7: -#line 447 "imcc.y" +#line 451 "imcc.y" { yyval.i = 0; } break; case 8: -#line 450 "imcc.y" +#line 454 "imcc.y" {clear_state();} break; case 9: -#line 451 "imcc.y" +#line 455 "imcc.y" { yyval.i = iANY(interp, yyvsp[-1].s,0,regs,1); free(yyvsp[-1].s); } break; case 10: -#line 452 "imcc.y" +#line 456 "imcc.y" { yyval.i = 0;} break; case 12: -#line 459 "imcc.y" +#line 463 "imcc.y" { open_comp_unit(); function = "(emit)"; } break; case 13: -#line 462 "imcc.y" +#line 466 "imcc.y" { if (optimizer_level & OPT_PASM) allocate(interp); emit_flush(interp); yyval.i=0;} break; case 14: -#line 471 "imcc.y" +#line 475 "imcc.y" { yyval.i = 0; allocate(interp); @@ -1725,513 +1729,513 @@ int yynerrs; break; case 15: -#line 476 "imcc.y" +#line 480 "imcc.y" { yyval.i=0; } break; case 16: -#line 479 "imcc.y" +#line 483 "imcc.y" { open_comp_unit(); } break; case 17: -#line 481 "imcc.y" +#line 485 "imcc.y" { yyval.i = 0; iSUBROUTINE(mk_address(yyvsp[-1].s, U_add_uniq_sub)); } break; case 20: -#line 490 "imcc.y" +#line 494 "imcc.y" { clear_state(); } break; case 21: -#line 491 "imcc.y" +#line 495 "imcc.y" { yyval.i = yyvsp[0].i; } break; case 22: -#line 494 "imcc.y" +#line 498 "imcc.y" { yyval.i = NULL; } break; case 26: -#line 502 "imcc.y" +#line 506 "imcc.y" { yyval.i = iLABEL(mk_address(yyvsp[0].s, U_add_uniq_label)); } break; case 27: -#line 506 "imcc.y" +#line 510 "imcc.y" { yyval.i = yyvsp[-1].i; } break; case 31: -#line 512 "imcc.y" +#line 516 "imcc.y" { push_namespace(yyvsp[0].s); } break; case 32: -#line 513 "imcc.y" +#line 517 "imcc.y" { pop_namespace(yyvsp[0].s); } break; case 33: -#line 514 "imcc.y" +#line 518 "imcc.y" { is_def=1; } break; case 34: -#line 514 "imcc.y" +#line 518 "imcc.y" { mk_ident(yyvsp[0].s, yyvsp[-1].t);is_def=0; } break; case 35: -#line 515 "imcc.y" +#line 519 "imcc.y" { is_def=1; } break; case 36: -#line 516 "imcc.y" +#line 520 "imcc.y" { mk_const_ident(yyvsp[-2].s, yyvsp[-3].t, yyvsp[0].sr);is_def=0; } break; case 37: -#line 517 "imcc.y" +#line 521 "imcc.y" { is_def=1; } break; case 38: -#line 517 "imcc.y" +#line 521 "imcc.y" { yyval.i = MK_I(interp, "restore", R1(mk_ident(yyvsp[0].s, yyvsp[-1].t)));is_def=0; } break; case 39: -#line 519 "imcc.y" +#line 523 "imcc.y" { yyval.i = MK_I(interp, "restore", R1(yyvsp[0].sr)); } break; case 40: -#line 520 "imcc.y" +#line 524 "imcc.y" { yyval.i = MK_I(interp, "restore", R1(yyvsp[0].sr)); } break; case 41: -#line 521 "imcc.y" +#line 525 "imcc.y" { yyval.i = MK_I(interp, "save", R1(yyvsp[0].sr)); } break; case 42: -#line 522 "imcc.y" +#line 526 "imcc.y" { yyval.i = MK_I(interp, "save", R1(yyvsp[0].sr)); } break; case 43: -#line 523 "imcc.y" +#line 527 "imcc.y" { yyval.i = MK_I(interp, "bsr", R1(mk_address(yyvsp[0].s, U_add_once)));} break; case 44: -#line 525 "imcc.y" +#line 529 "imcc.y" { yyval.i = MK_I(interp, "branch", R1(mk_address(yyvsp[0].s, U_add_once)));} break; case 45: -#line 527 "imcc.y" +#line 531 "imcc.y" { yyval.i = MK_I(interp, "inc",R1(yyvsp[0].sr)); } break; case 46: -#line 528 "imcc.y" +#line 532 "imcc.y" { yyval.i = MK_I(interp, "dec",R1(yyvsp[0].sr)); } break; case 47: -#line 529 "imcc.y" +#line 533 "imcc.y" { yyval.i = MK_I(interp, "saveall" ,R0()); } break; case 48: -#line 530 "imcc.y" +#line 534 "imcc.y" { yyval.i = MK_I(interp, "restoreall" ,R0()); } break; case 49: -#line 531 "imcc.y" +#line 535 "imcc.y" { yyval.i = MK_I(interp, "end" ,R0()); } break; case 50: -#line 532 "imcc.y" +#line 536 "imcc.y" { yyval.i = iANY(interp, yyvsp[-1].s,0,regs, 1); free(yyvsp[-1].s); } break; case 51: -#line 533 "imcc.y" +#line 537 "imcc.y" { yyval.i = 0;} break; case 52: -#line 537 "imcc.y" +#line 541 "imcc.y" { yyval.t = 'I'; } break; case 53: -#line 538 "imcc.y" +#line 542 "imcc.y" { yyval.t = 'N'; } break; case 54: -#line 539 "imcc.y" +#line 543 "imcc.y" { yyval.t = 'S'; } break; case 55: -#line 540 "imcc.y" +#line 544 "imcc.y" { yyval.t = 'P'; free(yyvsp[0].s); } break; case 57: -#line 548 "imcc.y" +#line 552 "imcc.y" { yyval.i = MK_I(interp, "set", R2(yyvsp[-2].sr, yyvsp[0].sr)); } break; case 58: -#line 549 "imcc.y" +#line 553 "imcc.y" { yyval.i = MK_I(interp, "not", R2(yyvsp[-3].sr, yyvsp[0].sr));} break; case 59: -#line 550 "imcc.y" +#line 554 "imcc.y" { yyval.i = MK_I(interp, "neg", R2(yyvsp[-3].sr, yyvsp[0].sr));} break; case 60: -#line 551 "imcc.y" +#line 555 "imcc.y" { yyval.i = MK_I(interp, "bnot", R2(yyvsp[-3].sr, yyvsp[0].sr));} break; case 61: -#line 552 "imcc.y" +#line 556 "imcc.y" { yyval.i = MK_I(interp, "add", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 62: -#line 553 "imcc.y" +#line 557 "imcc.y" { yyval.i = MK_I(interp, "sub", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 63: -#line 554 "imcc.y" +#line 558 "imcc.y" { yyval.i = MK_I(interp, "mul", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 64: -#line 555 "imcc.y" +#line 559 "imcc.y" { yyval.i = MK_I(interp, "pow", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 65: -#line 556 "imcc.y" +#line 560 "imcc.y" { yyval.i = MK_I(interp, "div", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 66: -#line 557 "imcc.y" +#line 561 "imcc.y" { yyval.i = MK_I(interp, "mod", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 67: -#line 558 "imcc.y" +#line 562 "imcc.y" { yyval.i = MK_I(interp, "concat", R3(yyvsp[-4].sr,yyvsp[-2].sr,yyvsp[0].sr)); } break; case 68: -#line 559 "imcc.y" +#line 563 "imcc.y" { yyval.i = MK_I(interp, "shl", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 69: -#line 560 "imcc.y" +#line 564 "imcc.y" { yyval.i = MK_I(interp, "shr", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 70: -#line 561 "imcc.y" +#line 565 "imcc.y" { yyval.i = MK_I(interp, "lsr", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 71: -#line 562 "imcc.y" +#line 566 "imcc.y" { yyval.i = MK_I(interp, "and", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 72: -#line 563 "imcc.y" +#line 567 "imcc.y" { yyval.i = MK_I(interp, "or", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 73: -#line 564 "imcc.y" +#line 568 "imcc.y" { yyval.i = MK_I(interp, "xor", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 74: -#line 565 "imcc.y" +#line 569 "imcc.y" { yyval.i = MK_I(interp, "band", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 75: -#line 566 "imcc.y" +#line 570 "imcc.y" { yyval.i = MK_I(interp, "bor", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 76: -#line 567 "imcc.y" +#line 571 "imcc.y" { yyval.i = MK_I(interp, "bxor", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 77: -#line 568 "imcc.y" +#line 572 "imcc.y" { yyval.i = iINDEXFETCH(interp, yyvsp[-5].sr, yyvsp[-3].sr, yyvsp[-1].sr); } break; case 78: -#line 569 "imcc.y" +#line 573 "imcc.y" { yyval.i = iINDEXSET(interp, yyvsp[-5].sr, yyvsp[-3].sr, yyvsp[0].sr); } break; case 79: -#line 570 "imcc.y" +#line 574 "imcc.y" { yyval.i = iNEW(interp, yyvsp[-3].sr, yyvsp[0].s, 1); } break; case 80: -#line 571 "imcc.y" +#line 575 "imcc.y" { yyval.i = MK_I(interp, "defined",R2(yyvsp[-3].sr,yyvsp[0].sr)); } break; case 81: -#line 572 "imcc.y" +#line 576 "imcc.y" { keyvec=KEY_BIT(2); yyval.i = MK_I(interp, "defined", R3(yyvsp[-6].sr, yyvsp[-3].sr, yyvsp[-1].sr));} break; case 82: -#line 574 "imcc.y" +#line 578 "imcc.y" { yyval.i = MK_I(interp, "clone",R2(yyvsp[-3].sr, yyvsp[0].sr)); } break; case 83: -#line 576 "imcc.y" +#line 580 "imcc.y" { yyval.i = MK_I(interp, "set_addr", R2(yyvsp[-3].sr, mk_address(yyvsp[0].s,U_add_once))); } break; case 84: -#line 578 "imcc.y" +#line 582 "imcc.y" { yyval.i = MK_I(interp, "find_global",R2(yyvsp[-3].sr,yyvsp[0].sr)); } break; case 85: -#line 579 "imcc.y" +#line 583 "imcc.y" { yyval.i = MK_I(interp, "store_global",R2(yyvsp[-2].sr,yyvsp[0].sr)); } break; case 86: -#line 580 "imcc.y" +#line 584 "imcc.y" { expect_pasm = 1; } break; case 87: -#line 581 "imcc.y" +#line 585 "imcc.y" { yyval.i = MK_I(interp, "new", R2(yyvsp[-2].sr, yyvsp[0].sr)); } break; case 88: -#line 582 "imcc.y" +#line 586 "imcc.y" { yyval.i = MK_I(interp, "defined", R2(yyvsp[-2].sr, yyvsp[0].sr)); } break; case 89: -#line 583 "imcc.y" +#line 587 "imcc.y" { keyvec=KEY_BIT(2); yyval.i = MK_I(interp, "defined", R3(yyvsp[-5].sr, yyvsp[-3].sr, yyvsp[-1].sr));} break; case 90: -#line 585 "imcc.y" +#line 589 "imcc.y" { yyval.i = MK_I(interp, "clone", R2(yyvsp[-2].sr, yyvsp[0].sr)); } break; case 92: -#line 593 "imcc.y" +#line 597 "imcc.y" { yyval.i=MK_I(interp, yyvsp[-3].s,R3(yyvsp[-4].sr,yyvsp[-2].sr, mk_address(yyvsp[0].s,U_add_once))); } break; case 93: -#line 595 "imcc.y" +#line 599 "imcc.y" {yyval.i= MK_I(interp, "if", R2(yyvsp[-2].sr, mk_address(yyvsp[0].s, U_add_once))); } break; case 94: -#line 597 "imcc.y" +#line 601 "imcc.y" {yyval.i= MK_I(interp, "unless",R2(yyvsp[-2].sr, mk_address(yyvsp[0].s, U_add_once))); } break; case 95: -#line 599 "imcc.y" +#line 603 "imcc.y" { yyval.i= MK_I(interp, "if", R2(yyvsp[-2].sr, mk_address(yyvsp[0].s, U_add_once))); } break; case 96: -#line 601 "imcc.y" +#line 605 "imcc.y" { yyval.i= MK_I(interp, "unless", R2(yyvsp[-2].sr, mk_address(yyvsp[0].s, U_add_once))); } break; case 97: -#line 607 "imcc.y" +#line 611 "imcc.y" { yyval.s = "eq"; } break; case 98: -#line 608 "imcc.y" +#line 612 "imcc.y" { yyval.s = "ne"; } break; case 99: -#line 609 "imcc.y" +#line 613 "imcc.y" { yyval.s = "gt"; } break; case 100: -#line 610 "imcc.y" +#line 614 "imcc.y" { yyval.s = "ge"; } break; case 101: -#line 611 "imcc.y" +#line 615 "imcc.y" { yyval.s = "lt"; } break; case 102: -#line 612 "imcc.y" +#line 616 "imcc.y" { yyval.s = "le"; } break; case 107: -#line 623 "imcc.y" +#line 627 "imcc.y" { yyval.sr = NULL; } break; case 108: -#line 624 "imcc.y" +#line 628 "imcc.y" { yyval.sr = yyvsp[0].sr; } break; case 109: -#line 627 "imcc.y" +#line 631 "imcc.y" { yyval.sr = regs[0]; } break; case 111: -#line 631 "imcc.y" +#line 635 "imcc.y" { regs[nargs++] = yyvsp[0].sr; } break; case 112: -#line 632 "imcc.y" +#line 636 "imcc.y" { regs[nargs++] = yyvsp[-3].sr; keyvec |= KEY_BIT(nargs); regs[nargs++] = yyvsp[-1].sr; yyval.sr = yyvsp[-3].sr; } break; case 113: -#line 637 "imcc.y" +#line 641 "imcc.y" { yyval.sr = mk_address(yyvsp[0].s, U_add_once); } break; case 114: -#line 638 "imcc.y" +#line 642 "imcc.y" { yyval.sr = mk_address(yyvsp[0].s, U_add_once); } break; case 118: -#line 646 "imcc.y" +#line 650 "imcc.y" { nkeys=0; } break; case 119: -#line 647 "imcc.y" +#line 651 "imcc.y" { yyval.sr = link_keys(nkeys, keys); } break; case 120: -#line 650 "imcc.y" +#line 654 "imcc.y" { keys[nkeys++] = yyvsp[0].sr; } break; case 121: -#line 651 "imcc.y" +#line 655 "imcc.y" { keys[nkeys++] = yyvsp[0].sr; yyval.sr = keys[0]; } break; case 125: -#line 661 "imcc.y" +#line 665 "imcc.y" { yyval.sr = mk_symreg(yyvsp[0].s, 'I'); } break; case 126: -#line 662 "imcc.y" +#line 666 "imcc.y" { yyval.sr = mk_symreg(yyvsp[0].s, 'N'); } break; case 127: -#line 663 "imcc.y" +#line 667 "imcc.y" { yyval.sr = mk_symreg(yyvsp[0].s, 'S'); } break; case 128: -#line 664 "imcc.y" +#line 668 "imcc.y" { yyval.sr = mk_symreg(yyvsp[0].s, 'P'); } break; case 129: -#line 665 "imcc.y" +#line 669 "imcc.y" { yyval.sr = mk_pasm_reg(yyvsp[0].s); } break; case 130: -#line 668 "imcc.y" +#line 672 "imcc.y" { yyval.sr = mk_const(yyvsp[0].s, 'I'); } break; case 131: -#line 669 "imcc.y" +#line 673 "imcc.y" { yyval.sr = mk_const(yyvsp[0].s, 'N'); } break; case 132: -#line 670 "imcc.y" +#line 674 "imcc.y" { yyval.sr = mk_const(yyvsp[0].s, 'S'); } break; case 133: -#line 673 "imcc.y" +#line 677 "imcc.y" { yyval.sr = mk_symreg(yyvsp[0].s, 'S'); } break; case 134: -#line 674 "imcc.y" +#line 678 "imcc.y" { yyval.sr = mk_const(yyvsp[0].s, 'S'); } break; @@ -2239,7 +2243,7 @@ int yynerrs; } /* Line 1016 of /usr/share/bison/yacc.c. */ -#line 2243 "imcparser.c" +#line 2247 "imcparser.c" yyvsp -= yylen; yyssp -= yylen; @@ -2458,7 +2462,7 @@ int yynerrs; } -#line 676 "imcc.y" +#line 680 "imcc.y" diff --git a/imcc/imcparser.h b/imcc/imcparser.h index 536b9f428f..adbaebcfb1 100644 --- a/imcc/imcparser.h +++ b/imcc/imcparser.h @@ -159,7 +159,7 @@ #ifndef YYSTYPE -#line 398 "imcc.y" +#line 402 "imcc.y" typedef union { int t; char * s; diff --git a/languages/imcc/imcparser.c b/languages/imcc/imcparser.c index 5ae1dd3779..47087d076b 100644 --- a/languages/imcc/imcparser.c +++ b/languages/imcc/imcparser.c @@ -303,14 +303,18 @@ static Instruction * iLABEL(SymReg * r0) { i->type = ITLABEL; r0->first_ins = i; i = emitb(i); + i->line = line; clear_state(); return i; } static Instruction * iSUBROUTINE(SymReg * r0) { + Instruction *i; function = r0->name; - return iLABEL(r0); /* XXX mark label global */ + i = iLABEL(r0); /* XXX mark label global */ + i->line = line - 1; + return i; } @@ -589,7 +593,7 @@ iANY(struct Parrot_Interp *interpreter, char * name, #endif #ifndef YYSTYPE -#line 398 "imcc.y" +#line 402 "imcc.y" typedef union { int t; char * s; @@ -597,7 +601,7 @@ typedef union { Instruction *i; } yystype; /* Line 193 of /usr/share/bison/yacc.c. */ -#line 601 "imcparser.c" +#line 605 "imcparser.c" # define YYSTYPE yystype # define YYSTYPE_IS_TRIVIAL 1 #endif @@ -618,7 +622,7 @@ typedef struct yyltype /* Line 213 of /usr/share/bison/yacc.c. */ -#line 622 "imcparser.c" +#line 626 "imcparser.c" #if ! defined (yyoverflow) || YYERROR_VERBOSE @@ -845,20 +849,20 @@ static const yysigned_char yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short yyrline[] = { - 0, 434, 434, 434, 442, 443, 446, 447, 450, 450, - 452, 454, 459, 458, 469, 476, 479, 479, 486, 487, - 490, 490, 494, 495, 498, 499, 502, 505, 507, 509, - 511, 512, 513, 514, 514, 515, 515, 517, 517, 519, - 520, 521, 522, 523, 525, 527, 528, 529, 530, 531, - 532, 533, 536, 538, 539, 540, 543, 547, 549, 550, - 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, - 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, - 571, 572, 574, 576, 578, 579, 580, 580, 582, 583, - 585, 588, 592, 595, 597, 599, 601, 606, 608, 609, - 610, 611, 612, 616, 617, 619, 620, 623, 624, 627, - 628, 631, 632, 636, 638, 639, 642, 643, 646, 646, - 650, 651, 654, 657, 658, 661, 662, 663, 664, 665, - 668, 669, 670, 673, 674 + 0, 438, 438, 438, 446, 447, 450, 451, 454, 454, + 456, 458, 463, 462, 473, 480, 483, 483, 490, 491, + 494, 494, 498, 499, 502, 503, 506, 509, 511, 513, + 515, 516, 517, 518, 518, 519, 519, 521, 521, 523, + 524, 525, 526, 527, 529, 531, 532, 533, 534, 535, + 536, 537, 540, 542, 543, 544, 547, 551, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, + 575, 576, 578, 580, 582, 583, 584, 584, 586, 587, + 589, 592, 596, 599, 601, 603, 605, 610, 612, 613, + 614, 615, 616, 620, 621, 623, 624, 627, 628, 631, + 632, 635, 636, 640, 642, 643, 646, 647, 650, 650, + 654, 655, 658, 661, 662, 665, 666, 667, 668, 669, + 672, 673, 674, 677, 678 }; #endif @@ -1665,12 +1669,12 @@ int yynerrs; switch (yyn) { case 2: -#line 434 "imcc.y" +#line 438 "imcc.y" { open_comp_unit(); } break; case 3: -#line 435 "imcc.y" +#line 439 "imcc.y" { yyval.i = 0; allocate(interp); emit_flush(interp); @@ -1678,45 +1682,45 @@ int yynerrs; break; case 6: -#line 446 "imcc.y" +#line 450 "imcc.y" { yyval.i = 0; } break; case 7: -#line 447 "imcc.y" +#line 451 "imcc.y" { yyval.i = 0; } break; case 8: -#line 450 "imcc.y" +#line 454 "imcc.y" {clear_state();} break; case 9: -#line 451 "imcc.y" +#line 455 "imcc.y" { yyval.i = iANY(interp, yyvsp[-1].s,0,regs,1); free(yyvsp[-1].s); } break; case 10: -#line 452 "imcc.y" +#line 456 "imcc.y" { yyval.i = 0;} break; case 12: -#line 459 "imcc.y" +#line 463 "imcc.y" { open_comp_unit(); function = "(emit)"; } break; case 13: -#line 462 "imcc.y" +#line 466 "imcc.y" { if (optimizer_level & OPT_PASM) allocate(interp); emit_flush(interp); yyval.i=0;} break; case 14: -#line 471 "imcc.y" +#line 475 "imcc.y" { yyval.i = 0; allocate(interp); @@ -1725,513 +1729,513 @@ int yynerrs; break; case 15: -#line 476 "imcc.y" +#line 480 "imcc.y" { yyval.i=0; } break; case 16: -#line 479 "imcc.y" +#line 483 "imcc.y" { open_comp_unit(); } break; case 17: -#line 481 "imcc.y" +#line 485 "imcc.y" { yyval.i = 0; iSUBROUTINE(mk_address(yyvsp[-1].s, U_add_uniq_sub)); } break; case 20: -#line 490 "imcc.y" +#line 494 "imcc.y" { clear_state(); } break; case 21: -#line 491 "imcc.y" +#line 495 "imcc.y" { yyval.i = yyvsp[0].i; } break; case 22: -#line 494 "imcc.y" +#line 498 "imcc.y" { yyval.i = NULL; } break; case 26: -#line 502 "imcc.y" +#line 506 "imcc.y" { yyval.i = iLABEL(mk_address(yyvsp[0].s, U_add_uniq_label)); } break; case 27: -#line 506 "imcc.y" +#line 510 "imcc.y" { yyval.i = yyvsp[-1].i; } break; case 31: -#line 512 "imcc.y" +#line 516 "imcc.y" { push_namespace(yyvsp[0].s); } break; case 32: -#line 513 "imcc.y" +#line 517 "imcc.y" { pop_namespace(yyvsp[0].s); } break; case 33: -#line 514 "imcc.y" +#line 518 "imcc.y" { is_def=1; } break; case 34: -#line 514 "imcc.y" +#line 518 "imcc.y" { mk_ident(yyvsp[0].s, yyvsp[-1].t);is_def=0; } break; case 35: -#line 515 "imcc.y" +#line 519 "imcc.y" { is_def=1; } break; case 36: -#line 516 "imcc.y" +#line 520 "imcc.y" { mk_const_ident(yyvsp[-2].s, yyvsp[-3].t, yyvsp[0].sr);is_def=0; } break; case 37: -#line 517 "imcc.y" +#line 521 "imcc.y" { is_def=1; } break; case 38: -#line 517 "imcc.y" +#line 521 "imcc.y" { yyval.i = MK_I(interp, "restore", R1(mk_ident(yyvsp[0].s, yyvsp[-1].t)));is_def=0; } break; case 39: -#line 519 "imcc.y" +#line 523 "imcc.y" { yyval.i = MK_I(interp, "restore", R1(yyvsp[0].sr)); } break; case 40: -#line 520 "imcc.y" +#line 524 "imcc.y" { yyval.i = MK_I(interp, "restore", R1(yyvsp[0].sr)); } break; case 41: -#line 521 "imcc.y" +#line 525 "imcc.y" { yyval.i = MK_I(interp, "save", R1(yyvsp[0].sr)); } break; case 42: -#line 522 "imcc.y" +#line 526 "imcc.y" { yyval.i = MK_I(interp, "save", R1(yyvsp[0].sr)); } break; case 43: -#line 523 "imcc.y" +#line 527 "imcc.y" { yyval.i = MK_I(interp, "bsr", R1(mk_address(yyvsp[0].s, U_add_once)));} break; case 44: -#line 525 "imcc.y" +#line 529 "imcc.y" { yyval.i = MK_I(interp, "branch", R1(mk_address(yyvsp[0].s, U_add_once)));} break; case 45: -#line 527 "imcc.y" +#line 531 "imcc.y" { yyval.i = MK_I(interp, "inc",R1(yyvsp[0].sr)); } break; case 46: -#line 528 "imcc.y" +#line 532 "imcc.y" { yyval.i = MK_I(interp, "dec",R1(yyvsp[0].sr)); } break; case 47: -#line 529 "imcc.y" +#line 533 "imcc.y" { yyval.i = MK_I(interp, "saveall" ,R0()); } break; case 48: -#line 530 "imcc.y" +#line 534 "imcc.y" { yyval.i = MK_I(interp, "restoreall" ,R0()); } break; case 49: -#line 531 "imcc.y" +#line 535 "imcc.y" { yyval.i = MK_I(interp, "end" ,R0()); } break; case 50: -#line 532 "imcc.y" +#line 536 "imcc.y" { yyval.i = iANY(interp, yyvsp[-1].s,0,regs, 1); free(yyvsp[-1].s); } break; case 51: -#line 533 "imcc.y" +#line 537 "imcc.y" { yyval.i = 0;} break; case 52: -#line 537 "imcc.y" +#line 541 "imcc.y" { yyval.t = 'I'; } break; case 53: -#line 538 "imcc.y" +#line 542 "imcc.y" { yyval.t = 'N'; } break; case 54: -#line 539 "imcc.y" +#line 543 "imcc.y" { yyval.t = 'S'; } break; case 55: -#line 540 "imcc.y" +#line 544 "imcc.y" { yyval.t = 'P'; free(yyvsp[0].s); } break; case 57: -#line 548 "imcc.y" +#line 552 "imcc.y" { yyval.i = MK_I(interp, "set", R2(yyvsp[-2].sr, yyvsp[0].sr)); } break; case 58: -#line 549 "imcc.y" +#line 553 "imcc.y" { yyval.i = MK_I(interp, "not", R2(yyvsp[-3].sr, yyvsp[0].sr));} break; case 59: -#line 550 "imcc.y" +#line 554 "imcc.y" { yyval.i = MK_I(interp, "neg", R2(yyvsp[-3].sr, yyvsp[0].sr));} break; case 60: -#line 551 "imcc.y" +#line 555 "imcc.y" { yyval.i = MK_I(interp, "bnot", R2(yyvsp[-3].sr, yyvsp[0].sr));} break; case 61: -#line 552 "imcc.y" +#line 556 "imcc.y" { yyval.i = MK_I(interp, "add", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 62: -#line 553 "imcc.y" +#line 557 "imcc.y" { yyval.i = MK_I(interp, "sub", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 63: -#line 554 "imcc.y" +#line 558 "imcc.y" { yyval.i = MK_I(interp, "mul", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 64: -#line 555 "imcc.y" +#line 559 "imcc.y" { yyval.i = MK_I(interp, "pow", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 65: -#line 556 "imcc.y" +#line 560 "imcc.y" { yyval.i = MK_I(interp, "div", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 66: -#line 557 "imcc.y" +#line 561 "imcc.y" { yyval.i = MK_I(interp, "mod", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 67: -#line 558 "imcc.y" +#line 562 "imcc.y" { yyval.i = MK_I(interp, "concat", R3(yyvsp[-4].sr,yyvsp[-2].sr,yyvsp[0].sr)); } break; case 68: -#line 559 "imcc.y" +#line 563 "imcc.y" { yyval.i = MK_I(interp, "shl", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 69: -#line 560 "imcc.y" +#line 564 "imcc.y" { yyval.i = MK_I(interp, "shr", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 70: -#line 561 "imcc.y" +#line 565 "imcc.y" { yyval.i = MK_I(interp, "lsr", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 71: -#line 562 "imcc.y" +#line 566 "imcc.y" { yyval.i = MK_I(interp, "and", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 72: -#line 563 "imcc.y" +#line 567 "imcc.y" { yyval.i = MK_I(interp, "or", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 73: -#line 564 "imcc.y" +#line 568 "imcc.y" { yyval.i = MK_I(interp, "xor", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 74: -#line 565 "imcc.y" +#line 569 "imcc.y" { yyval.i = MK_I(interp, "band", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 75: -#line 566 "imcc.y" +#line 570 "imcc.y" { yyval.i = MK_I(interp, "bor", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 76: -#line 567 "imcc.y" +#line 571 "imcc.y" { yyval.i = MK_I(interp, "bxor", R3(yyvsp[-4].sr, yyvsp[-2].sr, yyvsp[0].sr)); } break; case 77: -#line 568 "imcc.y" +#line 572 "imcc.y" { yyval.i = iINDEXFETCH(interp, yyvsp[-5].sr, yyvsp[-3].sr, yyvsp[-1].sr); } break; case 78: -#line 569 "imcc.y" +#line 573 "imcc.y" { yyval.i = iINDEXSET(interp, yyvsp[-5].sr, yyvsp[-3].sr, yyvsp[0].sr); } break; case 79: -#line 570 "imcc.y" +#line 574 "imcc.y" { yyval.i = iNEW(interp, yyvsp[-3].sr, yyvsp[0].s, 1); } break; case 80: -#line 571 "imcc.y" +#line 575 "imcc.y" { yyval.i = MK_I(interp, "defined",R2(yyvsp[-3].sr,yyvsp[0].sr)); } break; case 81: -#line 572 "imcc.y" +#line 576 "imcc.y" { keyvec=KEY_BIT(2); yyval.i = MK_I(interp, "defined", R3(yyvsp[-6].sr, yyvsp[-3].sr, yyvsp[-1].sr));} break; case 82: -#line 574 "imcc.y" +#line 578 "imcc.y" { yyval.i = MK_I(interp, "clone",R2(yyvsp[-3].sr, yyvsp[0].sr)); } break; case 83: -#line 576 "imcc.y" +#line 580 "imcc.y" { yyval.i = MK_I(interp, "set_addr", R2(yyvsp[-3].sr, mk_address(yyvsp[0].s,U_add_once))); } break; case 84: -#line 578 "imcc.y" +#line 582 "imcc.y" { yyval.i = MK_I(interp, "find_global",R2(yyvsp[-3].sr,yyvsp[0].sr)); } break; case 85: -#line 579 "imcc.y" +#line 583 "imcc.y" { yyval.i = MK_I(interp, "store_global",R2(yyvsp[-2].sr,yyvsp[0].sr)); } break; case 86: -#line 580 "imcc.y" +#line 584 "imcc.y" { expect_pasm = 1; } break; case 87: -#line 581 "imcc.y" +#line 585 "imcc.y" { yyval.i = MK_I(interp, "new", R2(yyvsp[-2].sr, yyvsp[0].sr)); } break; case 88: -#line 582 "imcc.y" +#line 586 "imcc.y" { yyval.i = MK_I(interp, "defined", R2(yyvsp[-2].sr, yyvsp[0].sr)); } break; case 89: -#line 583 "imcc.y" +#line 587 "imcc.y" { keyvec=KEY_BIT(2); yyval.i = MK_I(interp, "defined", R3(yyvsp[-5].sr, yyvsp[-3].sr, yyvsp[-1].sr));} break; case 90: -#line 585 "imcc.y" +#line 589 "imcc.y" { yyval.i = MK_I(interp, "clone", R2(yyvsp[-2].sr, yyvsp[0].sr)); } break; case 92: -#line 593 "imcc.y" +#line 597 "imcc.y" { yyval.i=MK_I(interp, yyvsp[-3].s,R3(yyvsp[-4].sr,yyvsp[-2].sr, mk_address(yyvsp[0].s,U_add_once))); } break; case 93: -#line 595 "imcc.y" +#line 599 "imcc.y" {yyval.i= MK_I(interp, "if", R2(yyvsp[-2].sr, mk_address(yyvsp[0].s, U_add_once))); } break; case 94: -#line 597 "imcc.y" +#line 601 "imcc.y" {yyval.i= MK_I(interp, "unless",R2(yyvsp[-2].sr, mk_address(yyvsp[0].s, U_add_once))); } break; case 95: -#line 599 "imcc.y" +#line 603 "imcc.y" { yyval.i= MK_I(interp, "if", R2(yyvsp[-2].sr, mk_address(yyvsp[0].s, U_add_once))); } break; case 96: -#line 601 "imcc.y" +#line 605 "imcc.y" { yyval.i= MK_I(interp, "unless", R2(yyvsp[-2].sr, mk_address(yyvsp[0].s, U_add_once))); } break; case 97: -#line 607 "imcc.y" +#line 611 "imcc.y" { yyval.s = "eq"; } break; case 98: -#line 608 "imcc.y" +#line 612 "imcc.y" { yyval.s = "ne"; } break; case 99: -#line 609 "imcc.y" +#line 613 "imcc.y" { yyval.s = "gt"; } break; case 100: -#line 610 "imcc.y" +#line 614 "imcc.y" { yyval.s = "ge"; } break; case 101: -#line 611 "imcc.y" +#line 615 "imcc.y" { yyval.s = "lt"; } break; case 102: -#line 612 "imcc.y" +#line 616 "imcc.y" { yyval.s = "le"; } break; case 107: -#line 623 "imcc.y" +#line 627 "imcc.y" { yyval.sr = NULL; } break; case 108: -#line 624 "imcc.y" +#line 628 "imcc.y" { yyval.sr = yyvsp[0].sr; } break; case 109: -#line 627 "imcc.y" +#line 631 "imcc.y" { yyval.sr = regs[0]; } break; case 111: -#line 631 "imcc.y" +#line 635 "imcc.y" { regs[nargs++] = yyvsp[0].sr; } break; case 112: -#line 632 "imcc.y" +#line 636 "imcc.y" { regs[nargs++] = yyvsp[-3].sr; keyvec |= KEY_BIT(nargs); regs[nargs++] = yyvsp[-1].sr; yyval.sr = yyvsp[-3].sr; } break; case 113: -#line 637 "imcc.y" +#line 641 "imcc.y" { yyval.sr = mk_address(yyvsp[0].s, U_add_once); } break; case 114: -#line 638 "imcc.y" +#line 642 "imcc.y" { yyval.sr = mk_address(yyvsp[0].s, U_add_once); } break; case 118: -#line 646 "imcc.y" +#line 650 "imcc.y" { nkeys=0; } break; case 119: -#line 647 "imcc.y" +#line 651 "imcc.y" { yyval.sr = link_keys(nkeys, keys); } break; case 120: -#line 650 "imcc.y" +#line 654 "imcc.y" { keys[nkeys++] = yyvsp[0].sr; } break; case 121: -#line 651 "imcc.y" +#line 655 "imcc.y" { keys[nkeys++] = yyvsp[0].sr; yyval.sr = keys[0]; } break; case 125: -#line 661 "imcc.y" +#line 665 "imcc.y" { yyval.sr = mk_symreg(yyvsp[0].s, 'I'); } break; case 126: -#line 662 "imcc.y" +#line 666 "imcc.y" { yyval.sr = mk_symreg(yyvsp[0].s, 'N'); } break; case 127: -#line 663 "imcc.y" +#line 667 "imcc.y" { yyval.sr = mk_symreg(yyvsp[0].s, 'S'); } break; case 128: -#line 664 "imcc.y" +#line 668 "imcc.y" { yyval.sr = mk_symreg(yyvsp[0].s, 'P'); } break; case 129: -#line 665 "imcc.y" +#line 669 "imcc.y" { yyval.sr = mk_pasm_reg(yyvsp[0].s); } break; case 130: -#line 668 "imcc.y" +#line 672 "imcc.y" { yyval.sr = mk_const(yyvsp[0].s, 'I'); } break; case 131: -#line 669 "imcc.y" +#line 673 "imcc.y" { yyval.sr = mk_const(yyvsp[0].s, 'N'); } break; case 132: -#line 670 "imcc.y" +#line 674 "imcc.y" { yyval.sr = mk_const(yyvsp[0].s, 'S'); } break; case 133: -#line 673 "imcc.y" +#line 677 "imcc.y" { yyval.sr = mk_symreg(yyvsp[0].s, 'S'); } break; case 134: -#line 674 "imcc.y" +#line 678 "imcc.y" { yyval.sr = mk_const(yyvsp[0].s, 'S'); } break; @@ -2239,7 +2243,7 @@ int yynerrs; } /* Line 1016 of /usr/share/bison/yacc.c. */ -#line 2243 "imcparser.c" +#line 2247 "imcparser.c" yyvsp -= yylen; yyssp -= yylen; @@ -2458,7 +2462,7 @@ int yynerrs; } -#line 676 "imcc.y" +#line 680 "imcc.y" diff --git a/languages/imcc/imcparser.h b/languages/imcc/imcparser.h index 536b9f428f..adbaebcfb1 100644 --- a/languages/imcc/imcparser.h +++ b/languages/imcc/imcparser.h @@ -159,7 +159,7 @@ #ifndef YYSTYPE -#line 398 "imcc.y" +#line 402 "imcc.y" typedef union { int t; char * s;