1# THIS IS A GENERATED FILE! DO NOT EDIT! 2# Compiled with Winxed 1.10.-1 3# Source file: winxedst2.winxed 4# Begin generated code 5 6.namespace [ 'Winxed'; 'Compiler' ] 7 8.sub 'getVersion' :subid('getVersion') :anon 9 new $P1, ['FixedIntegerArray'], 3 10 $P1[0] = 1 11 $P1[1] = 10 12 $P1[2] = -1 13 .return($P1) 14 15.end # getVersion 16 17 18.sub 'getVersionString' :subid('getVersionString') :anon 19.const 'Sub' getVersion = "getVersion" 20 $P1 = getVersion() 21 join $S1, ".", $P1 22 concat $S2, "Winxed ", $S1 23 .return($S2) 24 25.end # getVersionString 26 27 28.sub 'sformat' :subid('sformat') 29 .param string __ARG_1 30 .param pmc __ARG_2 :slurpy 31 new $P1, [ 'StringBuilder' ] 32 $P1.'append_format'(__ARG_1, __ARG_2 :flat) 33 set $S1, $P1 34 .return($S1) 35 36.end # sformat 37 38 39.sub 'bindfirst' :subid('bindfirst') 40 .param pmc __ARG_1 41 .param pmc __ARG_2 :slurpy 42.const 'Sub' WSubId_2 = "WSubId_2" 43.lex '__WLEX_1', __ARG_1 44.lex '__WLEX_2', __ARG_2 45 newclosure $P1, WSubId_2 46 .return($P1) 47 48.end # bindfirst 49 50 51.sub '' :anon :subid('WSubId_2') :outer('bindfirst') 52 .param pmc __ARG_3 :slurpy 53 find_lex $P1, '__WLEX_1' 54 find_lex $P2, '__WLEX_2' 55 .tailcall $P1($P2 :flat, __ARG_3 :flat) 56 57.end # WSubId_2 58 59 60.sub 'bindlast' :subid('bindlast') 61 .param pmc __ARG_1 62 .param pmc __ARG_2 :slurpy 63.const 'Sub' WSubId_4 = "WSubId_4" 64.lex '__WLEX_1', __ARG_1 65.lex '__WLEX_2', __ARG_2 66 newclosure $P1, WSubId_4 67 .return($P1) 68 69.end # bindlast 70 71 72.sub '' :anon :subid('WSubId_4') :outer('bindlast') 73 .param pmc __ARG_3 :slurpy 74 find_lex $P1, '__WLEX_1' 75 find_lex $P2, '__WLEX_2' 76 .tailcall $P1(__ARG_3 :flat, $P2 :flat) 77 78.end # WSubId_4 79 80 81.sub 'bindmethod' :subid('bindmethod') 82 .param string __ARG_1 83.const 'Sub' WSubId_6 = "WSubId_6" 84.lex '__WLEX_1', __ARG_1 85 newclosure $P1, WSubId_6 86 .return($P1) 87 88.end # bindmethod 89 90 91.sub '' :anon :subid('WSubId_6') :outer('bindmethod') 92 .param pmc __ARG_2 93 .param pmc __ARG_3 :slurpy 94 find_lex $S1, '__WLEX_1' 95 find_lex $S2, '__WLEX_1' 96 .tailcall __ARG_2.$S2(__ARG_3 :flat) 97 98.end # WSubId_6 99 100 101.sub 'method_fun' :subid('method_fun') 102 .param pmc __ARG_1 103 .param string __ARG_2 104.const 'Sub' WSubId_8 = "WSubId_8" 105.lex '__WLEX_1', __ARG_1 106.lex '__WLEX_2', $P1 107 find_method $P1, __ARG_1, __ARG_2 108 newclosure $P2, WSubId_8 109 .return($P2) 110 111.end # method_fun 112 113 114.sub '' :anon :subid('WSubId_8') :outer('method_fun') 115 .param pmc __ARG_3 :slurpy 116 find_lex $P1, '__WLEX_1' 117 find_lex $P2, '__WLEX_2' 118 .tailcall $P1.$P2(__ARG_3 :flat) 119 120.end # WSubId_8 121 122 123.sub 'addprefix' :subid('WSubId_9') 124 .param string __ARG_1 125.const 'Sub' WSubId_10 = "WSubId_10" 126.lex '__WLEX_1', __ARG_1 127 newclosure $P1, WSubId_10 128 .return($P1) 129 130.end # addprefix 131 132 133.sub '' :anon :subid('WSubId_10') :outer('WSubId_9') 134 .param string __ARG_2 135 find_lex $S1, '__WLEX_1' 136 find_lex $S2, '__WLEX_1' 137 concat $S3, $S2, __ARG_2 138 .return($S3) 139 140.end # WSubId_10 141 142.namespace [ 'Winxed'; 'Compiler'; 'WinxedCompilerError' ] 143 144.sub 'WinxedCompilerError' :method 145 .param string __ARG_1 146 .param string __ARG_2 147 .param string __ARG_3 :optional 148 .param int __ARG_4 :optional 149 box $P1, __ARG_1 150 setattribute self, 'type', $P1 151 box $P1, __ARG_2 152 setattribute self, 'message', $P1 153 box $P1, __ARG_3 154 setattribute self, 'filename', $P1 155 box $P1, __ARG_4 156 setattribute self, 'line', $P1 157 158.end # WinxedCompilerError 159 160.sub Winxed_class_init :anon :load :init 161 newclass $P0, [ 'Winxed'; 'Compiler'; 'WinxedCompilerError' ] 162 addattribute $P0, 'type' 163 addattribute $P0, 'filename' 164 addattribute $P0, 'line' 165 addattribute $P0, 'message' 166.end 167.namespace [ 'Winxed'; 'Compiler' ] 168 169.sub 'Warn' :subid('Warn') 170 .param string __ARG_1 171 .param pmc __ARG_2 :optional 172 getstderr $P1 173 $P1.'print'("WARNING: ") 174 $P1.'print'(__ARG_1) 175 if_null __ARG_2, __label_1 176 $P1.'print'(" near ") 177 $P2 = __ARG_2.'show'() 178 $P1.'print'($P2) 179 __label_1: # endif 180 $P1.'print'("\n") 181 182.end # Warn 183 184 185.sub 'InternalError' :subid('InternalError') 186 .param string __ARG_1 187 .param pmc __ARG_2 :optional 188 .param int __ARG_3 :opt_flag 189 unless __ARG_3 goto __label_1 190 __ARG_2 = __ARG_2.'getstart'() 191 $P2 = __ARG_2.'show'() 192 null $S1 193 if_null $P2, __label_2 194 set $S1, $P2 195 __label_2: 196 concat $S2, __ARG_1, " near " 197 concat $S2, $S2, $S1 198 set __ARG_1, $S2 199 __label_1: # endif 200 unless __ARG_3 goto __label_4 201 new $P2, [ 'Winxed'; 'Compiler'; 'WinxedCompilerError' ] 202 $P3 = __ARG_2.'filename'() 203 $P4 = __ARG_2.'linenum'() 204 $P2.'WinxedCompilerError'("internal", __ARG_1, $P3, $P4) 205 set $P1, $P2 206 goto __label_3 207 __label_4: 208 new $P6, [ 'Winxed'; 'Compiler'; 'WinxedCompilerError' ] 209 $P6.'WinxedCompilerError'("internal", __ARG_1) 210 set $P5, $P6 211 set $P1, $P5 212 __label_3: 213 root_new $P2, ["parrot";"Exception"] 214 $P2["message"] = __ARG_1 215 $P2["severity"] = 2 216 $P2["type"] = 567 217 $P2["payload"] = $P1 218 throw $P2 219 220.end # InternalError 221 222 223.sub 'SyntaxError' :subid('SyntaxError') 224 .param string __ARG_1 225 .param pmc __ARG_2 226 if_null __ARG_2, __label_1 227 __ARG_2 = __ARG_2.'getstart'() 228 __label_1: # endif 229 if_null __ARG_2, __label_3 230 $P1 = __ARG_2.'linenum'() 231 goto __label_2 232 __label_3: 233 box $P1, -1 234 __label_2: 235 set $I1, $P1 236 if_null __ARG_2, __label_5 237 $P1 = __ARG_2.'filename'() 238 goto __label_4 239 __label_5: 240 box $P1, "UNKNOWN" 241 __label_4: 242 null $S1 243 if_null $P1, __label_6 244 set $S1, $P1 245 __label_6: 246 $S3 = __ARG_2.'viewable'() 247 concat $S2, " near ", $S3 248 set $S3, $I1 249 concat $S4, __ARG_1, " in " 250 concat $S4, $S4, $S1 251 concat $S4, $S4, " line " 252 concat $S4, $S4, $S3 253 concat $S4, $S4, $S2 254 new $P3, [ 'Winxed'; 'Compiler'; 'WinxedCompilerError' ] 255 concat $S5, __ARG_1, $S2 256 $P3.'WinxedCompilerError'("parser", $S5, $S1, $I1) 257 set $P2, $P3 258 root_new $P1, ["parrot";"Exception"] 259 $P1["message"] = $S4 260 $P1["severity"] = 2 261 $P1["type"] = 567 262 $P1["payload"] = $P2 263 throw $P1 264 265.end # SyntaxError 266 267 268.sub 'NoLeftSide' :subid('WSubId_99') 269 .param pmc __ARG_1 270.const 'Sub' SyntaxError = "SyntaxError" 271 SyntaxError("Not a left-side expression", __ARG_1) 272 273.end # NoLeftSide 274 275 276.sub 'Expected' :subid('Expected') 277 .param string __ARG_1 278 .param pmc __ARG_2 279.const 'Sub' SyntaxError = "SyntaxError" 280 concat $S1, "Expected ", __ARG_1 281 SyntaxError($S1, __ARG_2) 282 283.end # Expected 284 285 286.sub 'Unexpected' :subid('WSubId_80') 287 .param string __ARG_1 288 .param pmc __ARG_2 289.const 'Sub' SyntaxError = "SyntaxError" 290 concat $S1, "Unexpected ", __ARG_1 291 SyntaxError($S1, __ARG_2) 292 293.end # Unexpected 294 295 296.sub 'ExpectedIdentifier' :subid('bindlast0') 297 .param pmc __ARG_1 298.const 'Sub' SyntaxError = "SyntaxError" 299 SyntaxError("Expected identifier", __ARG_1) 300 301.end # ExpectedIdentifier 302 303 304.sub 'ExpectedOp' :subid('WSubId_29') 305 .param string __ARG_1 306 .param pmc __ARG_2 307.const 'Sub' SyntaxError = "SyntaxError" 308 concat $S1, "Expected '", __ARG_1 309 concat $S1, $S1, "'" 310 SyntaxError($S1, __ARG_2) 311 312.end # ExpectedOp 313 314 315.sub 'RequireOp' :subid('bindlast1') 316 .param string __ARG_1 317 .param pmc __ARG_2 318.const 'Sub' WSubId_29 = "WSubId_29" 319 $P1 = __ARG_2.'isop'(__ARG_1) 320 if $P1 goto __label_1 321 WSubId_29(__ARG_1, __ARG_2) 322 __label_1: # endif 323 324.end # RequireOp 325 326 327.sub 'RequireKeyword' :subid('bindlast2') 328 .param string __ARG_1 329 .param pmc __ARG_2 330.const 'Sub' WSubId_29 = "WSubId_29" 331 $P1 = __ARG_2.'iskeyword'(__ARG_1) 332 if $P1 goto __label_1 333 WSubId_29(__ARG_1, __ARG_2) 334 __label_1: # endif 335 336.end # RequireKeyword 337 338 339.sub 'RequireIdentifier' :subid('RequireIdentifier') 340 .param pmc __ARG_1 341.const 'Sub' bindlast0 = "bindlast0" 342 $P1 = __ARG_1.'isidentifier'() 343 if $P1 goto __label_1 344 bindlast0(__ARG_1) 345 __label_1: # endif 346 347.end # RequireIdentifier 348 349 350.sub 'ExpectOp' :subid('ExpectOp') 351 .param string __ARG_1 352 .param pmc __ARG_2 353.const 'Sub' bindlast1 = "bindlast1" 354 $P1 = __ARG_2.'get'() 355 bindlast1(__ARG_1, $P1) 356 357.end # ExpectOp 358 359 360.sub 'ExpectKeyword' :subid('WSubId_135') 361 .param string __ARG_1 362 .param pmc __ARG_2 363.const 'Sub' bindlast2 = "bindlast2" 364 $P1 = __ARG_2.'get'() 365 bindlast2(__ARG_1, $P1) 366 367.end # ExpectKeyword 368 369 370.sub 'UndefinedVariable' :subid('WSubId_102') 371 .param string __ARG_1 372 .param pmc __ARG_2 373.const 'Sub' SyntaxError = "SyntaxError" 374 concat $S1, "Variable '", __ARG_1 375 concat $S1, $S1, "' is not defined" 376 SyntaxError($S1, __ARG_2) 377 378.end # UndefinedVariable 379 380 381.sub 'Redeclared' :subid('WSubId_98') 382 .param pmc __ARG_1 383.const 'Sub' SyntaxError = "SyntaxError" 384 $S1 = __ARG_1.'getidentifier'() 385 concat $S2, "Redeclared '", $S1 386 concat $S2, $S2, "'" 387 SyntaxError($S2, __ARG_1) 388 389.end # Redeclared 390 391.namespace [ 'Winxed'; 'Compiler'; 'Token' ] 392 393.sub 'Token' :method 394 .param string __ARG_1 395 .param int __ARG_2 396 box $P1, __ARG_1 397 setattribute self, 'file', $P1 398 box $P1, __ARG_2 399 setattribute self, 'line', $P1 400 401.end # Token 402 403 404.sub 'getstart' :method 405 .return(self) 406 407.end # getstart 408 409 410.sub 'iseof' :method 411 .return(0) 412 413.end # iseof 414 415 416.sub 'iscomment' :method 417 .return(0) 418 419.end # iscomment 420 421 422.sub 'isidentifier' :method 423 .return(0) 424 425.end # isidentifier 426 427 428.sub 'isint' :method 429 .return(0) 430 431.end # isint 432 433 434.sub 'isfloat' :method 435 .return(0) 436 437.end # isfloat 438 439 440.sub 'isstring' :method 441 .return(0) 442 443.end # isstring 444 445 446.sub 'issinglequoted' :method 447 .return(0) 448 449.end # issinglequoted 450 451 452.sub 'getintvalue' :method 453.const 'Sub' InternalError = "InternalError" 454 InternalError("Not a literal int", self) 455 456.end # getintvalue 457 458 459.sub 'rawstring' :method 460.const 'Sub' InternalError = "InternalError" 461 InternalError("Not a literal string", self) 462 463.end # rawstring 464 465 466.sub 'getidentifier' :method 467.const 'Sub' bindlast0 = "bindlast0" 468 bindlast0(self) 469 470.end # getidentifier 471 472 473.sub 'iskeyword' :method 474 .param string __ARG_1 475 .return(0) 476 477.end # iskeyword 478 479 480.sub 'checkkeyword' :method 481 .return(0) 482 483.end # checkkeyword 484 485 486.sub 'isop' :method 487 .param string __ARG_1 488 .return(0) 489 490.end # isop 491 492 493.sub 'checkop' :method 494 .return("") 495 496.end # checkop 497 498 499.sub 'viewable' :method 500 .return("(unknown)") 501 502.end # viewable 503 504 505.sub 'filename' :method 506 getattribute $P1, self, 'file' 507 .return($P1) 508 509.end # filename 510 511 512.sub 'linenum' :method 513 getattribute $P1, self, 'line' 514 .return($P1) 515 516.end # linenum 517 518 519.sub 'show' :method 520 $P1 = self.'viewable'() 521 null $S1 522 if_null $P1, __label_1 523 set $S1, $P1 524 __label_1: 525 getattribute $P1, self, 'file' 526 set $S2, $P1 527 getattribute $P2, self, 'line' 528 set $S3, $P2 529 concat $S4, $S1, " at " 530 concat $S4, $S4, $S2 531 concat $S4, $S4, " line " 532 concat $S4, $S4, $S3 533 .return($S4) 534 535.end # show 536 537.sub Winxed_class_init :anon :load :init 538 newclass $P0, [ 'Winxed'; 'Compiler'; 'Token' ] 539 addattribute $P0, 'file' 540 addattribute $P0, 'line' 541.end 542.namespace [ 'Winxed'; 'Compiler'; 'TokenEof' ] 543 544.sub 'TokenEof' :method 545 .param string __ARG_1 546 self.'Token'(__ARG_1, 0) 547 548.end # TokenEof 549 550 551.sub 'iseof' :method 552 .return(1) 553 554.end # iseof 555 556 557.sub 'viewable' :method 558 .return("(End of file)") 559 560.end # viewable 561 562.sub Winxed_class_init :anon :load :init 563 newclass $P0, [ 'Winxed'; 'Compiler'; 'TokenEof' ] 564 get_class $P1, [ 'Winxed'; 'Compiler'; 'Token' ] 565 addparent $P0, $P1 566.end 567.namespace [ 'Winxed'; 'Compiler'; 'TokenWithVal' ] 568 569.sub 'TokenWithVal' :method 570 .param string __ARG_1 571 .param int __ARG_2 572 .param string __ARG_3 573 self.'Token'(__ARG_1, __ARG_2) 574 box $P1, __ARG_3 575 setattribute self, 'str', $P1 576 577.end # TokenWithVal 578 579 580.sub 'get_string' :method :vtable 581 getattribute $P1, self, 'str' 582 .return($P1) 583 584.end # get_string 585 586 587.sub 'viewable' :method 588 getattribute $P1, self, 'str' 589 .return($P1) 590 591.end # viewable 592 593.sub Winxed_class_init :anon :load :init 594 newclass $P0, [ 'Winxed'; 'Compiler'; 'TokenWithVal' ] 595 get_class $P1, [ 'Winxed'; 'Compiler'; 'Token' ] 596 addparent $P0, $P1 597 addattribute $P0, 'str' 598.end 599.namespace [ 'Winxed'; 'Compiler'; 'TokenComment' ] 600 601.sub 'TokenComment' :method 602 .param string __ARG_1 603 .param int __ARG_2 604 self.'Token'(__ARG_1, __ARG_2) 605 606.end # TokenComment 607 608 609.sub 'iscomment' :method 610 .return(1) 611 612.end # iscomment 613 614 615.sub 'viewable' :method 616 .return("(comment)") 617 618.end # viewable 619 620.sub Winxed_class_init :anon :load :init 621 newclass $P0, [ 'Winxed'; 'Compiler'; 'TokenComment' ] 622 get_class $P1, [ 'Winxed'; 'Compiler'; 'Token' ] 623 addparent $P0, $P1 624.end 625.namespace [ 'Winxed'; 'Compiler'; 'TokenOp' ] 626 627.sub 'TokenOp' :method 628 .param string __ARG_1 629 .param int __ARG_2 630 .param string __ARG_3 631 self.'TokenWithVal'(__ARG_1, __ARG_2, __ARG_3) 632 633.end # TokenOp 634 635 636.sub 'isop' :method 637 .param string __ARG_1 638 getattribute $P1, self, 'str' 639 set $S1, $P1 640 iseq $I1, $S1, __ARG_1 641 .return($I1) 642 643.end # isop 644 645 646.sub 'checkop' :method 647 getattribute $P1, self, 'str' 648 set $S1, $P1 649 .return($S1) 650 651.end # checkop 652 653.sub Winxed_class_init :anon :load :init 654 newclass $P0, [ 'Winxed'; 'Compiler'; 'TokenOp' ] 655 get_class $P1, [ 'Winxed'; 'Compiler'; 'TokenWithVal' ] 656 addparent $P0, $P1 657.end 658.namespace [ 'Winxed'; 'Compiler'; 'TokenIdentifier' ] 659 660.sub 'TokenIdentifier' :method 661 .param string __ARG_1 662 .param int __ARG_2 663 .param string __ARG_3 664 self.'TokenWithVal'(__ARG_1, __ARG_2, __ARG_3) 665 666.end # TokenIdentifier 667 668 669.sub 'isidentifier' :method 670 .return(1) 671 672.end # isidentifier 673 674 675.sub 'getidentifier' :method 676 getattribute $P1, self, 'str' 677 .return($P1) 678 679.end # getidentifier 680 681 682.sub 'checkkeyword' :method 683 getattribute $P1, self, 'str' 684 set $S1, $P1 685 .return($S1) 686 687.end # checkkeyword 688 689 690.sub 'iskeyword' :method 691 .param string __ARG_1 692 getattribute $P1, self, 'str' 693 set $S1, $P1 694 iseq $I1, $S1, __ARG_1 695 .return($I1) 696 697.end # iskeyword 698 699.sub Winxed_class_init :anon :load :init 700 newclass $P0, [ 'Winxed'; 'Compiler'; 'TokenIdentifier' ] 701 get_class $P1, [ 'Winxed'; 'Compiler'; 'TokenWithVal' ] 702 addparent $P0, $P1 703.end 704.namespace [ 'Winxed'; 'Compiler'; 'TokenString' ] 705 706.sub 'isstring' :method 707 .return(1) 708 709.end # isstring 710 711 712.sub 'rawstring' :method 713 getattribute $P1, self, 'str' 714 .return($P1) 715 716.end # rawstring 717 718.sub Winxed_class_init :anon :load :init 719 newclass $P0, [ 'Winxed'; 'Compiler'; 'TokenString' ] 720 get_class $P1, [ 'Winxed'; 'Compiler'; 'TokenWithVal' ] 721 addparent $P0, $P1 722.end 723.namespace [ 'Winxed'; 'Compiler'; 'TokenQuoted' ] 724 725.sub 'TokenQuoted' :method 726 .param string __ARG_1 727 .param int __ARG_2 728 .param string __ARG_3 729 self.'TokenWithVal'(__ARG_1, __ARG_2, __ARG_3) 730 731.end # TokenQuoted 732 733 734.sub 'get_string' :method :vtable 735 getattribute $P1, self, 'str' 736 set $S1, $P1 737 concat $S3, "\"", $S1 738 concat $S3, $S3, "\"" 739 set $S2, $S3 740 .return($S2) 741 742.end # get_string 743 744 745.sub 'viewable' :method 746 getattribute $P1, self, 'str' 747 set $S1, $P1 748 concat $S3, "\"", $S1 749 concat $S3, $S3, "\"" 750 set $S2, $S3 751 .return($S2) 752 753.end # viewable 754 755 756.sub 'getasquoted' :method 757 getattribute $P1, self, 'str' 758 .return($P1) 759 760.end # getasquoted 761 762 763.sub 'getPirString' :method 764.const 'Sub' SyntaxError = "SyntaxError" 765 getattribute $P1, self, 'str' 766 null $S1 767 if_null $P1, __label_1 768 set $S1, $P1 769 __label_1: 770 null $S2 771 new $P1, 'ExceptionHandler' 772 set_label $P1, __label_2 773 push_eh $P1 774 $P0 = new ["String"] 775 $P0 = $S1 776 $S2 = $P0."unescape"("utf8") 777 pop_eh 778 goto __label_3 779 __label_2: 780 .get_results($P2) 781 finalize $P2 782 pop_eh 783 SyntaxError("Invalid escape sequence in literal string", self) 784 __label_3: 785 null $I1 786 box $P1, $S2 787 if_null $P1, __label_5 788 iter $P3, $P1 789 set $P3, 0 790 __label_4: # for iteration 791 unless $P3 goto __label_5 792 shift $I2, $P3 793 le $I2, 127, __label_6 794 set $I1, 1 795 goto __label_5 # break 796 __label_6: # endif 797 goto __label_4 798 __label_5: # endfor 799 escape $S3, $S2 800 concat $S5, "\"", $S3 801 concat $S5, $S5, "\"" 802 set $S1, $S5 803 unless $I1 goto __label_8 804 set $S4, "utf8:" 805 goto __label_7 806 __label_8: 807 set $S4, "" 808 __label_7: 809 concat $S5, $S4, $S1 810 .return($S5) 811 812.end # getPirString 813 814.sub Winxed_class_init :anon :load :init 815 newclass $P0, [ 'Winxed'; 'Compiler'; 'TokenQuoted' ] 816 get_class $P1, [ 'Winxed'; 'Compiler'; 'TokenString' ] 817 addparent $P0, $P1 818.end 819.namespace [ 'Winxed'; 'Compiler'; 'TokenSingleQuoted' ] 820 821.sub 'TokenSingleQuoted' :method 822 .param string __ARG_1 823 .param int __ARG_2 824 .param string __ARG_3 825 self.'TokenWithVal'(__ARG_1, __ARG_2, __ARG_3) 826 827.end # TokenSingleQuoted 828 829 830.sub 'issinglequoted' :method 831 .return(1) 832 833.end # issinglequoted 834 835 836.sub 'get_string' :method :vtable 837 getattribute $P1, self, 'str' 838 set $S1, $P1 839 concat $S2, "'", $S1 840 concat $S2, $S2, "'" 841 .return($S2) 842 843.end # get_string 844 845 846.sub 'viewable' :method 847 getattribute $P1, self, 'str' 848 set $S1, $P1 849 concat $S2, "'", $S1 850 concat $S2, $S2, "'" 851 .return($S2) 852 853.end # viewable 854 855 856.sub 'getasquoted' :method 857 set $S1, "" 858 getattribute $P1, self, 'str' 859 if_null $P1, __label_2 860 iter $P2, $P1 861 set $P2, 0 862 __label_1: # for iteration 863 unless $P2 goto __label_2 864 shift $S2, $P2 865 if_null $S2, __label_3 866 length $I1, $S2 867 ne $I1, 1, __label_3 868 ord $I1, $S2 869 if $I1 == 34 goto __label_5 870 if $I1 == 92 goto __label_6 871 if $I1 == 39 goto __label_7 872 goto __label_3 873 __label_5: # case 874 __label_6: # case 875 __label_7: # case 876 concat $S3, "\\", $S2 877 set $S2, $S3 878 goto __label_4 # break 879 __label_3: # default 880 __label_4: # switch end 881 concat $S1, $S1, $S2 882 goto __label_1 883 __label_2: # endfor 884 .return($S1) 885 886.end # getasquoted 887 888 889.sub 'getPirString' :method 890 getattribute $P1, self, 'str' 891 null $S1 892 if_null $P1, __label_1 893 set $S1, $P1 894 __label_1: 895 set $S2, "'" 896 null $I1 897 box $P1, $S1 898 if_null $P1, __label_3 899 iter $P2, $P1 900 set $P2, 0 901 __label_2: # for iteration 902 unless $P2 goto __label_3 903 shift $I2, $P2 904 islt $I5, $I2, 32 905 if $I5 goto __label_5 906 isgt $I5, $I2, 127 907 __label_5: 908 unless $I5 goto __label_4 909 set $I1, 1 910 goto __label_3 # break 911 __label_4: # endif 912 goto __label_2 913 __label_3: # endfor 914 null $I3 915 unless $I1 goto __label_6 916 set $S2, "\"" 917 set $S3, "" 918 box $P1, $S1 919 if_null $P1, __label_8 920 iter $P3, $P1 921 set $P3, 0 922 __label_7: # for iteration 923 unless $P3 goto __label_8 924 shift $S4, $P3 925 ne $S4, "\\", __label_9 926 concat $S3, $S3, "\\\\" 927 goto __label_10 928 __label_9: # else 929 ord $I4, $S4 930 islt $I5, $I4, 32 931 if $I5 goto __label_13 932 isgt $I5, $I4, 127 933 __label_13: 934 unless $I5 goto __label_11 935 le $I4, 127, __label_14 936 set $I3, 1 937 __label_14: # endif 938 box $P4, $I4 939 $P1 = $P4.'get_as_base'(16) 940 null $S5 941 if_null $P1, __label_15 942 set $S5, $P1 943 __label_15: 944 concat $S3, $S3, "\\x{" 945 concat $S3, $S3, $S5 946 concat $S3, $S3, "}" 947 goto __label_12 948 __label_11: # else 949 concat $S3, $S3, $S4 950 __label_12: # endif 951 __label_10: # endif 952 goto __label_7 953 __label_8: # endfor 954 set $S1, $S3 955 __label_6: # endif 956 concat $S6, $S2, $S1 957 concat $S6, $S6, $S2 958 set $S1, $S6 959 unless $I3 goto __label_16 960 concat $S6, "utf8:", $S1 961 set $S1, $S6 962 __label_16: # endif 963 .return($S1) 964 965.end # getPirString 966 967.sub Winxed_class_init :anon :load :init 968 newclass $P0, [ 'Winxed'; 'Compiler'; 'TokenSingleQuoted' ] 969 get_class $P1, [ 'Winxed'; 'Compiler'; 'TokenString' ] 970 addparent $P0, $P1 971.end 972.namespace [ 'Winxed'; 'Compiler'; 'TokenInteger' ] 973 974.sub 'TokenInteger' :method 975 .param string __ARG_1 976 .param int __ARG_2 977 .param string __ARG_3 978 self.'TokenWithVal'(__ARG_1, __ARG_2, __ARG_3) 979 980.end # TokenInteger 981 982 983.sub 'isint' :method 984 .return(1) 985 986.end # isint 987 988 989.sub 'getintvalue' :method 990 getattribute $P1, self, 'str' 991 set $I1, $P1 992 .return($I1) 993 994.end # getintvalue 995 996.sub Winxed_class_init :anon :load :init 997 newclass $P0, [ 'Winxed'; 'Compiler'; 'TokenInteger' ] 998 get_class $P1, [ 'Winxed'; 'Compiler'; 'TokenWithVal' ] 999 addparent $P0, $P1 1000.end 1001.namespace [ 'Winxed'; 'Compiler'; 'TokenFloat' ] 1002 1003.sub 'TokenFloat' :method 1004 .param string __ARG_1 1005 .param int __ARG_2 1006 .param string __ARG_3 1007 self.'TokenWithVal'(__ARG_1, __ARG_2, __ARG_3) 1008 1009.end # TokenFloat 1010 1011 1012.sub 'isfloat' :method 1013 .return(1) 1014 1015.end # isfloat 1016 1017 1018.sub 'getfloatvalue' :method 1019 getattribute $P1, self, 'str' 1020 set $N1, $P1 1021 .return($N1) 1022 1023.end # getfloatvalue 1024 1025.sub Winxed_class_init :anon :load :init 1026 newclass $P0, [ 'Winxed'; 'Compiler'; 'TokenFloat' ] 1027 get_class $P1, [ 'Winxed'; 'Compiler'; 'TokenWithVal' ] 1028 addparent $P0, $P1 1029.end 1030.namespace [ 'Winxed'; 'Compiler' ] 1031 1032.sub 'TokenError' :subid('bindlast4') 1033 .param string __ARG_1 1034 .param pmc __ARG_2 1035 .param int __ARG_3 1036 getattribute $P2, __ARG_2, 'filename' 1037 set $S1, $P2 1038 set $S2, __ARG_3 1039 concat $S3, __ARG_1, " in " 1040 concat $S3, $S3, $S1 1041 concat $S3, $S3, " line " 1042 concat $S3, $S3, $S2 1043 new $P4, [ 'Winxed'; 'Compiler'; 'WinxedCompilerError' ] 1044 getattribute $P5, __ARG_2, 'filename' 1045 $P4.'WinxedCompilerError'("tokenizer", __ARG_1, $P5, __ARG_3) 1046 set $P3, $P4 1047 root_new $P1, ["parrot";"Exception"] 1048 $P1["message"] = $S3 1049 $P1["severity"] = 2 1050 $P1["type"] = 567 1051 $P1["payload"] = $P3 1052 throw $P1 1053 1054.end # TokenError 1055 1056 1057.sub 'UnterminatedString' :subid('bindlast5') 1058 .param pmc __ARG_1 1059 .param int __ARG_2 1060.const 'Sub' bindlast4 = "bindlast4" 1061 bindlast4("Unterminated string", __ARG_1, __ARG_2) 1062 1063.end # UnterminatedString 1064 1065 1066.sub 'UnterminatedHeredoc' :subid('bindlast6') 1067 .param pmc __ARG_1 1068 .param int __ARG_2 1069.const 'Sub' bindlast4 = "bindlast4" 1070 bindlast4("Unterminated heredoc", __ARG_1, __ARG_2) 1071 1072.end # UnterminatedHeredoc 1073 1074 1075.sub 'UnclosedComment' :subid('bindlast7') 1076 .param pmc __ARG_1 1077 .param int __ARG_2 1078.const 'Sub' bindlast4 = "bindlast4" 1079 bindlast4("Unclosed comment", __ARG_1, __ARG_2) 1080 1081.end # UnclosedComment 1082 1083 1084.sub 'getquoted' :subid('WSubId_40') 1085 .param pmc __ARG_1 1086 .param string __ARG_2 1087 .param int __ARG_3 1088.const 'Sub' bindlast5 = "bindlast5" 1089 set $S1, "" 1090 null $S2 1091 $P1 = __ARG_1.'getchar'() 1092 set $S2, $P1 1093 __label_3: # for condition 1094 eq $S2, "\"", __label_2 1095 if $S2 == "" goto __label_6 1096 if $S2 == "\n" goto __label_7 1097 if $S2 == "\\" goto __label_8 1098 goto __label_4 1099 __label_6: # case 1100 __label_7: # case 1101 bindlast5(__ARG_1, __ARG_3) 1102 __label_8: # case 1103 $P2 = __ARG_1.'getchar'() 1104 null $S3 1105 if_null $P2, __label_9 1106 set $S3, $P2 1107 __label_9: 1108 iseq $I1, $S3, "" 1109 if $I1 goto __label_11 1110 iseq $I1, $S3, "\n" 1111 __label_11: 1112 unless $I1 goto __label_10 1113 bindlast5(__ARG_1, __ARG_3) 1114 __label_10: # endif 1115 concat $S1, $S1, $S2 1116 concat $S1, $S1, $S3 1117 goto __label_5 # break 1118 __label_4: # default 1119 concat $S1, $S1, $S2 1120 __label_5: # switch end 1121 __label_1: # for iteration 1122 $P1 = __ARG_1.'getchar'() 1123 set $S2, $P1 1124 goto __label_3 1125 __label_2: # for end 1126 new $P2, [ 'Winxed'; 'Compiler'; 'TokenQuoted' ] 1127 getattribute $P3, __ARG_1, 'filename' 1128 $P2.'TokenQuoted'($P3, __ARG_3, $S1) 1129 set $P1, $P2 1130 .return($P1) 1131 1132.end # getquoted 1133 1134 1135.sub 'getsinglequoted' :subid('WSubId_41') 1136 .param pmc __ARG_1 1137 .param string __ARG_2 1138 .param int __ARG_3 1139.const 'Sub' bindlast5 = "bindlast5" 1140 set $S1, "" 1141 null $S2 1142 $P1 = __ARG_1.'getchar'() 1143 set $S2, $P1 1144 __label_3: # for condition 1145 eq $S2, "'", __label_2 1146 iseq $I1, $S2, "" 1147 if $I1 goto __label_5 1148 iseq $I1, $S2, "\n" 1149 __label_5: 1150 unless $I1 goto __label_4 1151 bindlast5(__ARG_1, __ARG_3) 1152 __label_4: # endif 1153 concat $S1, $S1, $S2 1154 __label_1: # for iteration 1155 $P1 = __ARG_1.'getchar'() 1156 set $S2, $P1 1157 goto __label_3 1158 __label_2: # for end 1159 new $P2, [ 'Winxed'; 'Compiler'; 'TokenSingleQuoted' ] 1160 getattribute $P3, __ARG_1, 'filename' 1161 $P2.'TokenSingleQuoted'($P3, __ARG_3, $S1) 1162 set $P1, $P2 1163 .return($P1) 1164 1165.end # getsinglequoted 1166 1167 1168.sub 'getheredoc' :subid('WSubId_42') 1169 .param pmc __ARG_1 1170 .param string __ARG_2 1171 .param int __ARG_3 1172.const 'Sub' bindlast6 = "bindlast6" 1173 set $S1, "" 1174 null $S2 1175 $P1 = __ARG_1.'getchar'() 1176 set $S2, $P1 1177 __label_3: # for condition 1178 eq $S2, "\n", __label_2 1179 if $S2 == "" goto __label_6 1180 if $S2 == "\r" goto __label_7 1181 if $S2 == "\"" goto __label_8 1182 if $S2 == "\\" goto __label_9 1183 goto __label_4 1184 __label_6: # case 1185 bindlast6(__ARG_1, __ARG_3) 1186 __label_7: # case 1187 goto __label_5 # break 1188 __label_8: # case 1189 __label_9: # case 1190 concat $S1, $S1, "\\" 1191 concat $S1, $S1, $S2 1192 goto __label_5 # break 1193 __label_4: # default 1194 concat $S1, $S1, $S2 1195 __label_5: # switch end 1196 __label_1: # for iteration 1197 $P1 = __ARG_1.'getchar'() 1198 set $S2, $P1 1199 goto __label_3 1200 __label_2: # for end 1201 concat $S5, $S1, ":>>" 1202 set $S1, $S5 1203 set $S3, "" 1204 null $S4 1205 __label_10: # do 1206 set $S4, "" 1207 $P1 = __ARG_1.'getchar'() 1208 set $S2, $P1 1209 __label_15: # for condition 1210 eq $S2, "\n", __label_14 1211 if $S2 == "" goto __label_18 1212 if $S2 == "\r" goto __label_19 1213 if $S2 == "\"" goto __label_20 1214 if $S2 == "\\" goto __label_21 1215 goto __label_16 1216 __label_18: # case 1217 bindlast6(__ARG_1, __ARG_3) 1218 __label_19: # case 1219 goto __label_17 # break 1220 __label_20: # case 1221 __label_21: # case 1222 concat $S4, $S4, "\\" 1223 concat $S4, $S4, $S2 1224 goto __label_17 # break 1225 __label_16: # default 1226 concat $S4, $S4, $S2 1227 __label_17: # switch end 1228 __label_13: # for iteration 1229 $P1 = __ARG_1.'getchar'() 1230 set $S2, $P1 1231 goto __label_15 1232 __label_14: # for end 1233 eq $S4, $S1, __label_22 1234 concat $S3, $S3, $S4 1235 concat $S3, $S3, "\\n" 1236 __label_22: # endif 1237 __label_12: # continue 1238 ne $S4, $S1, __label_10 1239 __label_11: # enddo 1240 new $P2, [ 'Winxed'; 'Compiler'; 'TokenQuoted' ] 1241 getattribute $P3, __ARG_1, 'filename' 1242 $P2.'TokenQuoted'($P3, __ARG_3, $S3) 1243 set $P1, $P2 1244 .return($P1) 1245 1246.end # getheredoc 1247 1248 1249.sub 'getident' :subid('bindlast8') 1250 .param pmc __ARG_1 1251 .param string __ARG_2 1252 .param int __ARG_3 1253 set $S1, __ARG_2 1254 null $S2 1255 $P1 = __ARG_1.'getchar'() 1256 set $S2, $P1 1257 __label_3: # for condition 1258 set $S3, $S2 1259 index $I2, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$0123456789", $S3 1260 isgt $I1, $I2, -1 1261 unless $I1 goto __label_2 1262 concat $S1, $S1, $S2 1263 __label_1: # for iteration 1264 $P1 = __ARG_1.'getchar'() 1265 set $S2, $P1 1266 goto __label_3 1267 __label_2: # for end 1268 __ARG_1.'ungetchar'($S2) 1269 new $P2, [ 'Winxed'; 'Compiler'; 'TokenIdentifier' ] 1270 getattribute $P3, __ARG_1, 'filename' 1271 $P2.'TokenIdentifier'($P3, __ARG_3, $S1) 1272 set $P1, $P2 1273 .return($P1) 1274 1275.end # getident 1276 1277 1278.sub 'getnumber' :subid('WSubId_46') 1279 .param pmc __ARG_1 1280 .param string __ARG_2 1281 .param int __ARG_3 1282 getattribute $P1, __ARG_1, 'filename' 1283 $P2 = __ARG_1.'getchar'() 1284 null $S1 1285 if_null $P2, __label_1 1286 set $S1, $P2 1287 __label_1: 1288 ne __ARG_2, "0", __label_2 1289 iseq $I5, $S1, "x" 1290 if $I5 goto __label_3 1291 iseq $I5, $S1, "X" 1292 __label_3: 1293 unless $I5 goto __label_2 1294 null $I1 1295 null $I2 1296 $P2 = __ARG_1.'getchar'() 1297 set $S1, $P2 1298 __label_6: # for condition 1299 set $S2, $S1 1300 index $I3, "0123456789abcdef0123456789ABCDEF", $S2 1301 lt $I3, 0, __label_7 1302 mod $I3, $I3, 16 1303 __label_7: # endif 1304 set $I2, $I3 1305 lt $I2, 0, __label_5 1306 mul $I5, $I1, 16 1307 add $I1, $I5, $I2 1308 __label_4: # for iteration 1309 $P2 = __ARG_1.'getchar'() 1310 set $S1, $P2 1311 goto __label_6 1312 __label_5: # for end 1313 __ARG_1.'ungetchar'($S1) 1314 new $P3, [ 'Winxed'; 'Compiler'; 'TokenInteger' ] 1315 $P3.'TokenInteger'($P1, __ARG_3, $I1) 1316 set $P2, $P3 1317 .return($P2) 1318 __label_2: # endif 1319 set $S3, __ARG_2 1320 __label_10: # for condition 1321 set $S4, $S1 1322 index $I5, "0123456789", $S4 1323 isgt $I6, $I5, -1 1324 unless $I6 goto __label_9 1325 concat $S3, $S3, $S1 1326 __label_8: # for iteration 1327 $P2 = __ARG_1.'getchar'() 1328 set $S1, $P2 1329 goto __label_10 1330 __label_9: # for end 1331 null $I4 1332 ne $S1, ".", __label_11 1333 set $I4, 1 1334 __label_12: # do 1335 concat $S3, $S3, $S1 1336 $P2 = __ARG_1.'getchar'() 1337 set $S1, $P2 1338 __label_14: # continue 1339 set $S5, $S1 1340 index $I5, "0123456789", $S5 1341 isgt $I7, $I5, -1 1342 if $I7 goto __label_12 1343 __label_13: # enddo 1344 __label_11: # endif 1345 iseq $I5, $S1, "e" 1346 if $I5 goto __label_16 1347 iseq $I5, $S1, "E" 1348 __label_16: 1349 unless $I5 goto __label_15 1350 set $I4, 1 1351 concat $S3, $S3, "E" 1352 $P2 = __ARG_1.'getchar'() 1353 set $S1, $P2 1354 iseq $I5, $S1, "+" 1355 if $I5 goto __label_18 1356 iseq $I5, $S1, "-" 1357 __label_18: 1358 unless $I5 goto __label_17 1359 concat $S3, $S3, $S1 1360 $P2 = __ARG_1.'getchar'() 1361 set $S1, $P2 1362 __label_17: # endif 1363 __label_21: # for condition 1364 set $S6, $S1 1365 index $I5, "0123456789", $S6 1366 isgt $I8, $I5, -1 1367 unless $I8 goto __label_20 1368 concat $S3, $S3, $S1 1369 __label_19: # for iteration 1370 $P2 = __ARG_1.'getchar'() 1371 set $S1, $P2 1372 goto __label_21 1373 __label_20: # for end 1374 __label_15: # endif 1375 __ARG_1.'ungetchar'($S1) 1376 unless $I4 goto __label_22 1377 new $P3, [ 'Winxed'; 'Compiler'; 'TokenFloat' ] 1378 $P3.'TokenFloat'($P1, __ARG_3, $S3) 1379 set $P2, $P3 1380 .return($P2) 1381 goto __label_23 1382 __label_22: # else 1383 new $P5, [ 'Winxed'; 'Compiler'; 'TokenInteger' ] 1384 $P5.'TokenInteger'($P1, __ARG_3, $S3) 1385 set $P4, $P5 1386 .return($P4) 1387 __label_23: # endif 1388 1389.end # getnumber 1390 1391 1392.sub 'getlinecomment' :subid('WSubId_43') 1393 .param pmc __ARG_1 1394 .param string __ARG_2 1395 .param int __ARG_3 1396 null $S1 1397 __label_1: # do 1398 $P1 = __ARG_1.'getchar'() 1399 set $S1, $P1 1400 __label_3: # continue 1401 isne $I1, $S1, "" 1402 unless $I1 goto __label_4 1403 isne $I1, $S1, "\n" 1404 __label_4: 1405 if $I1 goto __label_1 1406 __label_2: # enddo 1407 new $P2, [ 'Winxed'; 'Compiler'; 'TokenComment' ] 1408 getattribute $P3, __ARG_1, 'filename' 1409 $P2.'TokenComment'($P3, __ARG_3) 1410 set $P1, $P2 1411 .return($P1) 1412 1413.end # getlinecomment 1414 1415 1416.sub 'getcomment' :subid('WSubId_44') 1417 .param pmc __ARG_1 1418 .param string __ARG_2 1419 .param int __ARG_3 1420.const 'Sub' bindlast7 = "bindlast7" 1421 $P1 = __ARG_1.'getchar'() 1422 null $S1 1423 if_null $P1, __label_1 1424 set $S1, $P1 1425 __label_1: 1426 __label_2: # do 1427 __label_6: # while 1428 eq $S1, "", __label_5 1429 eq $S1, "*", __label_5 1430 $P1 = __ARG_1.'getchar'() 1431 set $S1, $P1 1432 goto __label_6 1433 __label_5: # endwhile 1434 ne $S1, "", __label_7 1435 bindlast7(__ARG_1, __ARG_3) 1436 __label_7: # endif 1437 $P1 = __ARG_1.'getchar'() 1438 set $S1, $P1 1439 ne $S1, "", __label_8 1440 bindlast7(__ARG_1, __ARG_3) 1441 __label_8: # endif 1442 __label_4: # continue 1443 ne $S1, "/", __label_2 1444 __label_3: # enddo 1445 new $P2, [ 'Winxed'; 'Compiler'; 'TokenComment' ] 1446 getattribute $P3, __ARG_1, 'filename' 1447 $P2.'TokenComment'($P3, __ARG_3) 1448 set $P1, $P2 1449 .return($P1) 1450 1451.end # getcomment 1452 1453 1454.sub 'getop' :subid('bindlast9') 1455 .param pmc __ARG_1 1456 .param string __ARG_2 1457 .param int __ARG_3 1458 set $S1, __ARG_2 1459 new $P2, [ 'Winxed'; 'Compiler'; 'TokenOp' ] 1460 getattribute $P3, __ARG_1, 'filename' 1461 $P2.'TokenOp'($P3, __ARG_3, $S1) 1462 set $P1, $P2 1463 .return($P1) 1464 1465.end # getop 1466 1467.namespace [ 'Winxed'; 'Compiler'; 'Tokenizer' ] 1468 1469.sub 'Tokenizer' :method 1470 .param pmc __ARG_1 1471 .param string __ARG_2 1472 .param int __ARG_3 1473.const 'Sub' bindlast8 = "bindlast8" 1474.const 'Sub' bindlast9 = "bindlast9" 1475.const 'Sub' WSubId_40 = "WSubId_40" 1476.const 'Sub' WSubId_41 = "WSubId_41" 1477.const 'Sub' WSubId_42 = "WSubId_42" 1478.const 'Sub' WSubId_43 = "WSubId_43" 1479.const 'Sub' WSubId_44 = "WSubId_44" 1480 not $I1, __ARG_3 1481 new $P3, [ 'Boolean' ], $I1 1482 setattribute self, 'warnings', $P3 1483 setattribute self, 'h', __ARG_1 1484 box $P2, "" 1485 setattribute self, 'pending', $P2 1486 root_new $P3, ['parrot';'ResizablePMCArray'] 1487 setattribute self, 'stacked', $P3 1488 box $P2, __ARG_2 1489 setattribute self, 'filename', $P2 1490 box $P2, 1 1491 setattribute self, 'line', $P2 1492 root_new $P1, ['parrot';'Hash'] 1493 root_new $P2, ['parrot';'Hash'] 1494 $P2[""] = bindlast8 1495 $P2["{"] = bindlast9 1496 $P1["$"] = $P2 1497 $P1["\""] = WSubId_40 1498 $P1["'"] = WSubId_41 1499 root_new $P3, ['parrot';'Hash'] 1500 root_new $P4, ['parrot';'Hash'] 1501 $P4[""] = bindlast9 1502 $P4["="] = bindlast9 1503 $P3["="] = $P4 1504 $P3[":"] = bindlast9 1505 $P1["="] = $P3 1506 root_new $P5, ['parrot';'Hash'] 1507 $P5["+"] = bindlast9 1508 $P5["="] = bindlast9 1509 $P1["+"] = $P5 1510 root_new $P6, ['parrot';'Hash'] 1511 $P6["-"] = bindlast9 1512 $P6["="] = bindlast9 1513 $P1["-"] = $P6 1514 root_new $P7, ['parrot';'Hash'] 1515 $P7["="] = bindlast9 1516 $P1["*"] = $P7 1517 root_new $P8, ['parrot';'Hash'] 1518 $P8["|"] = bindlast9 1519 $P1["|"] = $P8 1520 root_new $P9, ['parrot';'Hash'] 1521 $P9["&"] = bindlast9 1522 $P1["&"] = $P9 1523 root_new $P10, ['parrot';'Hash'] 1524 root_new $P11, ['parrot';'Hash'] 1525 $P11[""] = bindlast9 1526 $P11[":"] = WSubId_42 1527 $P10["<"] = $P11 1528 $P10["="] = bindlast9 1529 $P1["<"] = $P10 1530 root_new $P12, ['parrot';'Hash'] 1531 root_new $P13, ['parrot';'Hash'] 1532 $P13[""] = bindlast9 1533 $P13[">"] = bindlast9 1534 $P12[">"] = $P13 1535 $P12["="] = bindlast9 1536 $P1[">"] = $P12 1537 root_new $P14, ['parrot';'Hash'] 1538 root_new $P15, ['parrot';'Hash'] 1539 $P15[""] = bindlast9 1540 $P15["="] = bindlast9 1541 $P14["="] = $P15 1542 $P1["!"] = $P14 1543 root_new $P16, ['parrot';'Hash'] 1544 $P16["%"] = bindlast9 1545 $P16["="] = bindlast9 1546 $P1["%"] = $P16 1547 root_new $P17, ['parrot';'Hash'] 1548 $P17["="] = bindlast9 1549 $P17["/"] = WSubId_43 1550 $P17["*"] = WSubId_44 1551 $P1["/"] = $P17 1552 $P1["#"] = WSubId_43 1553 setattribute self, 'select', $P1 1554 1555.end # Tokenizer 1556 1557 1558.sub 'warn' :method 1559 .param string __ARG_1 1560 .param pmc __ARG_2 :optional 1561.const 'Sub' Warn = "Warn" 1562 getattribute $P1, self, 'warnings' 1563 if_null $P1, __label_1 1564 unless $P1 goto __label_1 1565 Warn(__ARG_1, __ARG_2) 1566 __label_1: # endif 1567 1568.end # warn 1569 1570 1571.sub 'getchar' :method 1572 getattribute $P1, self, 'pending' 1573 null $S1 1574 if_null $P1, __label_1 1575 set $S1, $P1 1576 __label_1: 1577 eq $S1, "", __label_2 1578 assign $P1, "" 1579 goto __label_3 1580 __label_2: # else 1581 getattribute $P2, self, 'h' 1582 $P3 = $P2.'read'(1) 1583 set $S1, $P3 1584 ne $S1, "\n", __label_4 1585 getattribute $P3, self, 'line' 1586 inc $P3 1587 __label_4: # endif 1588 __label_3: # endif 1589 .return($S1) 1590 1591.end # getchar 1592 1593 1594.sub 'ungetchar' :method 1595 .param string __ARG_1 1596 getattribute $P1, self, 'pending' 1597 assign $P1, __ARG_1 1598 1599.end # ungetchar 1600 1601 1602.sub 'get_token' :method 1603.const 'Sub' bindlast8 = "bindlast8" 1604.const 'Sub' WSubId_46 = "WSubId_46" 1605.const 'Sub' bindlast9 = "bindlast9" 1606 getattribute $P3, self, 'stacked' 1607 if_null $P3, __label_1 1608 unless $P3 goto __label_1 1609 getattribute $P4, self, 'stacked' 1610 .tailcall $P4.'pop'() 1611 __label_1: # endif 1612 $P3 = self.'getchar'() 1613 null $S1 1614 if_null $P3, __label_2 1615 set $S1, $P3 1616 __label_2: 1617 __label_4: # while 1618 set $S2, $S1 1619 iseq $I2, $S2, " " 1620 if $I2 goto __label_7 1621 iseq $I2, $S2, "\n" 1622 __label_7: 1623 if $I2 goto __label_6 1624 iseq $I2, $S2, "\t" 1625 __label_6: 1626 if $I2 goto __label_5 1627 iseq $I2, $S2, "\r" 1628 __label_5: 1629 unless $I2 goto __label_3 1630 $P3 = self.'getchar'() 1631 set $S1, $P3 1632 goto __label_4 1633 __label_3: # endwhile 1634 getattribute $P3, self, 'line' 1635 set $I1, $P3 1636 ne $S1, "", __label_8 1637 new $P4, [ 'Winxed'; 'Compiler'; 'TokenEof' ] 1638 getattribute $P5, self, 'filename' 1639 $P4.'TokenEof'($P5) 1640 set $P3, $P4 1641 .return($P3) 1642 __label_8: # endif 1643 set $S3, $S1 1644 index $I4, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_", $S3 1645 isgt $I3, $I4, -1 1646 unless $I3 goto __label_9 1647 .tailcall bindlast8(self, $S1, $I1) 1648 __label_9: # endif 1649 set $S4, $S1 1650 index $I4, "0123456789", $S4 1651 isgt $I5, $I4, -1 1652 unless $I5 goto __label_10 1653 .tailcall WSubId_46(self, $S1, $I1) 1654 __label_10: # endif 1655 set $S5, $S1 1656 getattribute $P1, self, 'select' 1657 $P2 = $P1[$S1] 1658 __label_12: # while 1659 if_null $P2, __label_11 1660 isa $I4, $P2, "Hash" 1661 unless $I4 goto __label_11 1662 $P3 = self.'getchar'() 1663 set $S1, $P3 1664 set $P1, $P2 1665 $P2 = $P1[$S1] 1666 unless_null $P2, __label_13 1667 self.'ungetchar'($S1) 1668 $P2 = $P1[""] 1669 goto __label_14 1670 __label_13: # else 1671 concat $S5, $S5, $S1 1672 __label_14: # endif 1673 goto __label_12 1674 __label_11: # endwhile 1675 if_null $P2, __label_16 1676 $P3 = $P2(self, $S5, $I1) 1677 goto __label_15 1678 __label_16: 1679 $P4 = bindlast9(self, $S5, $I1) 1680 set $P3, $P4 1681 __label_15: 1682 .return($P3) 1683 1684.end # get_token 1685 1686 1687.sub 'get' :method 1688 .param int __ARG_1 :optional 1689 $P1 = self.'get_token'() 1690 __label_2: # while 1691 $P2 = $P1.'iseof'() 1692 if $P2 goto __label_1 1693 if __ARG_1 goto __label_1 1694 $P3 = $P1.'iscomment'() 1695 unless $P3 goto __label_1 1696 $P1 = self.'get_token'() 1697 goto __label_2 1698 __label_1: # endwhile 1699 .return($P1) 1700 1701.end # get 1702 1703 1704.sub 'unget' :method 1705 .param pmc __ARG_1 1706 getattribute $P1, self, 'stacked' 1707 push $P1, __ARG_1 1708 1709.end # unget 1710 1711.sub Winxed_class_init :anon :load :init 1712 newclass $P0, [ 'Winxed'; 'Compiler'; 'Tokenizer' ] 1713 addattribute $P0, 'warnings' 1714 addattribute $P0, 'h' 1715 addattribute $P0, 'pending' 1716 addattribute $P0, 'select' 1717 addattribute $P0, 'stacked' 1718 addattribute $P0, 'filename' 1719 addattribute $P0, 'line' 1720.end 1721.namespace [ 'Winxed'; 'Compiler' ] 1722 1723.sub 'typetoregcheck' :subid('WSubId_136') 1724 .param string __ARG_1 1725 if __ARG_1 == "int" goto __label_3 1726 if __ARG_1 == "float" goto __label_4 1727 if __ARG_1 == "string" goto __label_5 1728 if __ARG_1 == "var" goto __label_6 1729 goto __label_1 1730 __label_3: # case 1731 .return("I") 1732 __label_4: # case 1733 .return("N") 1734 __label_5: # case 1735 .return("S") 1736 __label_6: # case 1737 .return("P") 1738 __label_1: # default 1739 .return("") 1740 __label_2: # switch end 1741 1742.end # typetoregcheck 1743 1744 1745.sub 'typetopirname' :subid('WSubId_144') 1746 .param string __ARG_1 1747.const 'Sub' InternalError = "InternalError" 1748 if_null __ARG_1, __label_1 1749 length $I1, __ARG_1 1750 ne $I1, 1, __label_1 1751 ord $I1, __ARG_1 1752 if $I1 == 73 goto __label_3 1753 if $I1 == 78 goto __label_4 1754 if $I1 == 83 goto __label_5 1755 if $I1 == 80 goto __label_6 1756 goto __label_1 1757 __label_3: # case 1758 .return("int") 1759 __label_4: # case 1760 .return("num") 1761 __label_5: # case 1762 .return("string") 1763 __label_6: # case 1764 .return("pmc") 1765 __label_1: # default 1766 InternalError("Invalid reg type") 1767 __label_2: # switch end 1768 1769.end # typetopirname 1770 1771.namespace [ 'Winxed'; 'Compiler'; 'Emit' ] 1772 1773.sub 'Emit' :method 1774 .param pmc __ARG_1 1775 .param int __ARG_2 1776 setattribute self, 'handle', __ARG_1 1777 box $P1, "" 1778 setattribute self, 'file', $P1 1779 box $P1, 0 1780 setattribute self, 'line', $P1 1781 box $P1, 0 1782 setattribute self, 'pendingf', $P1 1783 box $P1, 0 1784 setattribute self, 'pendingl', $P1 1785 not $I1, __ARG_2 1786 new $P2, [ 'Boolean' ], $I1 1787 setattribute self, 'warnings', $P2 1788 1789.end # Emit 1790 1791 1792.sub 'setDebug' :method 1793 box $P1, 1 1794 setattribute self, 'debug', $P1 1795 1796.end # setDebug 1797 1798 1799.sub 'getDebug' :method 1800 getattribute $P1, self, 'debug' 1801 isnull $I1, $P1 1802 not $I1 1803 .return($I1) 1804 1805.end # getDebug 1806 1807 1808.sub 'disable_annotations' :method 1809 box $P1, 1 1810 setattribute self, 'noan', $P1 1811 1812.end # disable_annotations 1813 1814 1815.sub 'close' :method 1816 null $P1 1817 setattribute self, 'handle', $P1 1818 1819.end # close 1820 1821 1822.sub 'warn' :method 1823 .param string __ARG_1 1824 .param pmc __ARG_2 :optional 1825.const 'Sub' Warn = "Warn" 1826 getattribute $P1, self, 'warnings' 1827 if_null $P1, __label_1 1828 unless $P1 goto __label_1 1829 Warn(__ARG_1, __ARG_2) 1830 __label_1: # endif 1831 1832.end # warn 1833 1834 1835.sub 'updateannot' :method 1836 getattribute $P1, self, 'pendingf' 1837 if_null $P1, __label_1 1838 unless $P1 goto __label_1 1839 getattribute $P2, self, 'handle' 1840 root_new $P3, ['parrot';'ResizablePMCArray'] 1841 assign $P3, 3 1842 $P3[0] = ".annotate 'file', '" 1843 getattribute $P4, self, 'file' 1844 $P3[1] = $P4 1845 $P3[2] = "'\n" 1846 join $S1, "", $P3 1847 $P2.'print'($S1) 1848 getattribute $P1, self, 'pendingf' 1849 assign $P1, 0 1850 __label_1: # endif 1851 getattribute $P1, self, 'pendingl' 1852 if_null $P1, __label_2 1853 unless $P1 goto __label_2 1854 getattribute $P2, self, 'handle' 1855 root_new $P3, ['parrot';'ResizablePMCArray'] 1856 assign $P3, 3 1857 $P3[0] = ".annotate 'line', " 1858 getattribute $P4, self, 'line' 1859 $P3[1] = $P4 1860 $P3[2] = "\n" 1861 join $S1, "", $P3 1862 $P2.'print'($S1) 1863 getattribute $P1, self, 'pendingl' 1864 assign $P1, 0 1865 __label_2: # endif 1866 1867.end # updateannot 1868 1869 1870.sub 'vprint' :method 1871 .param pmc __ARG_1 1872.const 'Sub' method_fun = "method_fun" 1873 set $P1, __ARG_1 1874 getattribute $P4, self, 'handle' 1875 $P2 = method_fun($P4, "print") 1876 if_null $P1, __label_2 1877 iter $P5, $P1 1878 set $P5, 0 1879 __label_1: # for iteration 1880 unless $P5 goto __label_2 1881 shift $P3, $P5 1882 $P2($P3) 1883 goto __label_1 1884 __label_2: # endfor 1885 1886.end # vprint 1887 1888 1889.sub 'print' :method 1890 .param pmc __ARG_1 :slurpy 1891 self.'updateannot'() 1892 self.'vprint'(__ARG_1) 1893 1894.end # print 1895 1896 1897.sub 'say' :method 1898 .param pmc __ARG_1 :slurpy 1899 self.'updateannot'() 1900 self.'vprint'(__ARG_1) 1901 getattribute $P1, self, 'handle' 1902 $P1.'print'("\n") 1903 1904.end # say 1905 1906 1907.sub 'annotate' :method 1908 .param pmc __ARG_1 1909 getattribute $P3, self, 'noan' 1910 unless_null $P3, __label_1 1911 getattribute $P1, self, 'file' 1912 getattribute $P2, self, 'line' 1913 getattribute $P3, __ARG_1, 'file' 1914 null $S1 1915 if_null $P3, __label_2 1916 set $S1, $P3 1917 __label_2: 1918 getattribute $P3, __ARG_1, 'line' 1919 set $I1, $P3 1920 set $S2, $P1 1921 eq $S2, $S1, __label_3 1922 assign $P1, $S1 1923 getattribute $P3, self, 'pendingf' 1924 assign $P3, 1 1925 assign $P2, 0 1926 __label_3: # endif 1927 set $I2, $P2 1928 eq $I2, $I1, __label_4 1929 assign $P2, $I1 1930 getattribute $P3, self, 'pendingl' 1931 assign $P3, 1 1932 __label_4: # endif 1933 __label_1: # endif 1934 1935.end # annotate 1936 1937 1938.sub 'comment' :method 1939 .param pmc __ARG_1 :slurpy 1940 self.'updateannot'() 1941 getattribute $P1, self, 'handle' 1942 join $S1, "", __ARG_1 1943 concat $S2, "# ", $S1 1944 concat $S2, $S2, "\n" 1945 $P1.'print'($S2) 1946 1947.end # comment 1948 1949 1950.sub 'emitlabel' :method 1951 .param string __ARG_1 1952 .param string __ARG_2 :optional 1953 getattribute $P1, self, 'handle' 1954 $P1.'print'(" ") 1955 $P1.'print'(__ARG_1) 1956 $P1.'print'(":") 1957 if_null __ARG_2, __label_1 1958 concat $S1, " # ", __ARG_2 1959 $P1.'print'($S1) 1960 __label_1: # endif 1961 $P1.'print'("\n") 1962 1963.end # emitlabel 1964 1965 1966.sub 'emitgoto' :method 1967 .param string __ARG_1 1968 .param string __ARG_2 :optional 1969 getattribute $P1, self, 'handle' 1970 $P1.'print'(" goto ") 1971 $P1.'print'(__ARG_1) 1972 if_null __ARG_2, __label_1 1973 concat $S1, " # ", __ARG_2 1974 $P1.'print'($S1) 1975 __label_1: # endif 1976 $P1.'print'("\n") 1977 1978.end # emitgoto 1979 1980 1981.sub 'emitarg1' :method 1982 .param string __ARG_1 1983 .param string __ARG_2 1984 self.'say'(" ", __ARG_1, " ", __ARG_2) 1985 1986.end # emitarg1 1987 1988 1989.sub 'emitarg2' :method 1990 .param string __ARG_1 1991 .param string __ARG_2 1992 .param string __ARG_3 1993 self.'say'(" ", __ARG_1, " ", __ARG_2, ", ", __ARG_3) 1994 1995.end # emitarg2 1996 1997 1998.sub 'emitarg3' :method 1999 .param string __ARG_1 2000 .param string __ARG_2 2001 .param string __ARG_3 2002 .param string __ARG_4 2003 self.'say'(" ", __ARG_1, " ", __ARG_2, ", ", __ARG_3, ", ", __ARG_4) 2004 2005.end # emitarg3 2006 2007 2008.sub 'emitcompare' :method 2009 .param string __ARG_1 2010 .param string __ARG_2 2011 .param string __ARG_3 2012 .param string __ARG_4 2013 self.'say'(" ", __ARG_1, " ", __ARG_2, ", ", __ARG_3, ", ", __ARG_4) 2014 2015.end # emitcompare 2016 2017 2018.sub 'emitif' :method 2019 .param string __ARG_1 2020 .param string __ARG_2 2021 self.'say'(" if ", __ARG_1, " goto ", __ARG_2) 2022 2023.end # emitif 2024 2025 2026.sub 'emitunless' :method 2027 .param string __ARG_1 2028 .param string __ARG_2 2029 self.'say'(" unless ", __ARG_1, " goto ", __ARG_2) 2030 2031.end # emitunless 2032 2033 2034.sub 'emitif_null' :method 2035 .param string __ARG_1 2036 .param string __ARG_2 2037 self.'say'(" if_null ", __ARG_1, ", ", __ARG_2) 2038 2039.end # emitif_null 2040 2041 2042.sub 'emitunless_null' :method 2043 .param string __ARG_1 2044 .param string __ARG_2 2045 self.'say'(" unless_null ", __ARG_1, ", ", __ARG_2) 2046 2047.end # emitunless_null 2048 2049 2050.sub 'emitnull' :method 2051 .param string __ARG_1 2052 self.'say'(" null ", __ARG_1) 2053 2054.end # emitnull 2055 2056 2057.sub 'emitinc' :method 2058 .param string __ARG_1 2059 self.'say'(" inc ", __ARG_1) 2060 2061.end # emitinc 2062 2063 2064.sub 'emitdec' :method 2065 .param string __ARG_1 2066 self.'say'(" dec ", __ARG_1) 2067 2068.end # emitdec 2069 2070 2071.sub 'emitset' :method 2072 .param string __ARG_1 2073 .param string __ARG_2 2074 self.'say'(" set ", __ARG_1, ", ", __ARG_2) 2075 2076.end # emitset 2077 2078 2079.sub 'emitassign' :method 2080 .param string __ARG_1 2081 .param string __ARG_2 2082 self.'say'(" assign ", __ARG_1, ", ", __ARG_2) 2083 2084.end # emitassign 2085 2086 2087.sub 'emitbox' :method 2088 .param string __ARG_1 2089 .param string __ARG_2 2090 self.'say'(" box ", __ARG_1, ", ", __ARG_2) 2091 2092.end # emitbox 2093 2094 2095.sub 'emitunbox' :method 2096 .param string __ARG_1 2097 .param string __ARG_2 2098 self.'say'(" unbox ", __ARG_1, ", ", __ARG_2) 2099 2100.end # emitunbox 2101 2102 2103.sub 'emitbinop' :method 2104 .param string __ARG_1 2105 .param string __ARG_2 2106 .param string __ARG_3 2107 .param string __ARG_4 2108 self.'say'(" ", __ARG_1, " ", __ARG_2, ", ", __ARG_3, ", ", __ARG_4) 2109 2110.end # emitbinop 2111 2112 2113.sub 'emitaddto' :method 2114 .param string __ARG_1 2115 .param string __ARG_2 2116 self.'say'(" add ", __ARG_1, ", ", __ARG_2) 2117 2118.end # emitaddto 2119 2120 2121.sub 'emitsubto' :method 2122 .param string __ARG_1 2123 .param string __ARG_2 2124 self.'say'(" sub ", __ARG_1, ", ", __ARG_2) 2125 2126.end # emitsubto 2127 2128 2129.sub 'emitadd' :method 2130 .param string __ARG_1 2131 .param string __ARG_2 2132 .param string __ARG_3 2133 self.'say'(" add ", __ARG_1, ", ", __ARG_2, ", ", __ARG_3) 2134 2135.end # emitadd 2136 2137 2138.sub 'emitsub' :method 2139 .param string __ARG_1 2140 .param string __ARG_2 2141 .param string __ARG_3 2142 self.'say'(" sub ", __ARG_1, ", ", __ARG_2, ", ", __ARG_3) 2143 2144.end # emitsub 2145 2146 2147.sub 'emitmul' :method 2148 .param string __ARG_1 2149 .param string __ARG_2 2150 .param string __ARG_3 2151 self.'say'(" mul ", __ARG_1, ", ", __ARG_2, ", ", __ARG_3) 2152 2153.end # emitmul 2154 2155 2156.sub 'emitdiv' :method 2157 .param string __ARG_1 2158 .param string __ARG_2 2159 .param string __ARG_3 2160 self.'say'(" div ", __ARG_1, ", ", __ARG_2, ", ", __ARG_3) 2161 2162.end # emitdiv 2163 2164 2165.sub 'emitconcat1' :method 2166 .param string __ARG_1 2167 .param string __ARG_2 2168 self.'say'(" concat ", __ARG_1, ", ", __ARG_1, ", ", __ARG_2) 2169 2170.end # emitconcat1 2171 2172 2173.sub 'emitconcat' :method 2174 .param string __ARG_1 2175 .param string __ARG_2 2176 .param string __ARG_3 2177 self.'say'(" concat ", __ARG_1, ", ", __ARG_2, ", ", __ARG_3) 2178 2179.end # emitconcat 2180 2181 2182.sub 'emitprint' :method 2183 .param string __ARG_1 2184 self.'say'(" print ", __ARG_1) 2185 2186.end # emitprint 2187 2188 2189.sub 'emitsay' :method 2190 .param string __ARG_1 2191 self.'say'(" say ", __ARG_1) 2192 2193.end # emitsay 2194 2195 2196.sub 'emitget_hll_namespace' :method 2197 .param string __ARG_1 2198 .param string __ARG_2 2199 concat $S1, ", ", __ARG_2 2200 self.'say'(" get_hll_namespace ", __ARG_1, $S1) 2201 2202.end # emitget_hll_namespace 2203 2204 2205.sub 'emitget_root_namespace' :method 2206 .param string __ARG_1 2207 .param string __ARG_2 2208 concat $S1, ", ", __ARG_2 2209 self.'say'(" get_root_namespace ", __ARG_1, $S1) 2210 2211.end # emitget_root_namespace 2212 2213 2214.sub 'emitget_hll_global' :method 2215 .param string __ARG_1 2216 .param string __ARG_2 2217 .param string __ARG_3 :optional 2218 self.'print'(" get_hll_global ", __ARG_1) 2219 if_null __ARG_3, __label_1 2220 self.'print'(", ", __ARG_3) 2221 __label_1: # endif 2222 self.'say'(", '", __ARG_2, "'") 2223 2224.end # emitget_hll_global 2225 2226 2227.sub 'emitget_root_global' :method 2228 .param string __ARG_1 2229 .param string __ARG_2 2230 .param string __ARG_3 :optional 2231 self.'print'(" get_root_global ", __ARG_1) 2232 if_null __ARG_3, __label_1 2233 self.'print'(", ", __ARG_3) 2234 __label_1: # endif 2235 self.'say'(", '", __ARG_2, "'") 2236 2237.end # emitget_root_global 2238 2239 2240.sub 'emitfind_lex' :method 2241 .param string __ARG_1 2242 .param string __ARG_2 2243 self.'say'(" find_lex ", __ARG_1, ", ", __ARG_2) 2244 2245.end # emitfind_lex 2246 2247 2248.sub 'emitstore_lex' :method 2249 .param string __ARG_1 2250 .param string __ARG_2 2251 self.'say'(" store_lex ", __ARG_1, ", ", __ARG_2) 2252 2253.end # emitstore_lex 2254 2255 2256.sub 'emitrepeat' :method 2257 .param string __ARG_1 2258 .param string __ARG_2 2259 .param string __ARG_3 2260 self.'say'(" repeat ", __ARG_1, ", ", __ARG_2, ", ", __ARG_3) 2261 2262.end # emitrepeat 2263 2264.sub Winxed_class_init :anon :load :init 2265 newclass $P0, [ 'Winxed'; 'Compiler'; 'Emit' ] 2266 addattribute $P0, 'handle' 2267 addattribute $P0, 'file' 2268 addattribute $P0, 'line' 2269 addattribute $P0, 'pendingf' 2270 addattribute $P0, 'pendingl' 2271 addattribute $P0, 'debug' 2272 addattribute $P0, 'noan' 2273 addattribute $P0, 'warnings' 2274.end 2275.namespace [ 'Winxed'; 'Compiler' ] 2276 2277.sub 'integerValue' :subid('integerValue') 2278 .param pmc __ARG_1 2279 .param pmc __ARG_2 2280 .param int __ARG_3 2281 new $P2, [ 'Winxed'; 'Compiler'; 'IntegerLiteral' ] 2282 $P2.'IntegerLiteral'(__ARG_1, __ARG_2, __ARG_3) 2283 set $P1, $P2 2284 .return($P1) 2285 2286.end # integerValue 2287 2288 2289.sub 'floatValue' :subid('WSubId_100') 2290 .param pmc __ARG_1 2291 .param pmc __ARG_2 2292 .param num __ARG_3 2293 new $P2, [ 'Winxed'; 'Compiler'; 'TokenFloat' ] 2294 getattribute $P3, __ARG_2, 'file' 2295 getattribute $P4, __ARG_2, 'line' 2296 $P2.'TokenFloat'($P3, $P4, __ARG_3) 2297 set $P1, $P2 2298 new $P3, [ 'Winxed'; 'Compiler'; 'FloatLiteral' ] 2299 $P3.'FloatLiteral'(__ARG_1, $P1) 2300 set $P2, $P3 2301 .return($P2) 2302 2303.end # floatValue 2304 2305 2306.sub 'stringQuotedValue' :subid('bindmethod0') 2307 .param pmc __ARG_1 2308 .param pmc __ARG_2 2309 .param string __ARG_3 2310 new $P2, [ 'Winxed'; 'Compiler'; 'TokenQuoted' ] 2311 getattribute $P3, __ARG_2, 'file' 2312 getattribute $P4, __ARG_2, 'line' 2313 $P2.'TokenQuoted'($P3, $P4, __ARG_3) 2314 set $P1, $P2 2315 new $P3, [ 'Winxed'; 'Compiler'; 'StringLiteral' ] 2316 $P3.'StringLiteral'(__ARG_1, $P1) 2317 set $P2, $P3 2318 .return($P2) 2319 2320.end # stringQuotedValue 2321 2322 2323.sub 'floatAsString' :subid('floatAsString') 2324 .param num __ARG_1 2325 set $S1, __ARG_1 2326 box $P2, $S1 2327 $P1 = $P2.'is_integer'($S1) 2328 if_null $P1, __label_1 2329 unless $P1 goto __label_1 2330 concat $S1, $S1, ".0" 2331 __label_1: # endif 2332 .return($S1) 2333 2334.end # floatAsString 2335 2336 2337.sub 'floatresult' :subid('WSubId_105') 2338 .param string __ARG_1 2339 .param string __ARG_2 2340 iseq $I1, __ARG_1, "N" 2341 unless $I1 goto __label_2 2342 iseq $I1, __ARG_2, "N" 2343 if $I1 goto __label_3 2344 iseq $I1, __ARG_2, "I" 2345 __label_3: 2346 __label_2: 2347 if $I1 goto __label_1 2348 iseq $I1, __ARG_2, "N" 2349 unless $I1 goto __label_4 2350 iseq $I1, __ARG_1, "N" 2351 if $I1 goto __label_5 2352 iseq $I1, __ARG_1, "I" 2353 __label_5: 2354 __label_4: 2355 __label_1: 2356 .return($I1) 2357 2358.end # floatresult 2359 2360 2361.sub 'createPredefConstInt' :subid('WSubId_156') 2362 .param pmc __ARG_1 2363 .param string __ARG_2 2364 .param int __ARG_3 2365.const 'Sub' integerValue = "integerValue" 2366 new $P3, [ 'Winxed'; 'Compiler'; 'TokenIdentifier' ] 2367 $P3.'TokenIdentifier'("__predefconst__", 0, __ARG_2) 2368 set $P1, $P3 2369 $P2 = __ARG_1.'createconst'($P1, "I", 4) 2370 $P3 = integerValue(__ARG_1, $P1, __ARG_3) 2371 $P2.'setvalue'($P3) 2372 2373.end # createPredefConstInt 2374 2375 2376.sub 'createPredefConstString' :subid('WSubId_148') 2377 .param pmc __ARG_1 2378 .param string __ARG_2 2379 .param string __ARG_3 2380 new $P3, [ 'Winxed'; 'Compiler'; 'TokenIdentifier' ] 2381 $P3.'TokenIdentifier'("__predefconst__", 0, __ARG_2) 2382 set $P1, $P3 2383 $P2 = __ARG_1.'createconst'($P1, "S", 4) 2384 new $P4, [ 'Winxed'; 'Compiler'; 'StringLiteral' ] 2385 new $P6, [ 'Winxed'; 'Compiler'; 'TokenQuoted' ] 2386 $P6.'TokenQuoted'("__predefconst__", 0, __ARG_3) 2387 set $P5, $P6 2388 $P4.'StringLiteral'(__ARG_1, $P5) 2389 set $P3, $P4 2390 $P2.'setvalue'($P3) 2391 2392.end # createPredefConstString 2393 2394 2395.sub 'int_from_literal_arg1' :subid('bindmethod1') 2396 .param pmc __ARG_1 2397.const 'Sub' InternalError = "InternalError" 2398 $P2 = __ARG_1[0] 2399 getattribute $P1, $P2, 'arg' 2400 $P2 = $P1.'getIntegerValue'() 2401 set $I1, $P2 2402 set $I2, $I1 2403 .return($I2) 2404 2405.end # int_from_literal_arg1 2406 2407 2408.sub 'string_from_literal_arg1' :subid('WSubId_49') 2409 .param pmc __ARG_1 2410.const 'Sub' InternalError = "InternalError" 2411 $P2 = __ARG_1[0] 2412 getattribute $P1, $P2, 'arg' 2413 $P2 = $P1.'getStringValue'() 2414 null $S1 2415 if_null $P2, __label_1 2416 set $S1, $P2 2417 __label_1: 2418 set $S2, $S1 2419 .return($S2) 2420 2421.end # string_from_literal_arg1 2422 2423.namespace [ 'Winxed'; 'Compiler'; 'Builtin_frombody' ] 2424 2425.sub 'Builtin_frombody' :method 2426 .param string __ARG_1 2427 .param string __ARG_2 2428.const 'Sub' InternalError = "InternalError" 2429 length $I3, __ARG_2 2430 sub $I2, $I3, 1 2431 substr $S1, __ARG_2, $I2, 1 2432 ne $S1, "\n", __label_1 2433 substr __ARG_2, __ARG_2, 0, $I2 2434 __label_1: # endif 2435 split $P1, "\n", __ARG_2 2436 join $S1, "\n ", $P1 2437 concat $S2, " ", $S1 2438 set __ARG_2, $S2 2439 box $P1, __ARG_2 2440 setattribute self, 'body', $P1 2441 box $P1, __ARG_1 2442 setattribute self, 'typeresult', $P1 2443 2444.end # Builtin_frombody 2445 2446 2447.sub 'invoke' :method :vtable 2448 .param pmc __ARG_1 2449 .param pmc __ARG_2 2450 .param pmc __ARG_3 2451 .param string __ARG_4 2452 .param pmc __ARG_5 2453.const 'Sub' SyntaxError = "SyntaxError" 2454.const 'Sub' InternalError = "InternalError" 2455.const 'Sub' sformat = "sformat" 2456 getattribute $P1, self, 'typeresult' 2457 null $S1 2458 if_null $P1, __label_1 2459 set $S1, $P1 2460 __label_1: 2461 ne $S1, "v", __label_2 2462 if_null __ARG_4, __label_4 2463 eq __ARG_4, "", __label_4 2464 SyntaxError("using return value from void builtin", __ARG_3) 2465 __label_4: # endif 2466 goto __label_3 2467 __label_2: # else 2468 isnull $I1, __ARG_4 2469 if $I1 goto __label_6 2470 iseq $I1, __ARG_4, "" 2471 __label_6: 2472 unless $I1 goto __label_5 2473 InternalError("Bad result in non void builtin") 2474 __label_5: # endif 2475 __label_3: # endif 2476 __ARG_1.'annotate'(__ARG_3) 2477 getattribute $P2, self, 'body' 2478 $P1 = sformat($P2, __ARG_4, __ARG_5 :flat) 2479 __ARG_1.'say'($P1) 2480 2481.end # invoke 2482 2483.sub Winxed_class_init :anon :load :init 2484 newclass $P0, [ 'Winxed'; 'Compiler'; 'Builtin_frombody' ] 2485 addattribute $P0, 'body' 2486 addattribute $P0, 'typeresult' 2487.end 2488.namespace [ 'Winxed'; 'Compiler'; 'BuiltinBase' ] 2489 2490.sub 'BuiltinBase' :method 2491 .param string __ARG_1 2492 .param pmc __ARG_2 2493 .param string __ARG_3 2494 .param string __ARG_4 2495 .param string __ARG_5 2496 .param string __ARG_6 2497 .param string __ARG_7 2498.const 'Sub' InternalError = "InternalError" 2499 box $P1, __ARG_1 2500 setattribute self, 'name', $P1 2501 if_null __ARG_2, __label_1 2502 isa $I2, __ARG_2, "String" 2503 unless $I2 goto __label_1 2504 new $P3, [ 'Winxed'; 'Compiler'; 'Builtin_frombody' ] 2505 $P3.'Builtin_frombody'(__ARG_3, __ARG_2) 2506 set $P2, $P3 2507 setattribute self, 'body', $P2 2508 goto __label_2 2509 __label_1: # else 2510 setattribute self, 'body', __ARG_2 2511 __label_2: # endif 2512 box $P1, __ARG_3 2513 setattribute self, 'typeresult', $P1 2514 null $I1 2515 if_null __ARG_4, __label_3 2516 box $P1, __ARG_4 2517 setattribute self, 'type0', $P1 2518 if_null __ARG_4, __label_4 2519 length $I2, __ARG_4 2520 ne $I2, 1, __label_4 2521 ord $I2, __ARG_4 2522 if $I2 == 42 goto __label_6 2523 if $I2 == 33 goto __label_7 2524 goto __label_4 2525 __label_6: # case 2526 set $I1, -1 2527 goto __label_5 # break 2528 __label_7: # case 2529 set $I1, -2 2530 if_null __ARG_5, __label_8 2531 concat $S1, "Invalid builtin '", __ARG_1 2532 concat $S1, $S1, "'" 2533 InternalError($S1) 2534 __label_8: # endif 2535 goto __label_5 # break 2536 __label_4: # default 2537 set $I1, 1 2538 if_null __ARG_5, __label_9 2539 box $P1, __ARG_5 2540 setattribute self, 'type1', $P1 2541 inc $I1 2542 __label_9: # endif 2543 if_null __ARG_6, __label_10 2544 box $P1, __ARG_6 2545 setattribute self, 'type2', $P1 2546 inc $I1 2547 __label_10: # endif 2548 if_null __ARG_7, __label_11 2549 box $P1, __ARG_7 2550 setattribute self, 'type3', $P1 2551 inc $I1 2552 __label_11: # endif 2553 __label_5: # switch end 2554 __label_3: # endif 2555 box $P1, $I1 2556 setattribute self, 'nparams', $P1 2557 2558.end # BuiltinBase 2559 2560 2561.sub 'isreplaceexpr' :method 2562 .return(0) 2563 2564.end # isreplaceexpr 2565 2566 2567.sub 'iscompileevaluable' :method 2568 .return(0) 2569 2570.end # iscompileevaluable 2571 2572 2573.sub 'name' :method 2574 getattribute $P1, self, 'name' 2575 set $S1, $P1 2576 .return($S1) 2577 2578.end # name 2579 2580 2581.sub 'result' :method 2582 getattribute $P1, self, 'typeresult' 2583 .return($P1) 2584 2585.end # result 2586 2587 2588.sub 'params' :method 2589 getattribute $P1, self, 'nparams' 2590 .return($P1) 2591 2592.end # params 2593 2594 2595.sub 'paramtype' :method 2596 .param int __ARG_1 2597.const 'Sub' InternalError = "InternalError" 2598 null $S1 2599 if __ARG_1 == 0 goto __label_3 2600 if __ARG_1 == 1 goto __label_4 2601 if __ARG_1 == 2 goto __label_5 2602 if __ARG_1 == 3 goto __label_6 2603 goto __label_1 2604 __label_3: # case 2605 getattribute $P1, self, 'type0' 2606 set $S1, $P1 2607 goto __label_2 # break 2608 __label_4: # case 2609 getattribute $P2, self, 'type1' 2610 set $S1, $P2 2611 goto __label_2 # break 2612 __label_5: # case 2613 getattribute $P3, self, 'type2' 2614 set $S1, $P3 2615 goto __label_2 # break 2616 __label_6: # case 2617 getattribute $P4, self, 'type3' 2618 set $S1, $P4 2619 goto __label_2 # break 2620 __label_1: # default 2621 InternalError("Invalid builtin arg") 2622 __label_2: # switch end 2623 .return($S1) 2624 2625.end # paramtype 2626 2627 2628.sub 'expand' :method 2629 .param pmc __ARG_1 2630 .param pmc __ARG_2 2631 .param pmc __ARG_3 2632 .param string __ARG_4 2633 .param pmc __ARG_5 2634 getattribute $P2, self, 'name' 2635 null $S1 2636 if_null $P2, __label_1 2637 set $S1, $P2 2638 __label_1: 2639 $P2 = __ARG_1.'getDebug'() 2640 if_null $P2, __label_2 2641 unless $P2 goto __label_2 2642 eq $S1, "__ASSERT__", __label_3 2643 __ARG_1.'comment'("builtin ", $S1) 2644 __label_3: # endif 2645 __label_2: # endif 2646 getattribute $P2, self, 'typeresult' 2647 null $S2 2648 if_null $P2, __label_4 2649 set $S2, $P2 2650 __label_4: 2651 eq $S2, "v", __label_5 2652 ne __ARG_4, "", __label_5 2653 $P2 = __ARG_2.'tempreg'($S2) 2654 set __ARG_4, $P2 2655 __label_5: # endif 2656 getattribute $P1, self, 'body' 2657 $P1(__ARG_1, __ARG_2, __ARG_3, __ARG_4, __ARG_5) 2658 2659.end # expand 2660 2661.sub Winxed_class_init :anon :load :init 2662 newclass $P0, [ 'Winxed'; 'Compiler'; 'BuiltinBase' ] 2663 addattribute $P0, 'name' 2664 addattribute $P0, 'body' 2665 addattribute $P0, 'typeresult' 2666 addattribute $P0, 'type0' 2667 addattribute $P0, 'type1' 2668 addattribute $P0, 'type2' 2669 addattribute $P0, 'type3' 2670 addattribute $P0, 'nparams' 2671.end 2672.namespace [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 2673 2674.sub 'BuiltinFunction' :method 2675 .param string __ARG_1 2676 .param pmc __ARG_2 2677 .param string __ARG_3 2678 .param string __ARG_4 :optional 2679 .param string __ARG_5 :optional 2680 .param string __ARG_6 :optional 2681 .param string __ARG_7 :optional 2682 self.'BuiltinBase'(__ARG_1, __ARG_2, __ARG_3, __ARG_4, __ARG_5, __ARG_6, __ARG_7) 2683 2684.end # BuiltinFunction 2685 2686.sub Winxed_class_init :anon :load :init 2687 newclass $P0, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 2688 get_class $P1, [ 'Winxed'; 'Compiler'; 'BuiltinBase' ] 2689 addparent $P0, $P1 2690.end 2691.namespace [ 'Winxed'; 'Compiler'; 'BuiltinFunctionEval' ] 2692 2693.sub 'BuiltinFunctionEval' :method 2694 .param string __ARG_1 2695 .param pmc __ARG_2 2696 .param pmc __ARG_3 2697 .param string __ARG_4 2698 .param string __ARG_5 :optional 2699 .param string __ARG_6 :optional 2700 .param string __ARG_7 :optional 2701 .param string __ARG_8 :optional 2702 self.'BuiltinBase'(__ARG_1, __ARG_3, __ARG_4, __ARG_5, __ARG_6, __ARG_7, __ARG_8) 2703 setattribute self, 'evalfun', __ARG_2 2704 2705.end # BuiltinFunctionEval 2706 2707 2708.sub 'iscompileevaluable' :method 2709 .return(1) 2710 2711.end # iscompileevaluable 2712 2713.sub Winxed_class_init :anon :load :init 2714 newclass $P0, [ 'Winxed'; 'Compiler'; 'BuiltinFunctionEval' ] 2715 get_class $P1, [ 'Winxed'; 'Compiler'; 'BuiltinBase' ] 2716 addparent $P0, $P1 2717 addattribute $P0, 'evalfun' 2718.end 2719.namespace [ 'Winxed'; 'Compiler'; 'BuiltinExpr' ] 2720 2721.sub 'BuiltinExpr' :method 2722 .param string __ARG_1 2723 .param pmc __ARG_2 2724 .param string __ARG_3 2725 .param string __ARG_4 :optional 2726 .param string __ARG_5 :optional 2727 .param string __ARG_6 :optional 2728 .param string __ARG_7 :optional 2729 null $P1 2730 self.'BuiltinBase'(__ARG_1, $P1, __ARG_3, __ARG_4, __ARG_5, __ARG_6, __ARG_7) 2731 setattribute self, 'exprfun', __ARG_2 2732 2733.end # BuiltinExpr 2734 2735 2736.sub 'isreplaceexpr' :method 2737 .return(1) 2738 2739.end # isreplaceexpr 2740 2741 2742.sub 'replaceexpr' :method 2743 .param pmc __ARG_1 2744 .param pmc __ARG_2 2745 .param pmc __ARG_3 2746 getattribute $P1, self, 'exprfun' 2747 .tailcall $P1(__ARG_1, __ARG_2, __ARG_3) 2748 2749.end # replaceexpr 2750 2751.sub Winxed_class_init :anon :load :init 2752 newclass $P0, [ 'Winxed'; 'Compiler'; 'BuiltinExpr' ] 2753 get_class $P1, [ 'Winxed'; 'Compiler'; 'BuiltinBase' ] 2754 addparent $P0, $P1 2755 addattribute $P0, 'exprfun' 2756.end 2757.namespace [ 'Winxed'; 'Compiler' ] 2758 2759.sub 'Builtin_say' :subid('Builtin_say') 2760 .param pmc __ARG_1 2761 .param pmc __ARG_2 2762 .param pmc __ARG_3 2763 .param string __ARG_4 2764 .param pmc __ARG_5 2765 __ARG_1.'annotate'(__ARG_3) 2766 elements $I3, __ARG_5 2767 sub $I1, $I3, 1 2768 lt $I1, 0, __label_1 2769 null $I2 2770 __label_5: # for condition 2771 ge $I2, $I1, __label_4 2772 $P1 = __ARG_5[$I2] 2773 __ARG_1.'emitprint'($P1) 2774 __label_3: # for iteration 2775 inc $I2 2776 goto __label_5 2777 __label_4: # for end 2778 $P1 = __ARG_5[$I1] 2779 __ARG_1.'emitsay'($P1) 2780 goto __label_2 2781 __label_1: # else 2782 __ARG_1.'emitsay'("''") 2783 __label_2: # endif 2784 2785.end # Builtin_say 2786 2787 2788.sub 'Builtin_cry' :subid('Builtin_cry') 2789 .param pmc __ARG_1 2790 .param pmc __ARG_2 2791 .param pmc __ARG_3 2792 .param string __ARG_4 2793 .param pmc __ARG_5 2794.const 'Sub' sformat = "sformat" 2795.const 'Sub' WSubId_9 = "WSubId_9" 2796 __ARG_1.'annotate'(__ARG_3) 2797 set $P1, __ARG_5 2798 root_new $P2, ['parrot';'ResizablePMCArray'] 2799 $P3 = WSubId_9(" print $P0, ") 2800 if_null $P1, __label_2 2801 iter $P7, $P1 2802 set $P7, 0 2803 __label_1: # for iteration 2804 unless $P7 goto __label_2 2805 shift $P4, $P7 2806 $P8 = $P3($P4) 2807 push $P2, $P8 2808 goto __label_1 2809 __label_2: # endfor 2810 set $P6, $P2 2811 set $P5, $P6 2812 join $S1, "\n", $P5 2813 $P5 = sformat(" getstderr $P0\n%0\n print $P0, \"\\n\"\n", $S1) 2814 __ARG_1.'say'($P5) 2815 2816.end # Builtin_cry 2817 2818 2819.sub 'Builtin_print' :subid('WSubId_68') 2820 .param pmc __ARG_1 2821 .param pmc __ARG_2 2822 .param pmc __ARG_3 2823 .param string __ARG_4 2824 .param pmc __ARG_5 2825.const 'Sub' method_fun = "method_fun" 2826 __ARG_1.'annotate'(__ARG_3) 2827 set $P1, __ARG_5 2828 $P2 = method_fun(__ARG_1, "emitprint") 2829 if_null $P1, __label_2 2830 iter $P4, $P1 2831 set $P4, 0 2832 __label_1: # for iteration 2833 unless $P4 goto __label_2 2834 shift $P3, $P4 2835 $P2($P3) 2836 goto __label_1 2837 __label_2: # endfor 2838 2839.end # Builtin_print 2840 2841 2842.sub 'Builtin_abs' :subid('WSubId_67') 2843 .param pmc __ARG_1 2844 .param pmc __ARG_2 2845 .param pmc __ARG_3 2846 .param string __ARG_4 2847 .param pmc __ARG_5 2848 $P1 = __ARG_5[0] 2849 $P2 = $P1.'emit_get'(__ARG_1) 2850 null $S1 2851 if_null $P2, __label_1 2852 set $S1, $P2 2853 __label_1: 2854 $P2 = $P1.'checkresult'() 2855 set $S3, $P2 2856 ne $S3, "S", __label_2 2857 $P3 = __ARG_2.'tempreg'("N") 2858 null $S2 2859 if_null $P3, __label_4 2860 set $S2, $P3 2861 __label_4: 2862 __ARG_1.'annotate'(__ARG_3) 2863 __ARG_1.'emitset'($S2, $S1) 2864 __ARG_1.'emitarg2'("abs", $S2, $S2) 2865 __ARG_1.'emitset'(__ARG_4, $S2) 2866 goto __label_3 2867 __label_2: # else 2868 __ARG_1.'annotate'(__ARG_3) 2869 __ARG_1.'emitarg2'("abs", __ARG_4, $S1) 2870 __label_3: # endif 2871 2872.end # Builtin_abs 2873 2874 2875.sub 'Builtin_ASSERT' :subid('Builtin_ASSERT') 2876 .param pmc __ARG_1 2877 .param pmc __ARG_2 2878 .param pmc __ARG_3 2879 .param string __ARG_4 2880 .param pmc __ARG_5 2881.const 'Sub' sformat = "sformat" 2882 $P3 = __ARG_1.'getDebug'() 2883 if_null $P3, __label_1 2884 unless $P3 goto __label_1 2885 __ARG_1.'annotate'(__ARG_3) 2886 $P3 = __ARG_2.'genlabel'() 2887 null $S1 2888 if_null $P3, __label_2 2889 set $S1, $P3 2890 __label_2: 2891 $P1 = __ARG_5[0] 2892 $P2 = $P1.'emit_getint'(__ARG_1) 2893 __ARG_1.'emitif'($P2, $S1) 2894 $P4 = __ARG_3.'filename'() 2895 $P5 = __ARG_3.'linenum'() 2896 $P3 = sformat(" getstderr $P0\n print $P0, \"Assertion failed at '%0' line \"\n print $P0, %1\n print $P0, \"\\n\"\n exit 1\n", $P4, $P5) 2897 __ARG_1.'print'($P3) 2898 __ARG_1.'emitlabel'($S1) 2899 __label_1: # endif 2900 2901.end # Builtin_ASSERT 2902 2903 2904.sub 'Builtin_invoke' :subid('Builtin_invoke') 2905 .param pmc __ARG_1 2906 .param pmc __ARG_2 2907 .param pmc __ARG_3 2908 .param string __ARG_4 2909 .param pmc __ARG_5 2910.const 'Sub' SyntaxError = "SyntaxError" 2911 $P1 = __ARG_5[0] 2912 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'CallExpr' ] 2913 if $I1 goto __label_1 2914 SyntaxError("invoke argument must be callable", __ARG_3) 2915 __label_1: # endif 2916 concat $S1, "(", __ARG_4 2917 concat $S1, $S1, " :call_sig)" 2918 $P1.'emit'(__ARG_1, $S1) 2919 2920.end # Builtin_invoke 2921 2922 2923.sub 'builtineval_length' :subid('bindmethod7') 2924 .param pmc __ARG_1 2925 .param pmc __ARG_2 2926 .param pmc __ARG_3 2927.const 'Sub' WSubId_49 = "WSubId_49" 2928.const 'Sub' integerValue = "integerValue" 2929 $P1 = WSubId_49(__ARG_3) 2930 null $S1 2931 if_null $P1, __label_1 2932 set $S1, $P1 2933 __label_1: 2934 length $I1, $S1 2935 .tailcall integerValue(__ARG_1, __ARG_2, $I1) 2936 2937.end # builtineval_length 2938 2939 2940.sub 'builtineval_bytelength' :subid('bindmethod8') 2941 .param pmc __ARG_1 2942 .param pmc __ARG_2 2943 .param pmc __ARG_3 2944.const 'Sub' WSubId_49 = "WSubId_49" 2945.const 'Sub' integerValue = "integerValue" 2946 $P1 = WSubId_49(__ARG_3) 2947 null $S1 2948 if_null $P1, __label_1 2949 set $S1, $P1 2950 __label_1: 2951 bytelength $I1, $S1 2952 .tailcall integerValue(__ARG_1, __ARG_2, $I1) 2953 2954.end # builtineval_bytelength 2955 2956 2957.sub 'builtineval_ord' :subid('WSubId_60') 2958 .param pmc __ARG_1 2959 .param pmc __ARG_2 2960 .param pmc __ARG_3 2961.const 'Sub' integerValue = "integerValue" 2962 elements $I1, __ARG_3 2963 $P5 = __ARG_3[0] 2964 getattribute $P1, $P5, 'arg' 2965 set $P2, $P1 2966 $P5 = $P2.'getStringValue'() 2967 null $S2 2968 if_null $P5, __label_1 2969 set $S2, $P5 2970 __label_1: 2971 set $S1, $S2 2972 null $I2 2973 le $I1, 1, __label_2 2974 $P5 = __ARG_3[1] 2975 getattribute $P3, $P5, 'arg' 2976 set $P4, $P3 2977 $P5 = $P4.'getIntegerValue'() 2978 set $I3, $P5 2979 set $I2, $I3 2980 __label_2: # endif 2981 ord $I4, $S1, $I2 2982 .tailcall integerValue(__ARG_1, __ARG_2, $I4) 2983 2984.end # builtineval_ord 2985 2986 2987.sub 'builtineval_chr' :subid('bindmethod9') 2988 .param pmc __ARG_1 2989 .param pmc __ARG_2 2990 .param pmc __ARG_3 2991.const 'Sub' bindmethod0 = "bindmethod0" 2992.const 'Sub' bindmethod1 = "bindmethod1" 2993 $P1 = bindmethod1(__ARG_3) 2994 set $I1, $P1 2995 chr $S0, $I1 2996 find_encoding $I0, "utf8" 2997 trans_encoding $S1, $S0, $I0 2998 .tailcall bindmethod0(__ARG_1, __ARG_2, $S1) 2999 3000.end # builtineval_chr 3001 3002 3003.sub 'builtineval_substr' :subid('WSubId_61') 3004 .param pmc __ARG_1 3005 .param pmc __ARG_2 3006 .param pmc __ARG_3 3007.const 'Sub' bindmethod0 = "bindmethod0" 3008 elements $I1, __ARG_3 3009 $P7 = __ARG_3[0] 3010 getattribute $P1, $P7, 'arg' 3011 $P7 = __ARG_3[1] 3012 getattribute $P2, $P7, 'arg' 3013 set $P3, $P1 3014 $P7 = $P3.'getStringValue'() 3015 null $S2 3016 if_null $P7, __label_1 3017 set $S2, $P7 3018 __label_1: 3019 set $S1, $S2 3020 set $P4, $P2 3021 $P7 = $P4.'getIntegerValue'() 3022 set $I3, $P7 3023 set $I2, $I3 3024 null $S3 3025 le $I1, 2, __label_2 3026 $P7 = __ARG_3[2] 3027 getattribute $P5, $P7, 'arg' 3028 set $P6, $P5 3029 $P7 = $P6.'getIntegerValue'() 3030 set $I5, $P7 3031 set $I4, $I5 3032 substr $S3, $S1, $I2, $I4 3033 goto __label_3 3034 __label_2: # else 3035 substr $S3, $S1, $I2 3036 __label_3: # endif 3037 .tailcall bindmethod0(__ARG_1, __ARG_2, $S3) 3038 3039.end # builtineval_substr 3040 3041 3042.sub 'builtineval_indexof' :subid('WSubId_62') 3043 .param pmc __ARG_1 3044 .param pmc __ARG_2 3045 .param pmc __ARG_3 3046.const 'Sub' integerValue = "integerValue" 3047 $P5 = __ARG_3[0] 3048 getattribute $P1, $P5, 'arg' 3049 $P5 = __ARG_3[1] 3050 getattribute $P2, $P5, 'arg' 3051 set $P3, $P1 3052 $P5 = $P3.'getStringValue'() 3053 null $S2 3054 if_null $P5, __label_1 3055 set $S2, $P5 3056 __label_1: 3057 set $S1, $S2 3058 set $P4, $P2 3059 $P5 = $P4.'getStringValue'() 3060 null $S4 3061 if_null $P5, __label_2 3062 set $S4, $P5 3063 __label_2: 3064 set $S3, $S4 3065 index $I1, $S1, $S3 3066 .tailcall integerValue(__ARG_1, __ARG_2, $I1) 3067 3068.end # builtineval_indexof 3069 3070 3071.sub 'builtineval_indexof_pos' :subid('WSubId_63') 3072 .param pmc __ARG_1 3073 .param pmc __ARG_2 3074 .param pmc __ARG_3 3075.const 'Sub' integerValue = "integerValue" 3076 $P7 = __ARG_3[0] 3077 getattribute $P1, $P7, 'arg' 3078 $P7 = __ARG_3[1] 3079 getattribute $P2, $P7, 'arg' 3080 $P7 = __ARG_3[2] 3081 getattribute $P3, $P7, 'arg' 3082 set $P4, $P1 3083 $P7 = $P4.'getStringValue'() 3084 null $S2 3085 if_null $P7, __label_1 3086 set $S2, $P7 3087 __label_1: 3088 set $S1, $S2 3089 set $P5, $P2 3090 $P7 = $P5.'getStringValue'() 3091 null $S4 3092 if_null $P7, __label_2 3093 set $S4, $P7 3094 __label_2: 3095 set $S3, $S4 3096 $P7 = __ARG_3[2] 3097 getattribute $P6, $P7, 'arg' 3098 $P7 = $P6.'getIntegerValue'() 3099 set $I2, $P7 3100 set $I1, $I2 3101 index $I3, $S1, $S3, $I1 3102 .tailcall integerValue(__ARG_1, __ARG_2, $I3) 3103 3104.end # builtineval_indexof_pos 3105 3106 3107.sub 'builtineval_upcase' :subid('WSubId_65') 3108 .param pmc __ARG_1 3109 .param pmc __ARG_2 3110 .param pmc __ARG_3 3111.const 'Sub' bindmethod0 = "bindmethod0" 3112.const 'Sub' WSubId_49 = "WSubId_49" 3113 $P1 = WSubId_49(__ARG_3) 3114 set $S2, $P1 3115 upcase $S1, $S2 3116 .tailcall bindmethod0(__ARG_1, __ARG_2, $S1) 3117 3118.end # builtineval_upcase 3119 3120 3121.sub 'builtineval_downcase' :subid('WSubId_66') 3122 .param pmc __ARG_1 3123 .param pmc __ARG_2 3124 .param pmc __ARG_3 3125.const 'Sub' bindmethod0 = "bindmethod0" 3126.const 'Sub' WSubId_49 = "WSubId_49" 3127 $P1 = WSubId_49(__ARG_3) 3128 set $S2, $P1 3129 downcase $S1, $S2 3130 .tailcall bindmethod0(__ARG_1, __ARG_2, $S1) 3131 3132.end # builtineval_downcase 3133 3134 3135.sub 'builtineval_escape' :subid('WSubId_64') 3136 .param pmc __ARG_1 3137 .param pmc __ARG_2 3138 .param pmc __ARG_3 3139.const 'Sub' bindmethod0 = "bindmethod0" 3140.const 'Sub' WSubId_49 = "WSubId_49" 3141 $P1 = WSubId_49(__ARG_3) 3142 set $S3, $P1 3143 escape $S2, $S3 3144 escape $S1, $S2 3145 .tailcall bindmethod0(__ARG_1, __ARG_2, $S1) 3146 3147.end # builtineval_escape 3148 3149 3150.sub 'builtin_sleep' :subid('bindmethod6') 3151 .param pmc __ARG_1 3152 .param pmc __ARG_2 3153 .param pmc __ARG_3 3154 .param string __ARG_4 3155 .param pmc __ARG_5 3156 $P1 = __ARG_5[0] 3157 null $S1 3158 $P2 = $P1.'checkresult'() 3159 null $S2 3160 if_null $P2, __label_1 3161 set $S2, $P2 3162 __label_1: 3163 if_null $S2, __label_2 3164 length $I1, $S2 3165 ne $I1, 1, __label_2 3166 ord $I1, $S2 3167 if $I1 == 73 goto __label_4 3168 if $I1 == 78 goto __label_5 3169 goto __label_2 3170 __label_4: # case 3171 $P2 = $P1.'emit_getint'(__ARG_1) 3172 set $S1, $P2 3173 goto __label_3 # break 3174 __label_5: # case 3175 $P3 = $P1.'emit_get'(__ARG_1) 3176 set $S1, $P3 3177 goto __label_3 # break 3178 __label_2: # default 3179 $P4 = $P1.'isnull'() 3180 if_null $P4, __label_6 3181 unless $P4 goto __label_6 3182 set $S1, "0" 3183 goto __label_7 3184 __label_6: # else 3185 $P5 = $P1.'emit_get'(__ARG_1) 3186 null $S3 3187 if_null $P5, __label_8 3188 set $S3, $P5 3189 __label_8: 3190 set $S1, "$N0" 3191 __ARG_1.'annotate'(__ARG_3) 3192 __ARG_1.'emitset'($S1, $S3) 3193 __label_7: # endif 3194 __label_3: # switch end 3195 __ARG_1.'annotate'(__ARG_3) 3196 __ARG_1.'emitarg1'("sleep", $S1) 3197 3198.end # builtin_sleep 3199 3200 3201.sub 'getbuiltins' :subid('WSubId_157') 3202 .param pmc __ARG_1 3203.const 'Sub' bindmethod2 = "bindmethod2" 3204.const 'Sub' bindmethod3 = "bindmethod3" 3205.const 'Sub' bindmethod4 = "bindmethod4" 3206.const 'Sub' bindmethod5 = "bindmethod5" 3207.const 'Sub' bindmethod6 = "bindmethod6" 3208.const 'Sub' bindmethod7 = "bindmethod7" 3209.const 'Sub' bindmethod8 = "bindmethod8" 3210.const 'Sub' bindmethod9 = "bindmethod9" 3211.const 'Sub' WSubId_60 = "WSubId_60" 3212.const 'Sub' WSubId_61 = "WSubId_61" 3213.const 'Sub' WSubId_62 = "WSubId_62" 3214.const 'Sub' WSubId_63 = "WSubId_63" 3215.const 'Sub' WSubId_64 = "WSubId_64" 3216.const 'Sub' WSubId_65 = "WSubId_65" 3217.const 'Sub' WSubId_66 = "WSubId_66" 3218.const 'Sub' WSubId_67 = "WSubId_67" 3219.const 'Sub' WSubId_68 = "WSubId_68" 3220.const 'Sub' Builtin_say = "Builtin_say" 3221.const 'Sub' Builtin_cry = "Builtin_cry" 3222.const 'Sub' Builtin_ASSERT = "Builtin_ASSERT" 3223.const 'Sub' Builtin_invoke = "Builtin_invoke" 3224 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinExpr' ] 3225 $P2.'BuiltinExpr'("int", bindmethod2, "S", "!") 3226 set $P1, $P2 3227 __ARG_1.'add'($P1) 3228 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinExpr' ] 3229 $P2.'BuiltinExpr'("float", bindmethod3, "S", "!") 3230 set $P1, $P2 3231 __ARG_1.'add'($P1) 3232 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinExpr' ] 3233 $P2.'BuiltinExpr'("string", bindmethod4, "S", "!") 3234 set $P1, $P2 3235 __ARG_1.'add'($P1) 3236 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinExpr' ] 3237 $P2.'BuiltinExpr'("var", bindmethod5, "P", "!") 3238 set $P1, $P2 3239 __ARG_1.'add'($P1) 3240 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3241 $P2.'BuiltinFunction'("die", "die %1", "v", "S") 3242 set $P1, $P2 3243 __ARG_1.'add'($P1) 3244 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3245 $P2.'BuiltinFunction'("exit", "exit %1", "v", "I") 3246 set $P1, $P2 3247 __ARG_1.'add'($P1) 3248 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3249 $P2.'BuiltinFunction'("time", "time %0", "I") 3250 set $P1, $P2 3251 __ARG_1.'add'($P1) 3252 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3253 $P2.'BuiltinFunction'("floattime", "time %0", "N") 3254 set $P1, $P2 3255 __ARG_1.'add'($P1) 3256 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3257 $P2.'BuiltinFunction'("sleep", bindmethod6, "v", "!") 3258 set $P1, $P2 3259 __ARG_1.'add'($P1) 3260 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3261 $P2.'BuiltinFunction'("spawnw", "spawnw %0, %1", "I", "P") 3262 set $P1, $P2 3263 __ARG_1.'add'($P1) 3264 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3265 $P2.'BuiltinFunction'("getstdin", "getstdin %0", "P") 3266 set $P1, $P2 3267 __ARG_1.'add'($P1) 3268 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3269 $P2.'BuiltinFunction'("getstdout", "getstdout %0", "P") 3270 set $P1, $P2 3271 __ARG_1.'add'($P1) 3272 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3273 $P2.'BuiltinFunction'("getstderr", "getstderr %0", "P") 3274 set $P1, $P2 3275 __ARG_1.'add'($P1) 3276 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3277 $P2.'BuiltinFunction'("open", "root_new %0, [\"parrot\";\"FileHandle\"]\n%0.\"open\"(%1)\n", "P", "S") 3278 set $P1, $P2 3279 __ARG_1.'add'($P1) 3280 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3281 $P2.'BuiltinFunction'("open", "root_new %0, [\"parrot\";\"FileHandle\"]\n%0.\"open\"(%1,%2)\n", "P", "S", "S") 3282 set $P1, $P2 3283 __ARG_1.'add'($P1) 3284 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3285 $P2.'BuiltinFunction'("Error", "root_new %0, [\"parrot\";\"Exception\"]\n%0[\"message\"] = %1\n", "P", "S") 3286 set $P1, $P2 3287 __ARG_1.'add'($P1) 3288 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3289 $P2.'BuiltinFunction'("Error", "root_new %0, [\"parrot\";\"Exception\"]\n%0[\"message\"] = %1\n%0[\"severity\"] = %2\n", "P", "S", "I") 3290 set $P1, $P2 3291 __ARG_1.'add'($P1) 3292 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3293 $P2.'BuiltinFunction'("Error", "root_new %0, [\"parrot\";\"Exception\"]\n%0[\"message\"] = %1\n%0[\"severity\"] = %2\n%0[\"type\"] = %3\n", "P", "S", "I", "I") 3294 set $P1, $P2 3295 __ARG_1.'add'($P1) 3296 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3297 $P2.'BuiltinFunction'("Error", "root_new %0, [\"parrot\";\"Exception\"]\n%0[\"message\"] = %1\n%0[\"severity\"] = %2\n%0[\"type\"] = %3\n%0[\"payload\"] = %4\n", "P", "S", "I", "I", "P") 3298 set $P1, $P2 3299 __ARG_1.'add'($P1) 3300 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3301 $P2.'BuiltinFunction'("elements", "elements %0, %1", "I", "P") 3302 set $P1, $P2 3303 __ARG_1.'add'($P1) 3304 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunctionEval' ] 3305 $P2.'BuiltinFunctionEval'("length", bindmethod7, "length %0, %1", "I", "S") 3306 set $P1, $P2 3307 __ARG_1.'add'($P1) 3308 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunctionEval' ] 3309 $P2.'BuiltinFunctionEval'("bytelength", bindmethod8, "bytelength %0, %1", "I", "S") 3310 set $P1, $P2 3311 __ARG_1.'add'($P1) 3312 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunctionEval' ] 3313 $P2.'BuiltinFunctionEval'("chr", bindmethod9, "chr $S0, %1\nfind_encoding $I0, \"utf8\"\ntrans_encoding %0, $S0, $I0\n", "S", "I") 3314 set $P1, $P2 3315 __ARG_1.'add'($P1) 3316 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunctionEval' ] 3317 $P2.'BuiltinFunctionEval'("ord", WSubId_60, "ord %0, %1", "I", "S") 3318 set $P1, $P2 3319 __ARG_1.'add'($P1) 3320 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunctionEval' ] 3321 $P2.'BuiltinFunctionEval'("ord", WSubId_60, "ord %0, %1, %2", "I", "S", "I") 3322 set $P1, $P2 3323 __ARG_1.'add'($P1) 3324 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunctionEval' ] 3325 $P2.'BuiltinFunctionEval'("substr", WSubId_61, "substr %0, %1, %2", "S", "S", "I") 3326 set $P1, $P2 3327 __ARG_1.'add'($P1) 3328 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunctionEval' ] 3329 $P2.'BuiltinFunctionEval'("substr", WSubId_61, "substr %0, %1, %2, %3", "S", "S", "I", "I") 3330 set $P1, $P2 3331 __ARG_1.'add'($P1) 3332 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3333 $P2.'BuiltinFunction'("replace", "replace %0, %1, %2, %3, %4", "S", "S", "I", "I", "S") 3334 set $P1, $P2 3335 __ARG_1.'add'($P1) 3336 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunctionEval' ] 3337 $P2.'BuiltinFunctionEval'("indexof", WSubId_62, "index %0, %1, %2", "I", "S", "S") 3338 set $P1, $P2 3339 __ARG_1.'add'($P1) 3340 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunctionEval' ] 3341 $P2.'BuiltinFunctionEval'("indexof", WSubId_63, "index %0, %1, %2, %3", "I", "S", "S", "I") 3342 set $P1, $P2 3343 __ARG_1.'add'($P1) 3344 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3345 $P2.'BuiltinFunction'("join", "join %0, %1, %2", "S", "S", "P") 3346 set $P1, $P2 3347 __ARG_1.'add'($P1) 3348 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunctionEval' ] 3349 $P2.'BuiltinFunctionEval'("escape", WSubId_64, "escape %0, %1", "S", "S") 3350 set $P1, $P2 3351 __ARG_1.'add'($P1) 3352 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3353 $P2.'BuiltinFunction'("unescape", "$P0 = new [\"String\"]\n$P0 = %1\n%0 = $P0.\"unescape\"(\"utf8\")\n", "S", "S") 3354 set $P1, $P2 3355 __ARG_1.'add'($P1) 3356 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3357 $P2.'BuiltinFunction'("unescape", "$P0 = new [\"String\"]\n$P0 = %1\n%0 = $P0.\"unescape\"(%2)\n", "S", "S", "S") 3358 set $P1, $P2 3359 __ARG_1.'add'($P1) 3360 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3361 $P2.'BuiltinFunction'("trans_encoding", "find_encoding $I0, %2\ntrans_encoding %0, %1, $I0\n", "S", "S", "S") 3362 set $P1, $P2 3363 __ARG_1.'add'($P1) 3364 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3365 $P2.'BuiltinFunction'("encoding_name", "encoding $I0, %1\nencodingname %0, $I0\n", "S", "S") 3366 set $P1, $P2 3367 __ARG_1.'add'($P1) 3368 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunctionEval' ] 3369 $P2.'BuiltinFunctionEval'("upcase", WSubId_65, "upcase %0, %1", "S", "S") 3370 set $P1, $P2 3371 __ARG_1.'add'($P1) 3372 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunctionEval' ] 3373 $P2.'BuiltinFunctionEval'("downcase", WSubId_66, "downcase %0, %1", "S", "S") 3374 set $P1, $P2 3375 __ARG_1.'add'($P1) 3376 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3377 $P2.'BuiltinFunction'("titlecase", "titlecase %0, %1", "S", "S") 3378 set $P1, $P2 3379 __ARG_1.'add'($P1) 3380 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3381 $P2.'BuiltinFunction'("split", "split %0, %1, %2", "P", "S", "S") 3382 set $P1, $P2 3383 __ARG_1.'add'($P1) 3384 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3385 $P2.'BuiltinFunction'("chomp", "$P0 = get_root_global [\"parrot\";\"String\";\"Utils\"], \"chomp\"\n%0 = $P0(%1)\n", "S", "S") 3386 set $P1, $P2 3387 __ARG_1.'add'($P1) 3388 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3389 $P2.'BuiltinFunction'("chomp", "$P0 = get_root_global [\"parrot\";\"String\";\"Utils\"], \"chomp\"\n%0 = $P0(%1, %2)\n", "S", "S", "S") 3390 set $P1, $P2 3391 __ARG_1.'add'($P1) 3392 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3393 $P2.'BuiltinFunction'("push", "push %1, %2", "v", "P", "?") 3394 set $P1, $P2 3395 __ARG_1.'add'($P1) 3396 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3397 $P2.'BuiltinFunction'("unshift", "unshift %1, %2", "v", "P", "?") 3398 set $P1, $P2 3399 __ARG_1.'add'($P1) 3400 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3401 $P2.'BuiltinFunction'("pop_var", "pop %0, %1", "P", "P") 3402 set $P1, $P2 3403 __ARG_1.'add'($P1) 3404 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3405 $P2.'BuiltinFunction'("shift_var", "shift %0, %1", "P", "P") 3406 set $P1, $P2 3407 __ARG_1.'add'($P1) 3408 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3409 $P2.'BuiltinFunction'("pop_int", "pop %0, %1", "I", "P") 3410 set $P1, $P2 3411 __ARG_1.'add'($P1) 3412 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3413 $P2.'BuiltinFunction'("shift_int", "shift %0, %1", "I", "P") 3414 set $P1, $P2 3415 __ARG_1.'add'($P1) 3416 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3417 $P2.'BuiltinFunction'("pop_float", "pop %0, %1", "N", "P") 3418 set $P1, $P2 3419 __ARG_1.'add'($P1) 3420 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3421 $P2.'BuiltinFunction'("shift_float", "shift %0, %1", "N", "P") 3422 set $P1, $P2 3423 __ARG_1.'add'($P1) 3424 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3425 $P2.'BuiltinFunction'("pop_string", "pop %0, %1", "S", "P") 3426 set $P1, $P2 3427 __ARG_1.'add'($P1) 3428 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3429 $P2.'BuiltinFunction'("shift_string", "shift %0, %1", "S", "P") 3430 set $P1, $P2 3431 __ARG_1.'add'($P1) 3432 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3433 $P2.'BuiltinFunction'("abs", WSubId_67, ":", "!") 3434 set $P1, $P2 3435 __ARG_1.'add'($P1) 3436 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3437 $P2.'BuiltinFunction'("sqrt", "sqrt %0, %1", "N", "N") 3438 set $P1, $P2 3439 __ARG_1.'add'($P1) 3440 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3441 $P2.'BuiltinFunction'("pow", "pow %0, %1, %2", "N", "N", "N") 3442 set $P1, $P2 3443 __ARG_1.'add'($P1) 3444 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3445 $P2.'BuiltinFunction'("exp", "exp %0, %1", "N", "N") 3446 set $P1, $P2 3447 __ARG_1.'add'($P1) 3448 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3449 $P2.'BuiltinFunction'("ln", "ln %0, %1", "N", "N") 3450 set $P1, $P2 3451 __ARG_1.'add'($P1) 3452 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3453 $P2.'BuiltinFunction'("sin", "sin %0, %1", "N", "N") 3454 set $P1, $P2 3455 __ARG_1.'add'($P1) 3456 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3457 $P2.'BuiltinFunction'("cos", "cos %0, %1", "N", "N") 3458 set $P1, $P2 3459 __ARG_1.'add'($P1) 3460 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3461 $P2.'BuiltinFunction'("tan", "tan %0, %1", "N", "N") 3462 set $P1, $P2 3463 __ARG_1.'add'($P1) 3464 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3465 $P2.'BuiltinFunction'("asin", "asin %0, %1", "N", "N") 3466 set $P1, $P2 3467 __ARG_1.'add'($P1) 3468 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3469 $P2.'BuiltinFunction'("acos", "acos %0, %1", "N", "N") 3470 set $P1, $P2 3471 __ARG_1.'add'($P1) 3472 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3473 $P2.'BuiltinFunction'("atan", "atan %0, %1", "N", "N") 3474 set $P1, $P2 3475 __ARG_1.'add'($P1) 3476 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3477 $P2.'BuiltinFunction'("atan", "atan %0, %1, %2", "N", "N", "N") 3478 set $P1, $P2 3479 __ARG_1.'add'($P1) 3480 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3481 $P2.'BuiltinFunction'("sinh", "sinh %0, %1", "N", "N") 3482 set $P1, $P2 3483 __ARG_1.'add'($P1) 3484 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3485 $P2.'BuiltinFunction'("cosh", "cosh %0, %1", "N", "N") 3486 set $P1, $P2 3487 __ARG_1.'add'($P1) 3488 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3489 $P2.'BuiltinFunction'("tanh", "tanh %0, %1", "N", "N") 3490 set $P1, $P2 3491 __ARG_1.'add'($P1) 3492 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3493 $P2.'BuiltinFunction'("getinterp", "getinterp %0", "P") 3494 set $P1, $P2 3495 __ARG_1.'add'($P1) 3496 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3497 $P2.'BuiltinFunction'("getcontext", "get_context %0", "P") 3498 set $P1, $P2 3499 __ARG_1.'add'($P1) 3500 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3501 $P2.'BuiltinFunction'("get_context", "get_context %0", "P") 3502 set $P1, $P2 3503 __ARG_1.'add'($P1) 3504 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3505 $P2.'BuiltinFunction'("get_class", "get_class %0, %1", "P", "p") 3506 set $P1, $P2 3507 __ARG_1.'add'($P1) 3508 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3509 $P2.'BuiltinFunction'("typeof", "typeof %0, %1", "P", "P") 3510 set $P1, $P2 3511 __ARG_1.'add'($P1) 3512 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3513 $P2.'BuiltinFunction'("getattribute", "getattribute %0, %1, %2", "P", "P", "S") 3514 set $P1, $P2 3515 __ARG_1.'add'($P1) 3516 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3517 $P2.'BuiltinFunction'("getattribute", "getattribute %0, %1, %2, %3", "P", "P", "P", "S") 3518 set $P1, $P2 3519 __ARG_1.'add'($P1) 3520 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3521 $P2.'BuiltinFunction'("setattribute", "setattribute %1, %2, %3, %4", "v", "P", "P", "S", "P") 3522 set $P1, $P2 3523 __ARG_1.'add'($P1) 3524 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3525 $P2.'BuiltinFunction'("find_method", "find_method %0, %1, %2", "P", "P", "S") 3526 set $P1, $P2 3527 __ARG_1.'add'($P1) 3528 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3529 $P2.'BuiltinFunction'("callmethodwithargs", "%0 = %1.%2(%3 :flat)", "P", "P", "P", "P") 3530 set $P1, $P2 3531 __ARG_1.'add'($P1) 3532 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3533 $P2.'BuiltinFunction'("clone", "clone %0, %1", "P", "P") 3534 set $P1, $P2 3535 __ARG_1.'add'($P1) 3536 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3537 $P2.'BuiltinFunction'("compreg", "compreg %0, %1", "P", "S") 3538 set $P1, $P2 3539 __ARG_1.'add'($P1) 3540 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3541 $P2.'BuiltinFunction'("compreg", "compreg %1, %2", "v", "S", "P") 3542 set $P1, $P2 3543 __ARG_1.'add'($P1) 3544 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3545 $P2.'BuiltinFunction'("load_language", "load_language %1\ncompreg %0, %1\n", "P", "S") 3546 set $P1, $P2 3547 __ARG_1.'add'($P1) 3548 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3549 $P2.'BuiltinFunction'("load_language", "load_language %1\ncompreg %0, %2\n", "P", "S", "S") 3550 set $P1, $P2 3551 __ARG_1.'add'($P1) 3552 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3553 $P2.'BuiltinFunction'("loadlib", "loadlib %0, %1", "P", "S") 3554 set $P1, $P2 3555 __ARG_1.'add'($P1) 3556 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3557 $P2.'BuiltinFunction'("load_bytecode", "load_bytecode %1", "v", "S") 3558 set $P1, $P2 3559 __ARG_1.'add'($P1) 3560 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3561 $P2.'BuiltinFunction'("load_packfile", "load_bytecode %0, %1", "P", "S") 3562 set $P1, $P2 3563 __ARG_1.'add'($P1) 3564 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3565 $P2.'BuiltinFunction'("dlfunc", "dlfunc %0, %1, %2, %3", "P", "P", "S", "S") 3566 set $P1, $P2 3567 __ARG_1.'add'($P1) 3568 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3569 $P2.'BuiltinFunction'("sprintf", "sprintf %0, %1, %2", "S", "S", "P") 3570 set $P1, $P2 3571 __ARG_1.'add'($P1) 3572 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3573 $P2.'BuiltinFunction'("print", WSubId_68, "v", "*") 3574 set $P1, $P2 3575 __ARG_1.'add'($P1) 3576 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3577 $P2.'BuiltinFunction'("say", Builtin_say, "v", "*") 3578 set $P1, $P2 3579 __ARG_1.'add'($P1) 3580 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3581 $P2.'BuiltinFunction'("cry", Builtin_cry, "v", "*") 3582 set $P1, $P2 3583 __ARG_1.'add'($P1) 3584 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3585 $P2.'BuiltinFunction'("__ASSERT__", Builtin_ASSERT, "v", "!") 3586 set $P1, $P2 3587 __ARG_1.'add'($P1) 3588 new $P2, [ 'Winxed'; 'Compiler'; 'BuiltinFunction' ] 3589 $P2.'BuiltinFunction'("invoke", Builtin_invoke, "P", "!") 3590 set $P1, $P2 3591 __ARG_1.'add'($P1) 3592 3593.end # getbuiltins 3594 3595 3596.sub 'parseDotted' :subid('parseDotted') 3597 .param pmc __ARG_1 3598 root_new $P1, ['parrot';'ResizablePMCArray'] 3599 $P2 = __ARG_1.'get'() 3600 $P3 = $P2.'isidentifier'() 3601 if_null $P3, __label_1 3602 unless $P3 goto __label_1 3603 push $P1, $P2 3604 __label_3: # while 3605 $P2 = __ARG_1.'get'() 3606 $P3 = $P2.'isop'(".") 3607 if_null $P3, __label_2 3608 unless $P3 goto __label_2 3609 $P2 = __ARG_1.'get'() 3610 push $P1, $P2 3611 goto __label_3 3612 __label_2: # endwhile 3613 __label_1: # endif 3614 __ARG_1.'unget'($P2) 3615 .return($P1) 3616 3617.end # parseDotted 3618 3619 3620.sub 'parseList' :subid('WSubId_74') 3621 .param pmc __ARG_1 3622 .param pmc __ARG_2 3623 .param pmc __ARG_3 3624 .param string __ARG_4 :optional 3625.const 'Sub' SyntaxError = "SyntaxError" 3626 root_new $P1, ['parrot';'ResizablePMCArray'] 3627 null $P2 3628 __label_1: # do 3629 $P3 = __ARG_3(__ARG_1, __ARG_2) 3630 push $P1, $P3 3631 __label_3: # continue 3632 $P2 = __ARG_1.'get'() 3633 $P4 = $P2.'isop'(",") 3634 if_null $P4, __label_2 3635 if $P4 goto __label_1 3636 __label_2: # enddo 3637 unless_null __ARG_4, __label_4 3638 __ARG_1.'unget'($P2) 3639 goto __label_5 3640 __label_4: # else 3641 $P4 = $P2.'isop'(__ARG_4) 3642 if $P4 goto __label_6 3643 SyntaxError("Unfinished argument list", $P2) 3644 __label_6: # endif 3645 __label_5: # endif 3646 .return($P1) 3647 3648.end # parseList 3649 3650 3651.sub 'parseListOrEmpty' :subid('parseListOrEmpty') 3652 .param pmc __ARG_1 3653 .param pmc __ARG_2 3654 .param pmc __ARG_3 3655 .param string __ARG_4 3656.const 'Sub' SyntaxError = "SyntaxError" 3657 $P1 = __ARG_1.'get'() 3658 $P4 = $P1.'isop'(__ARG_4) 3659 if_null $P4, __label_1 3660 unless $P4 goto __label_1 3661 null $P5 3662 .return($P5) 3663 __label_1: # endif 3664 __ARG_1.'unget'($P1) 3665 root_new $P2, ['parrot';'ResizablePMCArray'] 3666 __label_2: # do 3667 $P3 = __ARG_3(__ARG_1, __ARG_2) 3668 push $P2, $P3 3669 __label_4: # continue 3670 $P1 = __ARG_1.'get'() 3671 $P4 = $P1.'isop'(",") 3672 if_null $P4, __label_3 3673 if $P4 goto __label_2 3674 __label_3: # enddo 3675 $P4 = $P1.'isop'(__ARG_4) 3676 if $P4 goto __label_5 3677 SyntaxError("Unfinished argument list", $P1) 3678 __label_5: # endif 3679 .return($P2) 3680 3681.end # parseListOrEmpty 3682 3683 3684.sub 'parseIdentifier' :subid('parseIdentifier') 3685 .param pmc __ARG_1 3686 .param pmc __ARG_2 3687.const 'Sub' bindlast0 = "bindlast0" 3688 $P1 = __ARG_1.'get'() 3689 $P2 = $P1.'isidentifier'() 3690 if $P2 goto __label_1 3691 bindlast0($P1) 3692 __label_1: # endif 3693 .return($P1) 3694 3695.end # parseIdentifier 3696 3697 3698.sub 'toIdentifierList' :subid('WSubId_73') 3699 .param pmc __ARG_1 3700.const 'Sub' bindmethod = "bindmethod" 3701 new $P1, ['ResizableStringArray'] 3702 set $P2, __ARG_1 3703 set $P3, $P1 3704 $P4 = bindmethod("getidentifier") 3705 if_null $P2, __label_2 3706 iter $P6, $P2 3707 set $P6, 0 3708 __label_1: # for iteration 3709 unless $P6 goto __label_2 3710 shift $P5, $P6 3711 $P7 = $P4($P5) 3712 push $P3, $P7 3713 goto __label_1 3714 __label_2: # endfor 3715 .return($P1) 3716 3717.end # toIdentifierList 3718 3719 3720.sub 'toModuleFilename' :subid('toModuleFilename') 3721 .param pmc __ARG_1 3722.const 'Sub' WSubId_73 = "WSubId_73" 3723 $P1 = WSubId_73(__ARG_1) 3724 join $S1, "/", $P1 3725 concat $S2, "\"", $S1 3726 concat $S2, $S2, ".pbc\"" 3727 .return($S2) 3728 3729.end # toModuleFilename 3730 3731.namespace [ 'Winxed'; 'Compiler'; 'CommonBase' ] 3732 3733.sub 'initbase' :method 3734 .param pmc __ARG_1 3735 .param pmc __ARG_2 3736 setattribute self, 'start', __ARG_1 3737 setattribute self, 'owner', __ARG_2 3738 3739.end # initbase 3740 3741 3742.sub 'clone' :method 3743 .param pmc __ARG_1 3744.const 'Sub' SyntaxError = "SyntaxError" 3745 typeof $P1, self 3746 set $S1, $P1 3747 concat $S2, "Cannot use ", $S1 3748 concat $S2, $S2, " in inline (yet)" 3749 SyntaxError($S2, self) 3750 3751.end # clone 3752 3753 3754.sub 'getstart' :method 3755 getattribute $P1, self, 'start' 3756 .return($P1) 3757 3758.end # getstart 3759 3760 3761.sub 'viewable' :method 3762 getattribute $P1, self, 'start' 3763 if_null $P1, __label_1 3764 getattribute $P2, self, 'start' 3765 .tailcall $P2.'viewable'() 3766 goto __label_2 3767 __label_1: # else 3768 .return("") 3769 __label_2: # endif 3770 3771.end # viewable 3772 3773 3774.sub 'annotate' :method 3775 .param pmc __ARG_1 3776 getattribute $P1, self, 'start' 3777 __ARG_1.'annotate'($P1) 3778 3779.end # annotate 3780 3781 3782.sub 'getpath' :method 3783 getattribute $P1, self, 'owner' 3784 .tailcall $P1.'getpath'() 3785 3786.end # getpath 3787 3788 3789.sub 'use_builtin' :method 3790 .param string __ARG_1 3791 getattribute $P1, self, 'owner' 3792 $P1.'use_builtin'(__ARG_1) 3793 3794.end # use_builtin 3795 3796 3797.sub 'generatesubid' :method 3798 getattribute $P1, self, 'owner' 3799 .tailcall $P1.'generatesubid'() 3800 3801.end # generatesubid 3802 3803 3804.sub 'usesubid' :method 3805 .param string __ARG_1 3806 getattribute $P1, self, 'owner' 3807 $P1.'usesubid'(__ARG_1) 3808 3809.end # usesubid 3810 3811 3812.sub 'addlocalfunction' :method 3813 .param pmc __ARG_1 3814 getattribute $P1, self, 'owner' 3815 .tailcall $P1.'addlocalfunction'(__ARG_1) 3816 3817.end # addlocalfunction 3818 3819 3820.sub 'scopesearch' :method 3821 .param pmc __ARG_1 3822 .param int __ARG_2 3823 getattribute $P1, self, 'owner' 3824 .tailcall $P1.'scopesearch'(__ARG_1, __ARG_2) 3825 3826.end # scopesearch 3827 3828 3829.sub 'dowarnings' :method 3830 getattribute $P1, self, 'owner' 3831 .tailcall $P1.'dowarnings'() 3832 3833.end # dowarnings 3834 3835.sub Winxed_class_init :anon :load :init 3836 newclass $P0, [ 'Winxed'; 'Compiler'; 'CommonBase' ] 3837 addattribute $P0, 'start' 3838 addattribute $P0, 'owner' 3839.end 3840.namespace [ 'Winxed'; 'Compiler'; 'CollectValues' ] 3841 3842.sub 'CollectValues' :method 3843 .param pmc __ARG_1 3844 .param pmc __ARG_2 3845 setattribute self, 'owner', __ARG_1 3846 setattribute self, 'e', __ARG_2 3847 3848.end # CollectValues 3849 3850 3851.sub 'add' :method 3852 .param pmc __ARG_1 3853 getattribute $P1, self, 'e' 3854 null $S1 3855 $P3 = __ARG_1.'isnull'() 3856 if_null $P3, __label_1 3857 unless $P3 goto __label_1 3858 getattribute $P2, self, 'pnull' 3859 unless_null $P2, __label_3 3860 getattribute $P4, self, 'owner' 3861 $P3 = $P4.'tempreg'("P") 3862 null $S2 3863 if_null $P3, __label_4 3864 set $S2, $P3 3865 __label_4: 3866 $P1.'emitnull'($S2) 3867 box $P2, $S2 3868 setattribute self, 'pnull', $P2 3869 __label_3: # endif 3870 set $S1, $P2 3871 goto __label_2 3872 __label_1: # else 3873 $P3 = __ARG_1.'emit_get'($P1) 3874 set $S1, $P3 3875 __label_2: # endif 3876 .return($S1) 3877 3878.end # add 3879 3880.sub Winxed_class_init :anon :load :init 3881 newclass $P0, [ 'Winxed'; 'Compiler'; 'CollectValues' ] 3882 addattribute $P0, 'owner' 3883 addattribute $P0, 'e' 3884 addattribute $P0, 'pnull' 3885.end 3886.namespace [ 'Winxed'; 'Compiler'; 'SimpleArgList' ] 3887 3888.sub 'SimpleArgList' :method 3889 .param pmc __ARG_1 3890 .param pmc __ARG_2 3891 .param string __ARG_3 3892.const 'Sub' WSubId_74 = "WSubId_74" 3893.const 'Sub' WSubId_75 = "WSubId_75" 3894 $P2 = WSubId_74(__ARG_1, __ARG_2, WSubId_75, __ARG_3) 3895 setattribute self, 'args', $P2 3896 3897.end # SimpleArgList 3898 3899 3900.sub 'clone' :method 3901 .param pmc __ARG_1 3902 new $P1, [ 'Winxed'; 'Compiler'; 'SimpleArgList' ] 3903 getattribute $P2, self, 'args' 3904 set $P3, __ARG_1 3905.const 'Sub' bindlast = "bindlast" 3906.const 'Sub' bindmethod = "bindmethod" 3907 set $P4, $P2 3908 root_new $P5, ['parrot';'ResizablePMCArray'] 3909 $P10 = bindmethod("clone") 3910 $P6 = bindlast($P10, $P3) 3911 if_null $P4, __label_2 3912 iter $P11, $P4 3913 set $P11, 0 3914 __label_1: # for iteration 3915 unless $P11 goto __label_2 3916 shift $P7, $P11 3917 $P12 = $P6($P7) 3918 push $P5, $P12 3919 goto __label_1 3920 __label_2: # endfor 3921 set $P9, $P5 3922 set $P8, $P9 3923 setattribute $P1, 'args', $P8 3924 .return($P1) 3925 3926.end # clone 3927 3928 3929.sub 'numargs' :method 3930 getattribute $P1, self, 'args' 3931 elements $I1, $P1 3932 .return($I1) 3933 3934.end # numargs 3935 3936 3937.sub 'getarg' :method 3938 .param int __ARG_1 3939 getattribute $P1, self, 'args' 3940 $P2 = $P1[__ARG_1] 3941 .return($P2) 3942 3943.end # getarg 3944 3945 3946.sub 'optimizeargs' :method 3947 getattribute $P1, self, 'args' 3948 if_null $P1, __label_2 3949 elements $I1, $P1 3950 goto __label_1 3951 __label_2: 3952 null $I1 3953 __label_1: 3954 null $I2 3955 __label_5: # for condition 3956 ge $I2, $I1, __label_4 3957 $P3 = $P1[$I2] 3958 $P2 = $P3.'optimize'() 3959 $P1[$I2] = $P2 3960 __label_3: # for iteration 3961 inc $I2 3962 goto __label_5 3963 __label_4: # for end 3964 3965.end # optimizeargs 3966 3967 3968.sub 'getargvalues' :method 3969 .param pmc __ARG_1 3970.const 'Sub' bindlast = "bindlast" 3971.const 'Sub' bindmethod = "bindmethod" 3972 getattribute $P1, self, 'args' 3973 root_new $P2, ['parrot';'ResizablePMCArray'] 3974 $P6 = bindmethod("emit_get") 3975 $P3 = bindlast($P6, __ARG_1) 3976 if_null $P1, __label_2 3977 iter $P7, $P1 3978 set $P7, 0 3979 __label_1: # for iteration 3980 unless $P7 goto __label_2 3981 shift $P4, $P7 3982 $P8 = $P3($P4) 3983 push $P2, $P8 3984 goto __label_1 3985 __label_2: # endfor 3986 set $P5, $P2 3987 set $P6, $P5 3988 .return($P6) 3989 3990.end # getargvalues 3991 3992 3993.sub 'emitargs' :method 3994 .param pmc __ARG_1 3995 $P1 = self.'getargvalues'(__ARG_1) 3996 join $S1, ", ", $P1 3997 __ARG_1.'print'($S1) 3998 3999.end # emitargs 4000 4001.sub Winxed_class_init :anon :load :init 4002 newclass $P0, [ 'Winxed'; 'Compiler'; 'SimpleArgList' ] 4003 addattribute $P0, 'args' 4004.end 4005.namespace [ 'Winxed'; 'Compiler'; 'Modifier' ] 4006 4007.sub 'clone' :method 4008 .param pmc __ARG_1 4009 getattribute $P1, self, 'args' 4010 new $P3, [ 'Winxed'; 'Compiler'; 'Modifier' ] 4011 getattribute $P4, self, 'name' 4012 if_null $P1, __label_2 4013 $P5 = $P1.'clone'(__ARG_1) 4014 goto __label_1 4015 __label_2: 4016 null $P5 4017 __label_1: 4018 $P3.'Modifier'($P4, $P5) 4019 set $P2, $P3 4020 .return($P2) 4021 4022.end # clone 4023 4024 4025.sub 'getname' :method 4026 getattribute $P1, self, 'name' 4027 .return($P1) 4028 4029.end # getname 4030 4031 4032.sub 'numargs' :method 4033 getattribute $P1, self, 'args' 4034 unless_null $P1, __label_2 4035 null $I1 4036 goto __label_1 4037 __label_2: 4038 $P2 = $P1.'numargs'() 4039 set $I1, $P2 4040 __label_1: 4041 .return($I1) 4042 4043.end # numargs 4044 4045 4046.sub 'getarg' :method 4047 .param int __ARG_1 4048.const 'Sub' InternalError = "InternalError" 4049 getattribute $P1, self, 'args' 4050 $P2 = $P1.'numargs'() 4051 set $I1, $P2 4052 lt __ARG_1, $I1, __label_1 4053 InternalError("Wrong modifier arg number") 4054 __label_1: # endif 4055 .tailcall $P1.'getarg'(__ARG_1) 4056 4057.end # getarg 4058 4059 4060.sub 'Modifier' :method 4061 .param string __ARG_1 4062 .param pmc __ARG_2 4063 box $P1, __ARG_1 4064 setattribute self, 'name', $P1 4065 if_null __ARG_2, __label_1 4066 setattribute self, 'args', __ARG_2 4067 __label_1: # endif 4068 4069.end # Modifier 4070 4071 4072.sub 'optimize' :method 4073 getattribute $P1, self, 'args' 4074 if_null $P1, __label_1 4075 getattribute $P2, self, 'args' 4076 $P2.'optimizeargs'() 4077 __label_1: # endif 4078 .return(self) 4079 4080.end # optimize 4081 4082.sub Winxed_class_init :anon :load :init 4083 newclass $P0, [ 'Winxed'; 'Compiler'; 'Modifier' ] 4084 addattribute $P0, 'name' 4085 addattribute $P0, 'args' 4086.end 4087.namespace [ 'Winxed'; 'Compiler' ] 4088 4089.sub 'parseModifier' :subid('WSubId_76') 4090 .param pmc __ARG_1 4091 .param pmc __ARG_2 4092 $P1 = __ARG_1.'get'() 4093 $P3 = $P1.'getidentifier'() 4094 null $S1 4095 if_null $P3, __label_1 4096 set $S1, $P3 4097 __label_1: 4098 $P1 = __ARG_1.'get'() 4099 null $P2 4100 $P3 = $P1.'isop'("(") 4101 if_null $P3, __label_2 4102 unless $P3 goto __label_2 4103 new $P4, [ 'Winxed'; 'Compiler'; 'SimpleArgList' ] 4104 $P4.'SimpleArgList'(__ARG_1, __ARG_2, ")") 4105 set $P2, $P4 4106 goto __label_3 4107 __label_2: # else 4108 __ARG_1.'unget'($P1) 4109 __label_3: # endif 4110 new $P4, [ 'Winxed'; 'Compiler'; 'Modifier' ] 4111 $P4.'Modifier'($S1, $P2) 4112 set $P3, $P4 4113 .return($P3) 4114 4115.end # parseModifier 4116 4117.namespace [ 'Winxed'; 'Compiler'; 'ModifierList' ] 4118 4119.sub 'ModifierList' :method 4120 .param pmc __ARG_1 4121 .param pmc __ARG_2 4122.const 'Sub' WSubId_74 = "WSubId_74" 4123.const 'Sub' WSubId_76 = "WSubId_76" 4124 $P2 = WSubId_74(__ARG_1, __ARG_2, WSubId_76, "]") 4125 setattribute self, 'list', $P2 4126 4127.end # ModifierList 4128 4129 4130.sub 'clonemodifiers' :method 4131 .param pmc __ARG_1 4132 getattribute $P1, self, 'list' 4133 set $P2, __ARG_1 4134.const 'Sub' bindlast = "bindlast" 4135.const 'Sub' bindmethod = "bindmethod" 4136 set $P3, $P1 4137 root_new $P4, ['parrot';'ResizablePMCArray'] 4138 $P8 = bindmethod("clone") 4139 $P5 = bindlast($P8, $P2) 4140 if_null $P3, __label_2 4141 iter $P9, $P3 4142 set $P9, 0 4143 __label_1: # for iteration 4144 unless $P9 goto __label_2 4145 shift $P6, $P9 4146 $P10 = $P5($P6) 4147 push $P4, $P10 4148 goto __label_1 4149 __label_2: # endfor 4150 set $P7, $P4 4151 set $P8, $P7 4152 .return($P8) 4153 4154.end # clonemodifiers 4155 4156 4157.sub 'optimize' :method 4158 getattribute $P1, self, 'list' 4159 if_null $P1, __label_2 4160 elements $I1, $P1 4161 goto __label_1 4162 __label_2: 4163 null $I1 4164 __label_1: 4165 null $I2 4166 __label_5: # for condition 4167 ge $I2, $I1, __label_4 4168 $P3 = $P1[$I2] 4169 $P2 = $P3.'optimize'() 4170 $P1[$I2] = $P2 4171 __label_3: # for iteration 4172 inc $I2 4173 goto __label_5 4174 __label_4: # for end 4175 4176.end # optimize 4177 4178 4179.sub 'getlist' :method 4180 getattribute $P1, self, 'list' 4181 .return($P1) 4182 4183.end # getlist 4184 4185 4186.sub 'pick' :subid('WSubId_11') :method 4187 .param string __ARG_1 4188.const 'Sub' WSubId_12 = "WSubId_12" 4189.lex '__WLEX_1', __ARG_1 4190 getattribute $P1, self, 'list' 4191 newclosure $P2, WSubId_12 4192 if_null $P1, __label_2 4193 iter $P5, $P1 4194 set $P5, 0 4195 __label_1: # for iteration 4196 unless $P5 goto __label_2 4197 shift $P3, $P5 4198 $P6 = $P2($P3) 4199 if_null $P6, __label_3 4200 unless $P6 goto __label_3 4201 set $P4, $P3 4202 goto __label_4 4203 __label_3: # endif 4204 goto __label_1 4205 __label_2: # endfor 4206 null $P4 4207 __label_4: 4208 set $P6, $P4 4209 .return($P6) 4210 4211.end # pick 4212 4213 4214.sub '' :anon :subid('WSubId_12') :outer('WSubId_11') 4215 .param pmc __ARG_2 4216 find_lex $S1, '__WLEX_1' 4217 $P1 = __ARG_2.'getname'() 4218 find_lex $S2, '__WLEX_1' 4219 set $S3, $P1 4220 iseq $I1, $S3, $S2 4221 .return($I1) 4222 4223.end # WSubId_12 4224 4225.sub Winxed_class_init :anon :load :init 4226 newclass $P0, [ 'Winxed'; 'Compiler'; 'ModifierList' ] 4227 addattribute $P0, 'list' 4228.end 4229.namespace [ 'Winxed'; 'Compiler' ] 4230 4231.sub 'parseUsing' :subid('WSubId_81') 4232 .param pmc __ARG_1 4233 .param pmc __ARG_2 4234 .param pmc __ARG_3 4235 $P1 = __ARG_2.'get'() 4236 $P2 = $P1.'iskeyword'("extern") 4237 set $I1, $P2 4238 if $I1 goto __label_3 4239 $P3 = $P1.'iskeyword'("static") 4240 set $I1, $P3 4241 if $I1 goto __label_4 4242 $P4 = $P1.'iskeyword'("namespace") 4243 set $I1, $P4 4244 if $I1 goto __label_5 4245 goto __label_2 4246 __label_3: # case 4247 new $P6, [ 'Winxed'; 'Compiler'; 'ExternStatement' ] 4248 $P6.'ExternStatement'(__ARG_1, __ARG_2, __ARG_3) 4249 set $P5, $P6 4250 .return($P5) 4251 __label_4: # case 4252 new $P8, [ 'Winxed'; 'Compiler'; 'StaticStatement' ] 4253 $P8.'StaticStatement'(__ARG_1, __ARG_2, __ARG_3) 4254 set $P7, $P8 4255 .return($P7) 4256 __label_5: # case 4257 new $P10, [ 'Winxed'; 'Compiler'; 'UsingNamespaceStatement' ] 4258 $P10.'UsingNamespaceStatement'($P1, __ARG_2, __ARG_3) 4259 set $P9, $P10 4260 .return($P9) 4261 __label_2: # default 4262 __ARG_2.'unget'($P1) 4263 new $P12, [ 'Winxed'; 'Compiler'; 'UsingStatement' ] 4264 $P12.'UsingStatement'(__ARG_1, __ARG_2, __ARG_3) 4265 set $P11, $P12 4266 .return($P11) 4267 __label_1: # switch end 4268 4269.end # parseUsing 4270 4271 4272.sub 'parseSig' :subid('WSubId_78') 4273 .param pmc __ARG_1 4274 .param pmc __ARG_2 4275 .param pmc __ARG_3 4276.const 'Sub' Expected = "Expected" 4277.const 'Sub' WSubId_75 = "WSubId_75" 4278 new $P4, [ 'Winxed'; 'Compiler'; 'SigParameterList' ] 4279 $P4.'SigParameterList'(__ARG_2, __ARG_3) 4280 set $P1, $P4 4281 $P2 = __ARG_2.'get'() 4282 $P4 = $P2.'isop'("=") 4283 if $P4 goto __label_1 4284 Expected("'='", $P2) 4285 __label_1: # endif 4286 $P3 = WSubId_75(__ARG_2, __ARG_3) 4287 new $P5, [ 'Winxed'; 'Compiler'; 'MultiAssignStatement' ] 4288 $P5.'MultiAssignStatement'(__ARG_1, __ARG_3, $P1, $P3) 4289 set $P4, $P5 4290 .return($P4) 4291 4292.end # parseSig 4293 4294 4295.sub 'parseClassSpecifier' :subid('WSubId_103') 4296 .param pmc __ARG_1 4297 .param pmc __ARG_2 4298.const 'Sub' SyntaxError = "SyntaxError" 4299 $P1 = __ARG_1.'get'() 4300 $P2 = $P1.'isstring'() 4301 if_null $P2, __label_1 4302 unless $P2 goto __label_1 4303 new $P4, [ 'Winxed'; 'Compiler'; 'ClassSpecifierStr' ] 4304 $P4.'ClassSpecifierStr'(__ARG_2, $P1) 4305 set $P3, $P4 4306 .return($P3) 4307 __label_1: # endif 4308 $P2 = $P1.'isop'("[") 4309 if_null $P2, __label_2 4310 unless $P2 goto __label_2 4311 new $P4, [ 'Winxed'; 'Compiler'; 'ClassSpecifierParrotKey' ] 4312 $P4.'ClassSpecifierParrotKey'(__ARG_1, __ARG_2, $P1) 4313 set $P3, $P4 4314 .return($P3) 4315 __label_2: # endif 4316 $P2 = $P1.'isidentifier'() 4317 if_null $P2, __label_3 4318 unless $P2 goto __label_3 4319 new $P4, [ 'Winxed'; 'Compiler'; 'ClassSpecifierId' ] 4320 $P4.'ClassSpecifierId'(__ARG_1, __ARG_2, $P1) 4321 set $P3, $P4 4322 .return($P3) 4323 __label_3: # endif 4324 SyntaxError("Invalid class", $P1) 4325 4326.end # parseClassSpecifier 4327 4328 4329.sub 'parseStatement' :subid('WSubId_134') 4330 .param pmc __ARG_1 4331 .param pmc __ARG_2 4332.const 'Sub' WSubId_78 = "WSubId_78" 4333.const 'Sub' RequireIdentifier = "RequireIdentifier" 4334.const 'Sub' bindlast1 = "bindlast1" 4335.const 'Sub' WSubId_80 = "WSubId_80" 4336.const 'Sub' WSubId_81 = "WSubId_81" 4337.const 'Sub' WSubId_82 = "WSubId_82" 4338.const 'Sub' WSubId_83 = "WSubId_83" 4339.const 'Sub' WSubId_84 = "WSubId_84" 4340.const 'Sub' WSubId_85 = "WSubId_85" 4341.const 'Sub' WSubId_86 = "WSubId_86" 4342.const 'Sub' WSubId_87 = "WSubId_87" 4343.const 'Sub' WSubId_88 = "WSubId_88" 4344.const 'Sub' WSubId_89 = "WSubId_89" 4345.const 'Sub' WSubId_90 = "WSubId_90" 4346.const 'Sub' WSubId_91 = "WSubId_91" 4347 $P1 = __ARG_1.'get'() 4348 null $P2 4349 $P10 = $P1.'isop'(";") 4350 if_null $P10, __label_1 4351 unless $P10 goto __label_1 4352 new $P11, [ 'Winxed'; 'Compiler'; 'EmptyStatement' ] 4353 .return($P11) 4354 __label_1: # endif 4355 $P10 = $P1.'isop'("{") 4356 if_null $P10, __label_2 4357 unless $P10 goto __label_2 4358 new $P12, [ 'Winxed'; 'Compiler'; 'CompoundStatement' ] 4359 $P12.'CompoundStatement'($P1, __ARG_1, __ARG_2) 4360 set $P11, $P12 4361 .return($P11) 4362 __label_2: # endif 4363 $P10 = $P1.'isop'("${") 4364 if_null $P10, __label_3 4365 unless $P10 goto __label_3 4366 new $P12, [ 'Winxed'; 'Compiler'; 'PiropStatement' ] 4367 $P12.'PiropStatement'($P1, __ARG_1, __ARG_2) 4368 set $P11, $P12 4369 .return($P11) 4370 __label_3: # endif 4371 $P10 = $P1.'isop'(":") 4372 if_null $P10, __label_4 4373 unless $P10 goto __label_4 4374 $P3 = __ARG_1.'get'() 4375 $P10 = $P3.'isop'("(") 4376 set $I1, $P10 4377 if $I1 goto __label_7 4378 $P11 = $P3.'isidentifier'() 4379 set $I1, $P11 4380 if $I1 goto __label_8 4381 goto __label_6 4382 __label_7: # case 4383 .tailcall WSubId_78($P1, __ARG_1, __ARG_2) 4384 __label_8: # case 4385 new $P12, [ 'Winxed'; 'Compiler'; 'ClassSpecifierId' ] 4386 $P12.'ClassSpecifierId'(__ARG_1, __ARG_2, $P3) 4387 set $P4, $P12 4388 $P5 = __ARG_1.'get'() 4389 RequireIdentifier($P5) 4390 new $P6, [ 'Winxed'; 'Compiler'; 'VarStatement' ] 4391 $P6.'initvarbase'($P5, __ARG_2, $P5, 0) 4392 new $P7, [ 'Winxed'; 'Compiler'; 'NewQualifiedExpr' ] 4393 $P7.'Expr'($P6, $P5) 4394 setattribute $P7, 'nskey', $P4 4395 $P1 = __ARG_1.'get'() 4396 $P14 = $P1.'isop'("(") 4397 if_null $P14, __label_9 4398 unless $P14 goto __label_9 4399 $P7.'parseinitializer'(__ARG_1) 4400 $P1 = __ARG_1.'get'() 4401 __label_9: # endif 4402 bindlast1(";", $P1) 4403 setattribute $P6, 'init', $P7 4404 .return($P6) 4405 __label_6: # default 4406 WSubId_80("':'", $P1) 4407 __label_5: # switch end 4408 __label_4: # endif 4409 $P10 = $P1.'checkkeyword'() 4410 set $S1, $P10 4411 if $S1 == "using" goto __label_12 4412 if $S1 == "const" goto __label_13 4413 if $S1 == "volatile" goto __label_14 4414 if $S1 == "var" goto __label_15 4415 if $S1 == "string" goto __label_16 4416 if $S1 == "int" goto __label_17 4417 if $S1 == "float" goto __label_18 4418 if $S1 == "return" goto __label_19 4419 if $S1 == "yield" goto __label_20 4420 if $S1 == "goto" goto __label_21 4421 if $S1 == "if" goto __label_22 4422 if $S1 == "while" goto __label_23 4423 if $S1 == "do" goto __label_24 4424 if $S1 == "continue" goto __label_25 4425 if $S1 == "break" goto __label_26 4426 if $S1 == "switch" goto __label_27 4427 if $S1 == "for" goto __label_28 4428 if $S1 == "throw" goto __label_29 4429 if $S1 == "try" goto __label_30 4430 if $S1 == "inline" goto __label_31 4431 goto __label_10 4432 __label_12: # case 4433 .tailcall WSubId_81($P1, __ARG_1, __ARG_2) 4434 __label_13: # case 4435 .tailcall WSubId_82($P1, __ARG_1, __ARG_2) 4436 goto __label_11 # break 4437 __label_14: # case 4438 .tailcall WSubId_83($P1, __ARG_1, __ARG_2) 4439 goto __label_11 # break 4440 __label_15: # case 4441 $P2 = __ARG_1.'get'() 4442 __ARG_1.'unget'($P2) 4443 $P11 = $P2.'isop'("(") 4444 if $P11 goto __label_32 4445 .tailcall WSubId_84($P1, __ARG_1, __ARG_2) 4446 __label_32: # endif 4447 goto __label_11 # break 4448 __label_16: # case 4449 $P2 = __ARG_1.'get'() 4450 __ARG_1.'unget'($P2) 4451 $P12 = $P2.'isop'("(") 4452 if $P12 goto __label_33 4453 .tailcall WSubId_85($P1, __ARG_1, __ARG_2) 4454 __label_33: # endif 4455 goto __label_11 # break 4456 __label_17: # case 4457 $P2 = __ARG_1.'get'() 4458 __ARG_1.'unget'($P2) 4459 $P13 = $P2.'isop'("(") 4460 if $P13 goto __label_34 4461 .tailcall WSubId_86($P1, __ARG_1, __ARG_2) 4462 __label_34: # endif 4463 goto __label_11 # break 4464 __label_18: # case 4465 $P2 = __ARG_1.'get'() 4466 __ARG_1.'unget'($P2) 4467 $P14 = $P2.'isop'("(") 4468 if $P14 goto __label_35 4469 .tailcall WSubId_87($P1, __ARG_1, __ARG_2) 4470 __label_35: # endif 4471 goto __label_11 # break 4472 __label_19: # case 4473 .tailcall WSubId_88($P1, __ARG_1, __ARG_2) 4474 __label_20: # case 4475 new $P16, [ 'Winxed'; 'Compiler'; 'YieldStatement' ] 4476 $P16.'YieldStatement'($P1, __ARG_1, __ARG_2) 4477 set $P15, $P16 4478 .return($P15) 4479 __label_21: # case 4480 .tailcall WSubId_89($P1, __ARG_1, __ARG_2) 4481 __label_22: # case 4482 new $P18, [ 'Winxed'; 'Compiler'; 'IfStatement' ] 4483 $P18.'IfStatement'($P1, __ARG_1, __ARG_2) 4484 set $P17, $P18 4485 .return($P17) 4486 __label_23: # case 4487 new $P20, [ 'Winxed'; 'Compiler'; 'WhileStatement' ] 4488 $P20.'WhileStatement'($P1, __ARG_1, __ARG_2) 4489 set $P19, $P20 4490 .return($P19) 4491 __label_24: # case 4492 new $P22, [ 'Winxed'; 'Compiler'; 'DoStatement' ] 4493 $P22.'DoStatement'($P1, __ARG_1, __ARG_2) 4494 set $P21, $P22 4495 .return($P21) 4496 __label_25: # case 4497 new $P24, [ 'Winxed'; 'Compiler'; 'ContinueStatement' ] 4498 $P24.'ContinueStatement'($P1, __ARG_1, __ARG_2) 4499 set $P23, $P24 4500 .return($P23) 4501 __label_26: # case 4502 new $P26, [ 'Winxed'; 'Compiler'; 'BreakStatement' ] 4503 $P26.'BreakStatement'($P1, __ARG_1, __ARG_2) 4504 set $P25, $P26 4505 .return($P25) 4506 __label_27: # case 4507 .tailcall WSubId_90($P1, __ARG_1, __ARG_2) 4508 __label_28: # case 4509 .tailcall WSubId_91($P1, __ARG_1, __ARG_2) 4510 __label_29: # case 4511 new $P28, [ 'Winxed'; 'Compiler'; 'ThrowStatement' ] 4512 $P28.'ThrowStatement'($P1, __ARG_1, __ARG_2) 4513 set $P27, $P28 4514 .return($P27) 4515 __label_30: # case 4516 new $P30, [ 'Winxed'; 'Compiler'; 'TryStatement' ] 4517 $P30.'TryStatement'($P1, __ARG_1, __ARG_2) 4518 set $P29, $P30 4519 .return($P29) 4520 __label_31: # case 4521 new $P31, [ 'Winxed'; 'Compiler'; 'InlineStatement' ] 4522 $P31.'InlineStatement'($P1, __ARG_1, __ARG_2) 4523 set $P8, $P31 4524 __ARG_2.'addinline'($P8) 4525 new $P32, [ 'Winxed'; 'Compiler'; 'EmptyStatement' ] 4526 .return($P32) 4527 __label_10: # default 4528 __label_11: # switch end 4529 $P10 = $P1.'isidentifier'() 4530 if_null $P10, __label_36 4531 unless $P10 goto __label_36 4532 $P9 = __ARG_1.'get'() 4533 $P10 = $P9.'isop'(":") 4534 if_null $P10, __label_37 4535 unless $P10 goto __label_37 4536 new $P12, [ 'Winxed'; 'Compiler'; 'LabelStatement' ] 4537 $P12.'LabelStatement'($P1, __ARG_2) 4538 set $P11, $P12 4539 .return($P11) 4540 __label_37: # endif 4541 __ARG_1.'unget'($P9) 4542 __label_36: # endif 4543 __ARG_1.'unget'($P1) 4544 new $P11, [ 'Winxed'; 'Compiler'; 'ExprStatement' ] 4545 $P11.'ExprStatement'($P1, __ARG_1, __ARG_2) 4546 set $P10, $P11 4547 .return($P10) 4548 4549.end # parseStatement 4550 4551.namespace [ 'Winxed'; 'Compiler'; 'Statement' ] 4552 4553.sub 'Statement' :method 4554 .param pmc __ARG_1 4555 .param pmc __ARG_2 4556 self.'initbase'(__ARG_1, __ARG_2) 4557 4558.end # Statement 4559 4560 4561.sub 'isempty' :method 4562 .return(0) 4563 4564.end # isempty 4565 4566 4567.sub 'allowtailcall' :method 4568 getattribute $P1, self, 'owner' 4569 .tailcall $P1.'allowtailcall'() 4570 4571.end # allowtailcall 4572 4573 4574.sub 'createreg' :method 4575 .param string __ARG_1 4576 getattribute $P1, self, 'owner' 4577 .tailcall $P1.'createreg'(__ARG_1) 4578 4579.end # createreg 4580 4581 4582.sub 'tempreg' :method 4583 .param string __ARG_1 4584 getattribute $P1, self, 'owner' 4585 .tailcall $P1.'tempreg'(__ARG_1) 4586 4587.end # tempreg 4588 4589 4590.sub 'freetemps' :method 4591 getattribute $P1, self, 'owner' 4592 $P1.'freetemps'() 4593 4594.end # freetemps 4595 4596 4597.sub 'genlabel' :method 4598 getattribute $P1, self, 'owner' 4599 .tailcall $P1.'genlabel'() 4600 4601.end # genlabel 4602 4603 4604.sub 'getlabel' :method 4605 .param string __ARG_1 4606 getattribute $P1, self, 'owner' 4607 .tailcall $P1.'getlabel'(__ARG_1) 4608 4609.end # getlabel 4610 4611 4612.sub 'createlabel' :method 4613 .param pmc __ARG_1 4614 getattribute $P1, self, 'owner' 4615 .tailcall $P1.'createlabel'(__ARG_1) 4616 4617.end # createlabel 4618 4619 4620.sub 'createconst' :method 4621 .param pmc __ARG_1 4622 .param string __ARG_2 4623 .param int __ARG_3 :optional 4624 getattribute $P1, self, 'owner' 4625 .tailcall $P1.'createconst'(__ARG_1, __ARG_2, __ARG_3) 4626 4627.end # createconst 4628 4629 4630.sub 'createvar' :method 4631 .param pmc __ARG_1 4632 .param string __ARG_2 4633 .param int __ARG_3 :optional 4634 getattribute $P1, self, 'owner' 4635 .tailcall $P1.'createvar'(__ARG_1, __ARG_2, __ARG_3) 4636 4637.end # createvar 4638 4639 4640.sub 'createvarused' :method 4641 .param pmc __ARG_1 4642 .param pmc __ARG_2 4643 getattribute $P1, self, 'owner' 4644 .tailcall $P1.'createvarused'(__ARG_1, __ARG_2) 4645 4646.end # createvarused 4647 4648 4649.sub 'createvarnamed' :method 4650 .param pmc __ARG_1 4651 .param string __ARG_2 4652 .param string __ARG_3 4653 getattribute $P1, self, 'owner' 4654 .tailcall $P1.'createvarnamed'(__ARG_1, __ARG_2, __ARG_3) 4655 4656.end # createvarnamed 4657 4658 4659.sub 'getvar' :method 4660 .param pmc __ARG_1 4661 getattribute $P1, self, 'owner' 4662 .tailcall $P1.'getvar'(__ARG_1) 4663 4664.end # getvar 4665 4666 4667.sub 'checkclass' :method 4668 .param string __ARG_1 4669 getattribute $P1, self, 'owner' 4670 .tailcall $P1.'checkclass'(__ARG_1) 4671 4672.end # checkclass 4673 4674 4675.sub 'usenamespace' :method 4676 .param pmc __ARG_1 4677 getattribute $P1, self, 'owner' 4678 $P1.'usenamespace'(__ARG_1) 4679 4680.end # usenamespace 4681 4682 4683.sub 'getouter' :method 4684 getattribute $P1, self, 'owner' 4685 .tailcall $P1.'getouter'() 4686 4687.end # getouter 4688 4689 4690.sub 'getlexicalouter' :method 4691 getattribute $P1, self, 'owner' 4692 .tailcall $P1.'getlexicalouter'() 4693 4694.end # getlexicalouter 4695 4696 4697.sub 'getcontinuelabel' :method 4698 .param pmc __ARG_1 4699 getattribute $P1, self, 'owner' 4700 .tailcall $P1.'getcontinuelabel'(__ARG_1) 4701 4702.end # getcontinuelabel 4703 4704 4705.sub 'getbreaklabel' :method 4706 .param pmc __ARG_1 4707 getattribute $P1, self, 'owner' 4708 .tailcall $P1.'getbreaklabel'(__ARG_1) 4709 4710.end # getbreaklabel 4711 4712 4713.sub 'optimize' :method 4714.const 'Sub' InternalError = "InternalError" 4715 getattribute $P1, self, 'start' 4716 InternalError("**checking**", $P1) 4717 .return(self) 4718 4719.end # optimize 4720 4721.sub Winxed_class_init :anon :load :init 4722 newclass $P0, [ 'Winxed'; 'Compiler'; 'Statement' ] 4723 get_class $P1, [ 'Winxed'; 'Compiler'; 'CommonBase' ] 4724 addparent $P0, $P1 4725.end 4726.namespace [ 'Winxed'; 'Compiler'; 'EmptyStatement' ] 4727 4728.sub 'isempty' :method 4729 .return(1) 4730 4731.end # isempty 4732 4733 4734.sub 'clone' :method 4735 .param pmc __ARG_1 4736 .return(self) 4737 4738.end # clone 4739 4740 4741.sub 'annotate' :method 4742 .param pmc __ARG_1 4743.const 'Sub' InternalError = "InternalError" 4744 InternalError("Attempt to annotate empty statement") 4745 4746.end # annotate 4747 4748 4749.sub 'optimize' :method 4750 .return(self) 4751 4752.end # optimize 4753 4754 4755.sub 'emit' :method 4756 .param pmc __ARG_1 4757 4758.end # emit 4759 4760.sub Winxed_class_init :anon :load :init 4761 newclass $P0, [ 'Winxed'; 'Compiler'; 'EmptyStatement' ] 4762 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 4763 addparent $P0, $P1 4764.end 4765.namespace [ 'Winxed'; 'Compiler'; 'MultiStatementBase' ] 4766 4767.sub 'optimize' :method 4768 getattribute $P1, self, 'statements' 4769 elements $I1, $P1 4770 set $I2, 1 4771 null $I3 4772 __label_3: # for condition 4773 ge $I3, $I1, __label_2 4774 $P3 = $P1[$I3] 4775 $P2 = $P3.'optimize'() 4776 unless $I2 goto __label_4 4777 $P3 = $P2.'isempty'() 4778 if $P3 goto __label_4 4779 null $I2 4780 __label_4: # endif 4781 $P1[$I3] = $P2 4782 __label_1: # for iteration 4783 inc $I3 4784 goto __label_3 4785 __label_2: # for end 4786 unless $I2 goto __label_6 4787 new $P3, [ 'Winxed'; 'Compiler'; 'EmptyStatement' ] 4788 goto __label_5 4789 __label_6: 4790 set $P3, self 4791 __label_5: 4792 .return($P3) 4793 4794.end # optimize 4795 4796.sub Winxed_class_init :anon :load :init 4797 newclass $P0, [ 'Winxed'; 'Compiler'; 'MultiStatementBase' ] 4798 addattribute $P0, 'statements' 4799.end 4800.namespace [ 'Winxed'; 'Compiler'; 'MultiStatement' ] 4801 4802.sub 'MultiStatement' :method 4803 .param pmc __ARG_1 4804 .param pmc __ARG_2 4805 root_new $P2, ['parrot';'ResizablePMCArray'] 4806 assign $P2, 2 4807 $P2[0] = __ARG_1 4808 $P2[1] = __ARG_2 4809 setattribute self, 'statements', $P2 4810 4811.end # MultiStatement 4812 4813 4814.sub 'clone' :method 4815 .param pmc __ARG_1 4816 new $P1, [ 'Winxed'; 'Compiler'; 'MultiStatement' ] 4817 getattribute $P2, self, 'statements' 4818 set $P3, __ARG_1 4819.const 'Sub' bindlast = "bindlast" 4820.const 'Sub' bindmethod = "bindmethod" 4821 set $P4, $P2 4822 root_new $P5, ['parrot';'ResizablePMCArray'] 4823 $P10 = bindmethod("clone") 4824 $P6 = bindlast($P10, $P3) 4825 if_null $P4, __label_2 4826 iter $P11, $P4 4827 set $P11, 0 4828 __label_1: # for iteration 4829 unless $P11 goto __label_2 4830 shift $P7, $P11 4831 $P12 = $P6($P7) 4832 push $P5, $P12 4833 goto __label_1 4834 __label_2: # endfor 4835 set $P9, $P5 4836 set $P8, $P9 4837 setattribute $P1, 'statements', $P8 4838 .return($P1) 4839 4840.end # clone 4841 4842 4843.sub 'isempty' :method 4844 .return(0) 4845 4846.end # isempty 4847 4848 4849.sub 'push' :method 4850 .param pmc __ARG_1 4851 getattribute $P1, self, 'statements' 4852 push $P1, __ARG_1 4853 .return(self) 4854 4855.end # push 4856 4857 4858.sub 'emit' :method 4859 .param pmc __ARG_1 4860 set $P1, __ARG_1 4861 getattribute $P2, self, 'statements' 4862.const 'Sub' bindlast = "bindlast" 4863.const 'Sub' bindmethod = "bindmethod" 4864 set $P3, $P2 4865 $P6 = bindmethod("emit") 4866 $P4 = bindlast($P6, $P1) 4867 if_null $P3, __label_2 4868 iter $P7, $P3 4869 set $P7, 0 4870 __label_1: # for iteration 4871 unless $P7 goto __label_2 4872 shift $P5, $P7 4873 $P4($P5) 4874 goto __label_1 4875 __label_2: # endfor 4876 4877.end # emit 4878 4879.sub Winxed_class_init :anon :load :init 4880 newclass $P0, [ 'Winxed'; 'Compiler'; 'MultiStatement' ] 4881 get_class $P1, [ 'Winxed'; 'Compiler'; 'MultiStatementBase' ] 4882 addparent $P0, $P1 4883.end 4884.namespace [ 'Winxed'; 'Compiler' ] 4885 4886.sub 'parsePiropArg' :subid('WSubId_93') 4887 .param pmc __ARG_1 4888 .param pmc __ARG_2 4889.const 'Sub' SyntaxError = "SyntaxError" 4890.const 'Sub' WSubId_75 = "WSubId_75" 4891 null $P1 4892 $P2 = __ARG_1.'get'() 4893 $P3 = $P2.'isop'(":") 4894 if_null $P3, __label_1 4895 unless $P3 goto __label_1 4896 $P2 = __ARG_1.'get'() 4897 $P3 = $P2.'isidentifier'() 4898 if $P3 goto __label_3 4899 SyntaxError("Label expected", $P2) 4900 __label_3: # endif 4901 new $P3, [ 'Winxed'; 'Compiler'; 'Reflabel' ] 4902 $P3.'Reflabel'(__ARG_2, $P2) 4903 set $P1, $P3 4904 goto __label_2 4905 __label_1: # else 4906 __ARG_1.'unget'($P2) 4907 $P1 = WSubId_75(__ARG_1, __ARG_2) 4908 __label_2: # endif 4909 .return($P1) 4910 4911.end # parsePiropArg 4912 4913.namespace [ 'Winxed'; 'Compiler'; 'PiropStatement' ] 4914 4915.sub 'PiropStatement' :method 4916 .param pmc __ARG_1 4917 .param pmc __ARG_2 4918 .param pmc __ARG_3 4919.const 'Sub' parseListOrEmpty = "parseListOrEmpty" 4920.const 'Sub' WSubId_93 = "WSubId_93" 4921.const 'Sub' ExpectOp = "ExpectOp" 4922 self.'Statement'(__ARG_1, __ARG_3) 4923 $P1 = __ARG_2.'get'() 4924 $P2 = $P1.'isop'(".") 4925 set $I1, $P2 4926 unless $I1 goto __label_1 4927 $P1 = __ARG_2.'get'() 4928 __label_1: # endif 4929 $P2 = $P1.'getidentifier'() 4930 null $S1 4931 if_null $P2, __label_2 4932 set $S1, $P2 4933 __label_2: 4934 unless $I1 goto __label_4 4935 set $S2, "." 4936 goto __label_3 4937 __label_4: 4938 set $S2, "" 4939 __label_3: 4940 concat $S3, $S2, $S1 4941 box $P2, $S3 4942 setattribute self, 'opname', $P2 4943 $P3 = parseListOrEmpty(__ARG_2, __ARG_3, WSubId_93, "}") 4944 setattribute self, 'args', $P3 4945 ExpectOp(";", __ARG_2) 4946 4947.end # PiropStatement 4948 4949 4950.sub 'clone' :method 4951 .param pmc __ARG_1 4952 new $P1, [ 'Winxed'; 'Compiler'; 'PiropStatement' ] 4953 getattribute $P8, self, 'start' 4954 $P1.'Statement'($P8, __ARG_1) 4955 getattribute $P9, self, 'opname' 4956 setattribute $P1, 'opname', $P9 4957 getattribute $P2, self, 'args' 4958 set $P3, __ARG_1 4959.const 'Sub' bindlast = "bindlast" 4960.const 'Sub' bindmethod = "bindmethod" 4961 set $P4, $P2 4962 root_new $P5, ['parrot';'ResizablePMCArray'] 4963 $P9 = bindmethod("clone") 4964 $P6 = bindlast($P9, $P3) 4965 if_null $P4, __label_2 4966 iter $P11, $P4 4967 set $P11, 0 4968 __label_1: # for iteration 4969 unless $P11 goto __label_2 4970 shift $P7, $P11 4971 $P12 = $P6($P7) 4972 push $P5, $P12 4973 goto __label_1 4974 __label_2: # endfor 4975 set $P10, $P5 4976 set $P8, $P10 4977 setattribute $P1, 'args', $P8 4978 .return($P1) 4979 4980.end # clone 4981 4982 4983.sub 'optimize' :method 4984 getattribute $P1, self, 'args' 4985 if_null $P1, __label_2 4986 elements $I1, $P1 4987 goto __label_1 4988 __label_2: 4989 null $I1 4990 __label_1: 4991 null $I2 4992 __label_5: # for condition 4993 ge $I2, $I1, __label_4 4994 $P3 = $P1[$I2] 4995 $P2 = $P3.'optimize'() 4996 $P1[$I2] = $P2 4997 __label_3: # for iteration 4998 inc $I2 4999 goto __label_5 5000 __label_4: # for end 5001 .return(self) 5002 5003.end # optimize 5004 5005 5006.sub 'emit' :method 5007 .param pmc __ARG_1 5008.const 'Sub' bindlast = "bindlast" 5009.const 'Sub' bindmethod = "bindmethod" 5010 getattribute $P6, self, 'opname' 5011 null $S1 5012 if_null $P6, __label_1 5013 set $S1, $P6 5014 __label_1: 5015 self.'annotate'(__ARG_1) 5016 $P6 = __ARG_1.'getDebug'() 5017 if_null $P6, __label_2 5018 unless $P6 goto __label_2 5019 __ARG_1.'comment'("pirop ", $S1) 5020 __label_2: # endif 5021 getattribute $P1, self, 'args' 5022 __ARG_1.'print'(" ") 5023 unless_null $P1, __label_3 5024 __ARG_1.'say'($S1) 5025 goto __label_4 5026 __label_3: # else 5027 set $P2, $P1 5028 root_new $P3, ['parrot';'ResizablePMCArray'] 5029 $P6 = bindmethod("emit_get") 5030 $P4 = bindlast($P6, __ARG_1) 5031 if_null $P2, __label_6 5032 iter $P8, $P2 5033 set $P8, 0 5034 __label_5: # for iteration 5035 unless $P8 goto __label_6 5036 shift $P5, $P8 5037 $P9 = $P4($P5) 5038 push $P3, $P9 5039 goto __label_5 5040 __label_6: # endfor 5041 set $P7, $P3 5042 set $P6, $P7 5043 join $S2, ", ", $P6 5044 __ARG_1.'say'($S1, " ", $S2) 5045 __label_4: # endif 5046 5047.end # emit 5048 5049.sub Winxed_class_init :anon :load :init 5050 newclass $P0, [ 'Winxed'; 'Compiler'; 'PiropStatement' ] 5051 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 5052 addparent $P0, $P1 5053 addattribute $P0, 'opname' 5054 addattribute $P0, 'args' 5055.end 5056.namespace [ 'Winxed'; 'Compiler'; 'ExternStatement' ] 5057 5058.sub 'ExternStatement' :method 5059 .param pmc __ARG_1 5060 .param pmc __ARG_2 5061 .param pmc __ARG_3 5062.const 'Sub' parseDotted = "parseDotted" 5063.const 'Sub' bindlast0 = "bindlast0" 5064.const 'Sub' ExpectOp = "ExpectOp" 5065.const 'Sub' WSubId_73 = "WSubId_73" 5066 self.'Statement'(__ARG_1, __ARG_3) 5067 $P1 = parseDotted(__ARG_2) 5068 elements $I1, $P1 5069 if $I1 goto __label_1 5070 $P2 = __ARG_2.'get'() 5071 bindlast0($P2) 5072 __label_1: # endif 5073 ExpectOp(";", __ARG_2) 5074 $P3 = WSubId_73($P1) 5075 setattribute self, 'path', $P3 5076 .return(self) 5077 5078.end # ExternStatement 5079 5080 5081.sub 'optimize' :method 5082 .return(self) 5083 5084.end # optimize 5085 5086 5087.sub 'emit' :method 5088 .param pmc __ARG_1 5089 self.'annotate'(__ARG_1) 5090 getattribute $P1, self, 'path' 5091 join $S1, "/", $P1 5092 __ARG_1.'say'(" ", "load_bytecode '", $S1, ".pbc'") 5093 5094.end # emit 5095 5096.sub Winxed_class_init :anon :load :init 5097 newclass $P0, [ 'Winxed'; 'Compiler'; 'ExternStatement' ] 5098 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 5099 addparent $P0, $P1 5100 addattribute $P0, 'path' 5101.end 5102.namespace [ 'Winxed'; 'Compiler'; 'StaticStatement' ] 5103 5104.sub 'StaticStatement' :method 5105 .param pmc __ARG_1 5106 .param pmc __ARG_2 5107 .param pmc __ARG_3 5108.const 'Sub' WSubId_74 = "WSubId_74" 5109.const 'Sub' parseIdentifier = "parseIdentifier" 5110 self.'Statement'(__ARG_1, __ARG_3) 5111 null $P3 5112 $P1 = WSubId_74(__ARG_2, $P3, parseIdentifier, ";") 5113 if_null $P1, __label_2 5114 iter $P4, $P1 5115 set $P4, 0 5116 __label_1: # for iteration 5117 unless $P4 goto __label_2 5118 shift $P2, $P4 5119 $P3 = self.'generatesubid'() 5120 null $S1 5121 if_null $P3, __label_3 5122 set $S1, $P3 5123 __label_3: 5124 self.'createvarnamed'($P2, "P", $S1) 5125 goto __label_1 5126 __label_2: # endfor 5127 setattribute self, 'names', $P1 5128 5129.end # StaticStatement 5130 5131 5132.sub 'optimize' :method 5133 .return(self) 5134 5135.end # optimize 5136 5137 5138.sub 'emit' :method 5139 .param pmc __ARG_1 5140 self.'annotate'(__ARG_1) 5141 getattribute $P2, self, 'names' 5142 if_null $P2, __label_2 5143 iter $P3, $P2 5144 set $P3, 0 5145 __label_1: # for iteration 5146 unless $P3 goto __label_2 5147 shift $P1, $P3 5148 $P5 = self.'getvar'($P1) 5149 $P4 = $P5.'getreg'() 5150 __ARG_1.'say'(".const 'Sub' ", $P4, " = '", $P1, "'") 5151 goto __label_1 5152 __label_2: # endfor 5153 5154.end # emit 5155 5156.sub Winxed_class_init :anon :load :init 5157 newclass $P0, [ 'Winxed'; 'Compiler'; 'StaticStatement' ] 5158 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 5159 addparent $P0, $P1 5160 addattribute $P0, 'names' 5161.end 5162.namespace [ 'Winxed'; 'Compiler'; 'UsingStatement' ] 5163 5164.sub 'UsingStatement' :method 5165 .param pmc __ARG_1 5166 .param pmc __ARG_2 5167 .param pmc __ARG_3 5168.const 'Sub' parseDotted = "parseDotted" 5169.const 'Sub' bindlast0 = "bindlast0" 5170.const 'Sub' ExpectOp = "ExpectOp" 5171 self.'Statement'(__ARG_1, __ARG_3) 5172 $P1 = parseDotted(__ARG_2) 5173 elements $I1, $P1 5174 if $I1 goto __label_1 5175 $P2 = __ARG_2.'get'() 5176 bindlast0($P2) 5177 __label_1: # endif 5178 ExpectOp(";", __ARG_2) 5179 setattribute self, 'path', $P1 5180 5181.end # UsingStatement 5182 5183 5184.sub 'optimize' :method 5185 getattribute $P1, self, 'path' 5186 $P2 = $P1[-1] 5187 $P3 = self.'scopesearch'($P1, 0) 5188 if_null $P3, __label_3 5189 isa $I1, $P3, [ 'Winxed'; 'Compiler'; 'FunctionStatement' ] 5190 if $I1 goto __label_4 5191 goto __label_2 5192 __label_3: # case 5193 elements $I2, $P1 5194 unless $I2 goto __label_5 5195 clone $P4, $P1 5196 $P4.'pop'() 5197 $P5 = self.'scopesearch'($P4, 1) 5198 if_null $P5, __label_6 5199 $P3 = $P5.'getvar'($P2) 5200 if_null $P3, __label_7 5201 self.'createvarused'($P2, $P3) 5202 new $P6, [ 'Winxed'; 'Compiler'; 'EmptyStatement' ] 5203 .return($P6) 5204 __label_7: # endif 5205 __label_6: # endif 5206 __label_5: # endif 5207 goto __label_1 # break 5208 __label_4: # case 5209 $P6 = $P3.'makesubid'() 5210 null $S1 5211 if_null $P6, __label_8 5212 set $S1, $P6 5213 __label_8: 5214 self.'createvarnamed'($P2, "P", $S1) 5215 box $P7, $S1 5216 setattribute self, 'subid', $P7 5217 self.'usesubid'($S1) 5218 .return(self) 5219 __label_2: # default 5220 __label_1: # switch end 5221 self.'createvar'($P2, "P") 5222 .return(self) 5223 5224.end # optimize 5225 5226 5227.sub 'emit' :method 5228 .param pmc __ARG_1 5229 getattribute $P1, self, 'path' 5230 $P2 = $P1[-1] 5231 $P3 = self.'getvar'($P2) 5232 getattribute $P5, self, 'subid' 5233 unless_null $P5, __label_1 5234 self.'annotate'(__ARG_1) 5235 null $S1 5236 elements $I1, $P1 5237 le $I1, 1, __label_2 5238 $P1.'pop'() 5239 set $P4, $P1 5240 null $S2 5241 elements $I1, $P4 5242 unless $I1 goto __label_3 5243 join $S3, "'; '", $P4 5244 concat $S4, "[ '", $S3 5245 concat $S4, $S4, "' ]" 5246 set $S2, $S4 5247 __label_3: # endif 5248 set $S1, $S2 5249 __label_2: # endif 5250 $P5 = $P3.'getreg'() 5251 $P6 = $P2.'getidentifier'() 5252 __ARG_1.'emitget_hll_global'($P5, $P6, $S1) 5253 __label_1: # endif 5254 5255.end # emit 5256 5257.sub Winxed_class_init :anon :load :init 5258 newclass $P0, [ 'Winxed'; 'Compiler'; 'UsingStatement' ] 5259 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 5260 addparent $P0, $P1 5261 addattribute $P0, 'path' 5262 addattribute $P0, 'subid' 5263.end 5264.namespace [ 'Winxed'; 'Compiler' ] 5265 5266.sub 'usingNamespace' :subid('WSubId_97') 5267 .param pmc __ARG_1 5268 .param pmc __ARG_2 5269 .param pmc __ARG_3 5270.const 'Sub' parseDotted = "parseDotted" 5271.const 'Sub' Expected = "Expected" 5272.const 'Sub' SyntaxError = "SyntaxError" 5273 $P1 = parseDotted(__ARG_2) 5274 elements $I1, $P1 5275 if $I1 goto __label_1 5276 Expected("namespace identifier", __ARG_1) 5277 __label_1: # endif 5278 $P2 = __ARG_3.'scopesearch'($P1, 1) 5279 unless_null $P2, __label_2 5280 SyntaxError("unknow namespace", __ARG_1) 5281 __label_2: # endif 5282 __ARG_3.'usenamespace'($P2) 5283 5284.end # usingNamespace 5285 5286.namespace [ 'Winxed'; 'Compiler'; 'UsingNamespaceStatement' ] 5287 5288.sub 'UsingNamespaceStatement' :method 5289 .param pmc __ARG_1 5290 .param pmc __ARG_2 5291 .param pmc __ARG_3 5292.const 'Sub' WSubId_97 = "WSubId_97" 5293.const 'Sub' ExpectOp = "ExpectOp" 5294 self.'Statement'(__ARG_1, __ARG_3) 5295 WSubId_97(__ARG_1, __ARG_2, __ARG_3) 5296 ExpectOp(";", __ARG_2) 5297 5298.end # UsingNamespaceStatement 5299 5300 5301.sub 'optimize' :method 5302 .return(self) 5303 5304.end # optimize 5305 5306 5307.sub 'emit' :method 5308 .param pmc __ARG_1 5309 5310.end # emit 5311 5312.sub Winxed_class_init :anon :load :init 5313 newclass $P0, [ 'Winxed'; 'Compiler'; 'UsingNamespaceStatement' ] 5314 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 5315 addparent $P0, $P1 5316.end 5317.namespace [ 'Winxed'; 'Compiler'; 'ExprStatement' ] 5318 5319.sub 'ExprStatement' :method 5320 .param pmc __ARG_1 5321 .param pmc __ARG_2 5322 .param pmc __ARG_3 5323.const 'Sub' WSubId_74 = "WSubId_74" 5324.const 'Sub' WSubId_75 = "WSubId_75" 5325 self.'Statement'(__ARG_1, __ARG_3) 5326 $P2 = WSubId_74(__ARG_2, self, WSubId_75, ";") 5327 setattribute self, 'expr', $P2 5328 5329.end # ExprStatement 5330 5331 5332.sub 'clone' :method 5333 .param pmc __ARG_1 5334 new $P1, [ 'Winxed'; 'Compiler'; 'ExprStatement' ] 5335 getattribute $P8, self, 'start' 5336 $P1.'Statement'($P8, __ARG_1) 5337 getattribute $P2, self, 'expr' 5338 set $P3, __ARG_1 5339.const 'Sub' bindlast = "bindlast" 5340.const 'Sub' bindmethod = "bindmethod" 5341 set $P4, $P2 5342 root_new $P5, ['parrot';'ResizablePMCArray'] 5343 $P10 = bindmethod("clone") 5344 $P6 = bindlast($P10, $P3) 5345 if_null $P4, __label_2 5346 iter $P11, $P4 5347 set $P11, 0 5348 __label_1: # for iteration 5349 unless $P11 goto __label_2 5350 shift $P7, $P11 5351 $P12 = $P6($P7) 5352 push $P5, $P12 5353 goto __label_1 5354 __label_2: # endfor 5355 set $P9, $P5 5356 set $P8, $P9 5357 setattribute $P1, 'expr', $P8 5358 .return($P1) 5359 5360.end # clone 5361 5362 5363.sub 'optimize' :method 5364 getattribute $P1, self, 'expr' 5365 if_null $P1, __label_2 5366 elements $I1, $P1 5367 goto __label_1 5368 __label_2: 5369 null $I1 5370 __label_1: 5371 null $I2 5372 __label_5: # for condition 5373 ge $I2, $I1, __label_4 5374 $P3 = $P1[$I2] 5375 $P2 = $P3.'optimize'() 5376 $P1[$I2] = $P2 5377 __label_3: # for iteration 5378 inc $I2 5379 goto __label_5 5380 __label_4: # for end 5381 .return(self) 5382 5383.end # optimize 5384 5385 5386.sub 'emit' :method 5387 .param pmc __ARG_1 5388.const 'Sub' bindlast = "bindlast" 5389.const 'Sub' bindmethod = "bindmethod" 5390 getattribute $P1, self, 'expr' 5391 $P4 = bindmethod("emit_void") 5392 $P2 = bindlast($P4, __ARG_1) 5393 if_null $P1, __label_2 5394 iter $P5, $P1 5395 set $P5, 0 5396 __label_1: # for iteration 5397 unless $P5 goto __label_2 5398 shift $P3, $P5 5399 $P2($P3) 5400 goto __label_1 5401 __label_2: # endfor 5402 5403.end # emit 5404 5405.sub Winxed_class_init :anon :load :init 5406 newclass $P0, [ 'Winxed'; 'Compiler'; 'ExprStatement' ] 5407 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 5408 addparent $P0, $P1 5409 addattribute $P0, 'expr' 5410.end 5411.namespace [ 'Winxed'; 'Compiler'; 'VarData' ] 5412 5413.sub 'VarData' :method 5414 .param string __ARG_1 5415 .param pmc __ARG_2 5416 .param pmc __ARG_3 5417 .param int __ARG_4 5418 box $P1, __ARG_1 5419 setattribute self, 'type', $P1 5420 setattribute self, 'reg', __ARG_2 5421 setattribute self, 'scope', __ARG_3 5422 box $P1, __ARG_4 5423 setattribute self, 'flags', $P1 5424 5425.end # VarData 5426 5427 5428.sub 'setlex' :method 5429 .param string __ARG_1 5430 box $P1, __ARG_1 5431 setattribute self, 'lexname', $P1 5432 5433.end # setlex 5434 5435 5436.sub 'createlex' :method 5437 .param string __ARG_1 5438 self.'setlex'(__ARG_1) 5439 $P2 = self.'getscope'() 5440 $P1 = $P2.'getouter'() 5441 getattribute $P3, self, 'reg' 5442 $P1.'setlex'(__ARG_1, $P3) 5443 5444.end # createlex 5445 5446 5447.sub 'gettype' :method 5448 getattribute $P1, self, 'type' 5449 .return($P1) 5450 5451.end # gettype 5452 5453 5454.sub 'getreg' :method 5455 getattribute $P1, self, 'reg' 5456 .return($P1) 5457 5458.end # getreg 5459 5460 5461.sub 'getscope' :method 5462 getattribute $P1, self, 'scope' 5463 .return($P1) 5464 5465.end # getscope 5466 5467 5468.sub 'getvalue' :method 5469 getattribute $P1, self, 'value' 5470 .return($P1) 5471 5472.end # getvalue 5473 5474 5475.sub 'isconst' :method 5476 .return(0) 5477 5478.end # isconst 5479 5480 5481.sub 'getlex' :method 5482 getattribute $P1, self, 'lexname' 5483 if_null $P1, __label_2 5484 set $S1, $P1 5485 goto __label_1 5486 __label_2: 5487 null $S1 5488 __label_1: 5489 .return($S1) 5490 5491.end # getlex 5492 5493 5494.sub 'getflags' :method 5495 getattribute $P1, self, 'flags' 5496 .return($P1) 5497 5498.end # getflags 5499 5500 5501.sub 'issubid' :method 5502 getattribute $P1, self, 'reg' 5503 isnull $I1, $P1 5504 not $I1 5505 unless $I1 goto __label_1 5506 set $S2, $P1 5507 substr $S1, $S2, 0, 7 5508 iseq $I1, $S1, "WSubId_" 5509 __label_1: 5510 .return($I1) 5511 5512.end # issubid 5513 5514.sub Winxed_class_init :anon :load :init 5515 newclass $P0, [ 'Winxed'; 'Compiler'; 'VarData' ] 5516 addattribute $P0, 'type' 5517 addattribute $P0, 'reg' 5518 addattribute $P0, 'scope' 5519 addattribute $P0, 'flags' 5520 addattribute $P0, 'lexname' 5521.end 5522.namespace [ 'Winxed'; 'Compiler'; 'ConstantInternalFail' ] 5523 5524.sub 'ConstantInternalFail' :method 5525 .param pmc __ARG_1 5526 setattribute self, 'name', __ARG_1 5527 5528.end # ConstantInternalFail 5529 5530 5531.sub 'get_string' :method :vtable 5532.const 'Sub' InternalError = "InternalError" 5533 getattribute $P1, self, 'name' 5534 InternalError("Attempt to use unexpanded constant!!!", $P1) 5535 5536.end # get_string 5537 5538.sub Winxed_class_init :anon :load :init 5539 newclass $P0, [ 'Winxed'; 'Compiler'; 'ConstantInternalFail' ] 5540 addattribute $P0, 'name' 5541.end 5542.namespace [ 'Winxed'; 'Compiler'; 'VarData_const' ] 5543 5544.sub 'VarData_const' :method 5545 .param string __ARG_1 5546 .param pmc __ARG_2 5547 .param pmc __ARG_3 5548 .param int __ARG_4 5549 new $P2, [ 'Winxed'; 'Compiler'; 'ConstantInternalFail' ] 5550 $P2.'ConstantInternalFail'(__ARG_2) 5551 set $P1, $P2 5552 self.'VarData'(__ARG_1, $P1, __ARG_3, __ARG_4) 5553 5554.end # VarData_const 5555 5556 5557.sub 'isconst' :method 5558 .return(1) 5559 5560.end # isconst 5561 5562 5563.sub 'setvalue' :method 5564 .param pmc __ARG_1 5565.const 'Sub' InternalError = "InternalError" 5566 getattribute $P1, self, 'value' 5567 if_null $P1, __label_1 5568 InternalError("Attempt change value of constant!!!") 5569 __label_1: # endif 5570 setattribute self, 'value', __ARG_1 5571 5572.end # setvalue 5573 5574.sub Winxed_class_init :anon :load :init 5575 newclass $P0, [ 'Winxed'; 'Compiler'; 'VarData_const' ] 5576 get_class $P1, [ 'Winxed'; 'Compiler'; 'VarData' ] 5577 addparent $P0, $P1 5578 addattribute $P0, 'value' 5579.end 5580.namespace [ 'Winxed'; 'Compiler'; 'VarContainer' ] 5581 5582.sub 'VarContainer' :method 5583 root_new $P2, ['parrot';'Hash'] 5584 setattribute self, 'locals', $P2 5585 5586.end # VarContainer 5587 5588 5589.sub 'createvar' :method 5590 .param pmc __ARG_1 5591 .param string __ARG_2 5592 .param int __ARG_3 :optional 5593.const 'Sub' WSubId_98 = "WSubId_98" 5594 $P4 = __ARG_1.'getidentifier'() 5595 null $S1 5596 if_null $P4, __label_1 5597 set $S1, $P4 5598 __label_1: 5599 getattribute $P1, self, 'locals' 5600 $P2 = $P1[$S1] 5601 if_null $P2, __label_2 5602 WSubId_98(__ARG_1) 5603 __label_2: # endif 5604 $P4 = self.'createreg'(__ARG_2) 5605 null $S2 5606 if_null $P4, __label_3 5607 set $S2, $P4 5608 __label_3: 5609 new $P4, [ 'Winxed'; 'Compiler'; 'VarData' ] 5610 $P4.'VarData'(__ARG_2, $S2, self, __ARG_3) 5611 set $P3, $P4 5612 $P1[$S1] = $P3 5613 .return($P3) 5614 5615.end # createvar 5616 5617 5618.sub 'createvarused' :method 5619 .param pmc __ARG_1 5620 .param pmc __ARG_2 5621.const 'Sub' WSubId_98 = "WSubId_98" 5622 getattribute $P1, self, 'locals' 5623 null $S1 5624 if_null __ARG_1, __label_1 5625 set $S1, __ARG_1 5626 __label_1: 5627 $P2 = $P1[$S1] 5628 if_null $P2, __label_2 5629 WSubId_98(__ARG_1) 5630 __label_2: # endif 5631 $P1[$S1] = __ARG_2 5632 5633.end # createvarused 5634 5635 5636.sub 'createvarnamed' :method 5637 .param pmc __ARG_1 5638 .param string __ARG_2 5639 .param string __ARG_3 5640.const 'Sub' WSubId_98 = "WSubId_98" 5641 null $S1 5642 if_null __ARG_1, __label_1 5643 set $S1, __ARG_1 5644 __label_1: 5645 getattribute $P1, self, 'locals' 5646 $P2 = $P1[$S1] 5647 if_null $P2, __label_2 5648 WSubId_98(__ARG_1) 5649 __label_2: # endif 5650 new $P4, [ 'Winxed'; 'Compiler'; 'VarData' ] 5651 $P4.'VarData'(__ARG_2, __ARG_3, self, 0) 5652 set $P3, $P4 5653 $P1[$S1] = $P3 5654 5655.end # createvarnamed 5656 5657 5658.sub 'createconst' :method 5659 .param pmc __ARG_1 5660 .param string __ARG_2 5661 .param int __ARG_3 :optional 5662.const 'Sub' WSubId_98 = "WSubId_98" 5663 $P4 = __ARG_1.'getidentifier'() 5664 null $S1 5665 if_null $P4, __label_1 5666 set $S1, $P4 5667 __label_1: 5668 getattribute $P1, self, 'locals' 5669 $P2 = $P1[$S1] 5670 if_null $P2, __label_2 5671 WSubId_98(__ARG_1) 5672 __label_2: # endif 5673 new $P4, [ 'Winxed'; 'Compiler'; 'VarData_const' ] 5674 $P4.'VarData_const'(__ARG_2, __ARG_1, self, __ARG_3) 5675 set $P3, $P4 5676 $P1[$S1] = $P3 5677 .return($P3) 5678 5679.end # createconst 5680 5681 5682.sub 'getlocalvar' :method 5683 .param pmc __ARG_1 5684 getattribute $P1, self, 'locals' 5685 set $S1, __ARG_1 5686 $P2 = $P1[$S1] 5687 .return($P2) 5688 5689.end # getlocalvar 5690 5691 5692.sub 'getusedvar' :method 5693 .param pmc __ARG_1 5694 null $P1 5695 getattribute $P3, self, 'usednamespaces' 5696 if_null $P3, __label_2 5697 iter $P4, $P3 5698 set $P4, 0 5699 __label_1: # for iteration 5700 unless $P4 goto __label_2 5701 shift $P2, $P4 5702 $P1 = $P2.'getlocalvar'(__ARG_1) 5703 if_null $P1, __label_3 5704 .return($P1) 5705 __label_3: # endif 5706 goto __label_1 5707 __label_2: # endfor 5708 null $P3 5709 .return($P3) 5710 5711.end # getusedvar 5712 5713 5714.sub 'getvar' :method 5715 .param pmc __ARG_1 5716 null $P1 5717 $P1 = self.'getlocalvar'(__ARG_1) 5718 if_null $P1, __label_1 5719 .return($P1) 5720 __label_1: # endif 5721 $P1 = self.'getusedvar'(__ARG_1) 5722 if_null $P1, __label_2 5723 .return($P1) 5724 __label_2: # endif 5725 getattribute $P2, self, 'owner' 5726 if_null $P2, __label_3 5727 .tailcall $P2.'getvar'(__ARG_1) 5728 __label_3: # endif 5729 null $P3 5730 .return($P3) 5731 5732.end # getvar 5733 5734 5735.sub 'makelexical' :method 5736 .param pmc __ARG_1 5737 $P1 = self.'getlexicalouter'() 5738 $P2 = $P1.'createlex'(__ARG_1) 5739 null $S1 5740 if_null $P2, __label_1 5741 set $S1, $P2 5742 __label_1: 5743 .return($S1) 5744 5745.end # makelexical 5746 5747 5748.sub 'makelexicalself' :method 5749 self.'setlex'("'__WLEX_self'", "self") 5750 .return("'__WLEX_self'") 5751 5752.end # makelexicalself 5753 5754.sub Winxed_class_init :anon :load :init 5755 newclass $P0, [ 'Winxed'; 'Compiler'; 'VarContainer' ] 5756 addattribute $P0, 'locals' 5757 addattribute $P0, 'usednamespaces' 5758.end 5759.namespace [ 'Winxed'; 'Compiler'; 'BlockStatement' ] 5760 5761.sub 'BlockStatement' :method 5762 .param pmc __ARG_1 5763 .param pmc __ARG_2 5764 self.'Statement'(__ARG_1, __ARG_2) 5765 self.'VarContainer'() 5766 5767.end # BlockStatement 5768 5769 5770.sub 'addinline' :method 5771 .param pmc __ARG_1 5772 getattribute $P2, __ARG_1, 'name' 5773 null $S1 5774 if_null $P2, __label_1 5775 set $S1, $P2 5776 __label_1: 5777 getattribute $P1, self, 'inlines' 5778 if_null $P1, __label_2 5779 $P1[$S1] = __ARG_1 5780 goto __label_3 5781 __label_2: # else 5782 root_new $P3, ['parrot';'Hash'] 5783 $P3[$S1] = __ARG_1 5784 setattribute self, 'inlines', $P3 5785 __label_3: # endif 5786 5787.end # addinline 5788 5789 5790.sub 'scopesearch' :method 5791 .param pmc __ARG_1 5792 .param int __ARG_2 5793 if __ARG_2 goto __label_1 5794 elements $I1, __ARG_1 5795 ne $I1, 1, __label_1 5796 getattribute $P1, self, 'inlines' 5797 if_null $P1, __label_2 5798 $S1 = __ARG_1[0] 5799 $P2 = $P1[$S1] 5800 if_null $P2, __label_3 5801 .return($P2) 5802 __label_3: # endif 5803 __label_2: # endif 5804 __label_1: # endif 5805 getattribute $P3, self, 'owner' 5806 .tailcall $P3.'scopesearch'(__ARG_1, __ARG_2) 5807 5808.end # scopesearch 5809 5810.sub Winxed_class_init :anon :load :init 5811 newclass $P0, [ 'Winxed'; 'Compiler'; 'BlockStatement' ] 5812 get_class $P1, [ 'Winxed'; 'Compiler'; 'VarContainer' ] 5813 addparent $P0, $P1 5814 get_class $P2, [ 'Winxed'; 'Compiler'; 'Statement' ] 5815 addparent $P0, $P2 5816 addattribute $P0, 'inlines' 5817.end 5818.namespace [ 'Winxed'; 'Compiler'; 'Expr' ] 5819 5820.sub 'Expr' :method 5821 .param pmc __ARG_1 5822 .param pmc __ARG_2 5823 self.'initbase'(__ARG_2, __ARG_1) 5824 5825.end # Expr 5826 5827 5828.sub 'issimple' :method 5829 .return(0) 5830 5831.end # issimple 5832 5833 5834.sub 'isliteral' :method 5835 .return(0) 5836 5837.end # isliteral 5838 5839 5840.sub 'isintegerliteral' :method 5841 .return(0) 5842 5843.end # isintegerliteral 5844 5845 5846.sub 'isintegerzero' :method 5847 .return(0) 5848 5849.end # isintegerzero 5850 5851 5852.sub 'isfloatliteral' :method 5853 .return(0) 5854 5855.end # isfloatliteral 5856 5857 5858.sub 'isstringliteral' :method 5859 .return(0) 5860 5861.end # isstringliteral 5862 5863 5864.sub 'isidentifier' :method 5865 .return(0) 5866 5867.end # isidentifier 5868 5869 5870.sub 'isnull' :method 5871 .return(0) 5872 5873.end # isnull 5874 5875 5876.sub 'hascompilevalue' :method 5877 .return(0) 5878 5879.end # hascompilevalue 5880 5881 5882.sub 'isnegable' :method 5883 .return(0) 5884 5885.end # isnegable 5886 5887 5888.sub 'tempreg' :method 5889 .param string __ARG_1 5890 getattribute $P1, self, 'owner' 5891 .tailcall $P1.'tempreg'(__ARG_1) 5892 5893.end # tempreg 5894 5895 5896.sub 'genlabel' :method 5897 getattribute $P1, self, 'owner' 5898 .tailcall $P1.'genlabel'() 5899 5900.end # genlabel 5901 5902 5903.sub 'optimize' :method 5904 .return(self) 5905 5906.end # optimize 5907 5908 5909.sub 'cantailcall' :method 5910 .return(0) 5911 5912.end # cantailcall 5913 5914 5915.sub 'emit_init' :method 5916 .param pmc __ARG_1 5917 .param string __ARG_2 5918 self.'emit'(__ARG_1, __ARG_2) 5919 5920.end # emit_init 5921 5922 5923.sub 'emit_get' :method 5924 .param pmc __ARG_1 5925 $P2 = self.'checkresult'() 5926 $P1 = self.'tempreg'($P2) 5927 null $S1 5928 if_null $P1, __label_1 5929 set $S1, $P1 5930 __label_1: 5931 self.'emit'(__ARG_1, $S1) 5932 .return($S1) 5933 5934.end # emit_get 5935 5936 5937.sub 'emit_void' :method 5938 .param pmc __ARG_1 5939.const 'Sub' InternalError = "InternalError" 5940 $P1 = self.'checkresult'() 5941 null $S1 5942 if_null $P1, __label_1 5943 set $S1, $P1 5944 __label_1: 5945 null $S2 5946 if_null $S1, __label_2 5947 length $I1, $S1 5948 ne $I1, 1, __label_2 5949 ord $I1, $S1 5950 if $I1 == 73 goto __label_4 5951 if $I1 == 78 goto __label_5 5952 if $I1 == 83 goto __label_6 5953 if $I1 == 80 goto __label_7 5954 goto __label_2 5955 __label_4: # case 5956 set $S2, "$I0" 5957 goto __label_3 # break 5958 __label_5: # case 5959 set $S2, "$N0" 5960 goto __label_3 # break 5961 __label_6: # case 5962 set $S2, "$S0" 5963 goto __label_3 # break 5964 __label_7: # case 5965 set $S2, "$P0" 5966 goto __label_3 # break 5967 __label_2: # default 5968 concat $S3, "Unexcpected emit_void with type '", $S1 5969 concat $S3, $S3, "'" 5970 getattribute $P1, self, 'start' 5971 InternalError($S3, $P1) 5972 __label_3: # switch end 5973 self.'emit'(__ARG_1, $S2) 5974 5975.end # emit_void 5976 5977 5978.sub 'emit_get_nonull' :method 5979 .param pmc __ARG_1 5980 .tailcall self.'emit_get'(__ARG_1) 5981 5982.end # emit_get_nonull 5983 5984 5985.sub 'emit_getint' :method 5986 .param pmc __ARG_1 5987 $P1 = self.'emit_get_nonull'(__ARG_1) 5988 null $S1 5989 if_null $P1, __label_1 5990 set $S1, $P1 5991 __label_1: 5992 $P1 = self.'checkresult'() 5993 set $S3, $P1 5994 eq $S3, "I", __label_2 5995 $P2 = self.'tempreg'("I") 5996 null $S2 5997 if_null $P2, __label_3 5998 set $S2, $P2 5999 __label_3: 6000 self.'annotate'(__ARG_1) 6001 __ARG_1.'emitset'($S2, $S1) 6002 set $S1, $S2 6003 __label_2: # endif 6004 .return($S1) 6005 6006.end # emit_getint 6007 6008 6009.sub 'emit_getvar' :method 6010 .param pmc __ARG_1 6011 $P1 = self.'checkresult'() 6012 null $S1 6013 if_null $P1, __label_1 6014 set $S1, $P1 6015 __label_1: 6016 $P1 = self.'emit_get'(__ARG_1) 6017 null $S2 6018 if_null $P1, __label_2 6019 set $S2, $P1 6020 __label_2: 6021 eq $S1, "P", __label_3 6022 set $S3, $S2 6023 $P1 = self.'tempreg'("P") 6024 set $S2, $P1 6025 __ARG_1.'emitbox'($S2, $S3) 6026 __label_3: # endif 6027 .return($S2) 6028 6029.end # emit_getvar 6030 6031 6032.sub 'emit_assign_get' :method 6033 .param pmc __ARG_1 6034 .param pmc __ARG_2 6035.const 'Sub' WSubId_99 = "WSubId_99" 6036 WSubId_99(self) 6037 6038.end # emit_assign_get 6039 6040.sub Winxed_class_init :anon :load :init 6041 newclass $P0, [ 'Winxed'; 'Compiler'; 'Expr' ] 6042 get_class $P1, [ 'Winxed'; 'Compiler'; 'CommonBase' ] 6043 addparent $P0, $P1 6044.end 6045.namespace [ 'Winxed'; 'Compiler'; 'SimpleExpr' ] 6046 6047.sub 'issimple' :method 6048 .return(1) 6049 6050.end # issimple 6051 6052.sub Winxed_class_init :anon :load :init 6053 newclass $P0, [ 'Winxed'; 'Compiler'; 'SimpleExpr' ] 6054 get_class $P1, [ 'Winxed'; 'Compiler'; 'Expr' ] 6055 addparent $P0, $P1 6056.end 6057.namespace [ 'Winxed'; 'Compiler'; 'FinalExpr' ] 6058 6059.sub 'optimize' :method 6060.const 'Sub' InternalError = "InternalError" 6061 typeof $P1, self 6062 set $S1, $P1 6063 concat $S2, "misuse of ", $S1 6064 InternalError($S2, self) 6065 6066.end # optimize 6067 6068.sub Winxed_class_init :anon :load :init 6069 newclass $P0, [ 'Winxed'; 'Compiler'; 'FinalExpr' ] 6070 get_class $P1, [ 'Winxed'; 'Compiler'; 'Expr' ] 6071 addparent $P0, $P1 6072.end 6073.namespace [ 'Winxed'; 'Compiler'; 'FunctionExpr' ] 6074 6075.sub 'FunctionExpr' :method 6076 .param pmc __ARG_1 6077 .param pmc __ARG_2 6078 .param pmc __ARG_3 6079.const 'Sub' Expected = "Expected" 6080 self.'Expr'(__ARG_2, __ARG_3) 6081 $P1 = __ARG_1.'get'() 6082 $P2 = $P1.'isop'("(") 6083 if $P2 goto __label_1 6084 Expected("anonymous function", $P1) 6085 __label_1: # endif 6086 new $P4, [ 'Winxed'; 'Compiler'; 'LocalFunctionStatement' ] 6087 $P4.'LocalFunctionStatement'(__ARG_3, __ARG_1, __ARG_2) 6088 set $P3, $P4 6089 setattribute self, 'fn', $P3 6090 6091.end # FunctionExpr 6092 6093 6094.sub 'clone' :method 6095 .param pmc __ARG_1 6096 new $P1, [ 'Winxed'; 'Compiler'; 'FunctionExpr' ] 6097 getattribute $P2, self, 'start' 6098 $P1.'Expr'(__ARG_1, $P2) 6099 getattribute $P4, self, 'fn' 6100 $P3 = $P4.'clone'(__ARG_1) 6101 setattribute $P1, 'fn', $P3 6102 .return($P1) 6103 6104.end # clone 6105 6106 6107.sub 'checkresult' :method 6108 .return("P") 6109 6110.end # checkresult 6111 6112 6113.sub 'optimize' :method 6114 getattribute $P3, self, 'fn' 6115 $P2 = $P3.'optimize'() 6116 setattribute self, 'fn', $P2 6117 getattribute $P2, self, 'fn' 6118 $P1 = $P2.'getsubid'() 6119 self.'usesubid'($P1) 6120 .return(self) 6121 6122.end # optimize 6123 6124 6125.sub 'emit' :method 6126 .param pmc __ARG_1 6127 .param string __ARG_2 6128 self.'annotate'(__ARG_1) 6129 getattribute $P1, self, 'fn' 6130 $P2 = $P1.'getsubid'() 6131 null $S1 6132 if_null $P2, __label_1 6133 set $S1, $P2 6134 __label_1: 6135 $P2 = $P1.'needclosure'() 6136 if_null $P2, __label_2 6137 unless $P2 goto __label_2 6138 __ARG_1.'emitarg2'("newclosure", __ARG_2, $S1) 6139 goto __label_3 6140 __label_2: # else 6141 __ARG_1.'emitset'(__ARG_2, $S1) 6142 __label_3: # endif 6143 6144.end # emit 6145 6146 6147.sub 'emit_void' :method 6148 .param pmc __ARG_1 6149 6150.end # emit_void 6151 6152.sub Winxed_class_init :anon :load :init 6153 newclass $P0, [ 'Winxed'; 'Compiler'; 'FunctionExpr' ] 6154 get_class $P1, [ 'Winxed'; 'Compiler'; 'Expr' ] 6155 addparent $P0, $P1 6156 addattribute $P0, 'fn' 6157.end 6158.namespace [ 'Winxed'; 'Compiler' ] 6159.namespace [ 'Winxed'; 'Compiler'; 'ConditionFriendlyIf' ] 6160 6161.sub 'emit_if' :method 6162 .param pmc __ARG_1 6163 .param string __ARG_2 6164.const 'Sub' InternalError = "InternalError" 6165 InternalError("Winxed.Compiler.ConditionFriendlyIf.emit_if not overriden", self) 6166 6167.end # emit_if 6168 6169.sub Winxed_class_init :anon :load :init 6170 newclass $P0, [ 'Winxed'; 'Compiler'; 'ConditionFriendlyIf' ] 6171.end 6172.namespace [ 'Winxed'; 'Compiler'; 'ConditionFriendlyElse' ] 6173 6174.sub 'emit_else' :method 6175 .param pmc __ARG_1 6176 .param string __ARG_2 6177.const 'Sub' InternalError = "InternalError" 6178 InternalError("Winxed.Compiler.ConditionFriendlyElse.emit_else not overriden", self) 6179 6180.end # emit_else 6181 6182.sub Winxed_class_init :anon :load :init 6183 newclass $P0, [ 'Winxed'; 'Compiler'; 'ConditionFriendlyElse' ] 6184.end 6185.namespace [ 'Winxed'; 'Compiler'; 'ConditionFriendlyExpr' ] 6186.sub Winxed_class_init :anon :load :init 6187 newclass $P0, [ 'Winxed'; 'Compiler'; 'ConditionFriendlyExpr' ] 6188 get_class $P1, [ 'Winxed'; 'Compiler'; 'ConditionFriendlyIf' ] 6189 addparent $P0, $P1 6190 get_class $P2, [ 'Winxed'; 'Compiler'; 'ConditionFriendlyElse' ] 6191 addparent $P0, $P2 6192.end 6193.namespace [ 'Winxed'; 'Compiler'; 'Condition' ] 6194 6195.sub 'set' :method 6196 .param pmc __ARG_1 6197 setattribute self, 'condexpr', __ARG_1 6198 .return(self) 6199 6200.end # set 6201 6202 6203.sub 'optimize_condition' :method 6204 getattribute $P3, self, 'condexpr' 6205 $P2 = $P3.'optimize'() 6206 setattribute self, 'condexpr', $P2 6207 6208.end # optimize_condition 6209 6210 6211.sub 'optimize' :method 6212 getattribute $P3, self, 'condexpr' 6213 $P2 = $P3.'optimize'() 6214 setattribute self, 'condexpr', $P2 6215 .return(self) 6216 6217.end # optimize 6218 6219 6220.sub 'getvalue' :method 6221 getattribute $P1, self, 'condexpr' 6222 $P2 = $P1.'isintegerliteral'() 6223 if_null $P2, __label_1 6224 unless $P2 goto __label_1 6225 $P3 = $P1.'isintegerzero'() 6226 if_null $P3, __label_3 6227 unless $P3 goto __label_3 6228 set $I1, 2 6229 goto __label_2 6230 __label_3: 6231 set $I1, 1 6232 __label_2: 6233 .return($I1) 6234 __label_1: # endif 6235 .return(0) 6236 6237.end # getvalue 6238 6239 6240.sub 'emit_if' :method 6241 .param pmc __ARG_1 6242 .param string __ARG_2 6243 .param string __ARG_3 6244.const 'Sub' InternalError = "InternalError" 6245 getattribute $P1, self, 'condexpr' 6246 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'ConditionFriendlyIf' ] 6247 unless $I1 goto __label_1 6248 $P1.'emit_if'(__ARG_1, __ARG_2) 6249 goto __label_2 6250 __label_1: # else 6251 $P2 = $P1.'emit_get'(__ARG_1) 6252 null $S1 6253 if_null $P2, __label_3 6254 set $S1, $P2 6255 __label_3: 6256 $P2 = $P1.'checkresult'() 6257 set $S2, $P2 6258 if_null $S2, __label_4 6259 length $I1, $S2 6260 ne $I1, 1, __label_4 6261 ord $I1, $S2 6262 if $I1 == 80 goto __label_6 6263 if $I1 == 83 goto __label_7 6264 if $I1 == 73 goto __label_8 6265 if $I1 == 78 goto __label_9 6266 goto __label_4 6267 __label_6: # case 6268 __ARG_1.'emitif_null'($S1, __ARG_3) 6269 __label_7: # case 6270 __label_8: # case 6271 __label_9: # case 6272 __ARG_1.'emitif'($S1, __ARG_2) 6273 goto __label_5 # break 6274 __label_4: # default 6275 InternalError("Invalid if condition") 6276 __label_5: # switch end 6277 __label_2: # endif 6278 6279.end # emit_if 6280 6281 6282.sub 'emit_else' :method 6283 .param pmc __ARG_1 6284 .param string __ARG_2 6285.const 'Sub' InternalError = "InternalError" 6286 getattribute $P1, self, 'condexpr' 6287 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'ConditionFriendlyElse' ] 6288 unless $I1 goto __label_1 6289 $P1.'emit_else'(__ARG_1, __ARG_2) 6290 goto __label_2 6291 __label_1: # else 6292 $P2 = $P1.'emit_get'(__ARG_1) 6293 null $S1 6294 if_null $P2, __label_3 6295 set $S1, $P2 6296 __label_3: 6297 $P2 = $P1.'checkresult'() 6298 set $S2, $P2 6299 if_null $S2, __label_4 6300 length $I1, $S2 6301 ne $I1, 1, __label_4 6302 ord $I1, $S2 6303 if $I1 == 80 goto __label_6 6304 if $I1 == 83 goto __label_7 6305 if $I1 == 73 goto __label_8 6306 if $I1 == 78 goto __label_9 6307 goto __label_4 6308 __label_6: # case 6309 __ARG_1.'emitif_null'($S1, __ARG_2) 6310 __label_7: # case 6311 __label_8: # case 6312 __label_9: # case 6313 __ARG_1.'emitunless'($S1, __ARG_2) 6314 goto __label_5 # break 6315 __label_4: # default 6316 InternalError("Invalid if condition") 6317 __label_5: # switch end 6318 __label_2: # endif 6319 6320.end # emit_else 6321 6322.sub Winxed_class_init :anon :load :init 6323 newclass $P0, [ 'Winxed'; 'Compiler'; 'Condition' ] 6324 addattribute $P0, 'condexpr' 6325.end 6326.namespace [ 'Winxed'; 'Compiler'; 'Literal' ] 6327 6328.sub 'isliteral' :method 6329 .return(1) 6330 6331.end # isliteral 6332 6333 6334.sub 'hascompilevalue' :method 6335 .return(1) 6336 6337.end # hascompilevalue 6338 6339 6340.sub 'emit_void' :method 6341 .param pmc __ARG_1 6342 6343.end # emit_void 6344 6345.sub Winxed_class_init :anon :load :init 6346 newclass $P0, [ 'Winxed'; 'Compiler'; 'Literal' ] 6347 get_class $P1, [ 'Winxed'; 'Compiler'; 'SimpleExpr' ] 6348 addparent $P0, $P1 6349.end 6350.namespace [ 'Winxed'; 'Compiler'; 'IntegerLiteral' ] 6351 6352.sub 'IntegerLiteral' :method 6353 .param pmc __ARG_1 6354 .param pmc __ARG_2 6355 .param int __ARG_3 6356 self.'Expr'(__ARG_1, __ARG_2) 6357 box $P1, __ARG_3 6358 setattribute self, 'intval', $P1 6359 6360.end # IntegerLiteral 6361 6362 6363.sub 'clone' :method 6364 .param pmc __ARG_1 6365 new $P2, [ 'Winxed'; 'Compiler'; 'IntegerLiteral' ] 6366 getattribute $P3, self, 'start' 6367 getattribute $P4, self, 'intval' 6368 $P2.'IntegerLiteral'(__ARG_1, $P3, $P4) 6369 set $P1, $P2 6370 .return($P1) 6371 6372.end # clone 6373 6374 6375.sub 'isintegerliteral' :method 6376 .return(1) 6377 6378.end # isintegerliteral 6379 6380 6381.sub 'isintegerzero' :method 6382 getattribute $P1, self, 'intval' 6383 set $I2, $P1 6384 iseq $I1, $I2, 0 6385 .return($I1) 6386 6387.end # isintegerzero 6388 6389 6390.sub 'checkresult' :method 6391 .return("I") 6392 6393.end # checkresult 6394 6395 6396.sub 'getIntegerValue' :method 6397 getattribute $P1, self, 'intval' 6398 set $I1, $P1 6399 .return($I1) 6400 6401.end # getIntegerValue 6402 6403 6404.sub 'getFloatValue' :method 6405 getattribute $P1, self, 'intval' 6406 set $N1, $P1 6407 .return($N1) 6408 6409.end # getFloatValue 6410 6411 6412.sub 'getStringValue' :method 6413 getattribute $P1, self, 'intval' 6414 set $S1, $P1 6415 .return($S1) 6416 6417.end # getStringValue 6418 6419 6420.sub 'getLiteralInteger' :method 6421 .return(self) 6422 6423.end # getLiteralInteger 6424 6425 6426.sub 'getLiteralFloat' :method 6427.const 'Sub' WSubId_100 = "WSubId_100" 6428 getattribute $P1, self, 'owner' 6429 getattribute $P2, self, 'start' 6430 getattribute $P3, self, 'intval' 6431 .tailcall WSubId_100($P1, $P2, $P3) 6432 6433.end # getLiteralFloat 6434 6435 6436.sub 'getLiteralString' :method 6437.const 'Sub' bindmethod0 = "bindmethod0" 6438 getattribute $P1, self, 'owner' 6439 getattribute $P2, self, 'start' 6440 getattribute $P3, self, 'intval' 6441 .tailcall bindmethod0($P1, $P2, $P3) 6442 6443.end # getLiteralString 6444 6445 6446.sub 'emit' :method 6447 .param pmc __ARG_1 6448 .param string __ARG_2 6449 $P1 = self.'getIntegerValue'() 6450 set $I1, $P1 6451 if $I1 goto __label_1 6452 __ARG_1.'emitnull'(__ARG_2) 6453 goto __label_2 6454 __label_1: # else 6455 __ARG_1.'emitset'(__ARG_2, $I1) 6456 __label_2: # endif 6457 6458.end # emit 6459 6460 6461.sub 'emit_get' :method 6462 .param pmc __ARG_1 6463 .tailcall self.'getIntegerValue'() 6464 6465.end # emit_get 6466 6467 6468.sub 'emit_getint' :method 6469 .param pmc __ARG_1 6470 .tailcall self.'getIntegerValue'() 6471 6472.end # emit_getint 6473 6474.sub Winxed_class_init :anon :load :init 6475 newclass $P0, [ 'Winxed'; 'Compiler'; 'IntegerLiteral' ] 6476 get_class $P1, [ 'Winxed'; 'Compiler'; 'Literal' ] 6477 addparent $P0, $P1 6478 addattribute $P0, 'intval' 6479.end 6480.namespace [ 'Winxed'; 'Compiler'; 'FloatLiteral' ] 6481 6482.sub 'FloatLiteral' :method 6483 .param pmc __ARG_1 6484 .param pmc __ARG_2 6485 self.'Expr'(__ARG_1, __ARG_2) 6486 setattribute self, 'numval', __ARG_2 6487 6488.end # FloatLiteral 6489 6490 6491.sub 'clone' :method 6492 .param pmc __ARG_1 6493 new $P2, [ 'Winxed'; 'Compiler'; 'FloatLiteral' ] 6494 getattribute $P3, self, 'numval' 6495 $P2.'FloatLiteral'(__ARG_1, $P3) 6496 set $P1, $P2 6497 .return($P1) 6498 6499.end # clone 6500 6501 6502.sub 'isfloatliteral' :method 6503 .return(1) 6504 6505.end # isfloatliteral 6506 6507 6508.sub 'checkresult' :method 6509 .return("N") 6510 6511.end # checkresult 6512 6513 6514.sub 'getIntegerValue' :method 6515 $P1 = self.'getFloatValue'() 6516 set $I1, $P1 6517 .return($I1) 6518 6519.end # getIntegerValue 6520 6521 6522.sub 'getFloatValue' :method 6523 getattribute $P2, self, 'numval' 6524 $P1 = $P2.'getfloatvalue'() 6525 set $N1, $P1 6526 .return($N1) 6527 6528.end # getFloatValue 6529 6530 6531.sub 'getStringValue' :method 6532 $P1 = self.'getFloatValue'() 6533 null $S1 6534 if_null $P1, __label_1 6535 set $S1, $P1 6536 __label_1: 6537 .return($S1) 6538 6539.end # getStringValue 6540 6541 6542.sub 'getLiteralInteger' :method 6543.const 'Sub' integerValue = "integerValue" 6544 getattribute $P1, self, 'owner' 6545 getattribute $P2, self, 'start' 6546 $P3 = self.'getFloatValue'() 6547 .tailcall integerValue($P1, $P2, $P3) 6548 6549.end # getLiteralInteger 6550 6551 6552.sub 'getLiteralFloat' :method 6553 .return(self) 6554 6555.end # getLiteralFloat 6556 6557 6558.sub 'getLiteralString' :method 6559.const 'Sub' bindmethod0 = "bindmethod0" 6560 getattribute $P1, self, 'owner' 6561 getattribute $P2, self, 'start' 6562 $P3 = self.'getFloatValue'() 6563 .tailcall bindmethod0($P1, $P2, $P3) 6564 6565.end # getLiteralString 6566 6567 6568.sub 'emit' :method 6569 .param pmc __ARG_1 6570 .param string __ARG_2 6571 $P1 = self.'emit_get'(__ARG_1) 6572 null $S1 6573 if_null $P1, __label_1 6574 set $S1, $P1 6575 __label_1: 6576 __ARG_1.'emitset'(__ARG_2, $S1) 6577 6578.end # emit 6579 6580 6581.sub 'emit_get' :method 6582 .param pmc __ARG_1 6583.const 'Sub' floatAsString = "floatAsString" 6584 $P1 = self.'getFloatValue'() 6585 set $N1, $P1 6586 .tailcall floatAsString($N1) 6587 6588.end # emit_get 6589 6590.sub Winxed_class_init :anon :load :init 6591 newclass $P0, [ 'Winxed'; 'Compiler'; 'FloatLiteral' ] 6592 get_class $P1, [ 'Winxed'; 'Compiler'; 'Literal' ] 6593 addparent $P0, $P1 6594 addattribute $P0, 'numval' 6595.end 6596.namespace [ 'Winxed'; 'Compiler'; 'StringLiteral' ] 6597 6598.sub 'StringLiteral' :method 6599 .param pmc __ARG_1 6600 .param pmc __ARG_2 6601 self.'Expr'(__ARG_1, __ARG_2) 6602 setattribute self, 'strval', __ARG_2 6603 6604.end # StringLiteral 6605 6606 6607.sub 'clone' :method 6608 .param pmc __ARG_1 6609 new $P2, [ 'Winxed'; 'Compiler'; 'StringLiteral' ] 6610 getattribute $P3, self, 'strval' 6611 $P2.'StringLiteral'(__ARG_1, $P3) 6612 set $P1, $P2 6613 .return($P1) 6614 6615.end # clone 6616 6617 6618.sub 'isstringliteral' :method 6619 .return(1) 6620 6621.end # isstringliteral 6622 6623 6624.sub 'checkresult' :method 6625 .return("S") 6626 6627.end # checkresult 6628 6629 6630.sub 'getPirString' :method 6631 getattribute $P1, self, 'strval' 6632 $P2 = $P1.'getPirString'() 6633 null $S1 6634 if_null $P2, __label_1 6635 set $S1, $P2 6636 __label_1: 6637 .return($S1) 6638 6639.end # getPirString 6640 6641 6642.sub 'getIntegerValue' :method 6643 $P1 = self.'getStringValue'() 6644 set $I1, $P1 6645 .return($I1) 6646 6647.end # getIntegerValue 6648 6649 6650.sub 'getFloatValue' :method 6651 $P1 = self.'getStringValue'() 6652 set $N1, $P1 6653 .return($N1) 6654 6655.end # getFloatValue 6656 6657 6658.sub 'getStringValue' :method 6659 getattribute $P1, self, 'strval' 6660 getattribute $P2, $P1, 'str' 6661 null $S1 6662 if_null $P2, __label_1 6663 set $S1, $P2 6664 __label_1: 6665 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'TokenQuoted' ] 6666 unless $I1 goto __label_2 6667 $P0 = new ["String"] 6668 $P0 = $S1 6669 $S1 = $P0."unescape"("utf8") 6670 __label_2: # endif 6671 .return($S1) 6672 6673.end # getStringValue 6674 6675 6676.sub 'getLiteralInteger' :method 6677.const 'Sub' integerValue = "integerValue" 6678 getattribute $P1, self, 'owner' 6679 getattribute $P2, self, 'start' 6680 $P3 = self.'getStringValue'() 6681 .tailcall integerValue($P1, $P2, $P3) 6682 6683.end # getLiteralInteger 6684 6685 6686.sub 'getLiteralFloat' :method 6687.const 'Sub' WSubId_100 = "WSubId_100" 6688 getattribute $P1, self, 'owner' 6689 getattribute $P2, self, 'start' 6690 $P3 = self.'getStringValue'() 6691 .tailcall WSubId_100($P1, $P2, $P3) 6692 6693.end # getLiteralFloat 6694 6695 6696.sub 'getLiteralString' :method 6697 .return(self) 6698 6699.end # getLiteralString 6700 6701 6702.sub 'emit' :method 6703 .param pmc __ARG_1 6704 .param string __ARG_2 6705 $P1 = self.'getPirString'() 6706 __ARG_1.'emitset'(__ARG_2, $P1) 6707 6708.end # emit 6709 6710 6711.sub 'emit_get' :method 6712 .param pmc __ARG_1 6713 .tailcall self.'getPirString'() 6714 6715.end # emit_get 6716 6717.sub Winxed_class_init :anon :load :init 6718 newclass $P0, [ 'Winxed'; 'Compiler'; 'StringLiteral' ] 6719 get_class $P1, [ 'Winxed'; 'Compiler'; 'Literal' ] 6720 addparent $P0, $P1 6721 addattribute $P0, 'strval' 6722.end 6723.namespace [ 'Winxed'; 'Compiler' ] 6724 6725.sub 'concat_literal' :subid('WSubId_104') 6726 .param pmc __ARG_1 6727 .param pmc __ARG_2 6728 getattribute $P1, __ARG_1, 'strval' 6729 getattribute $P2, __ARG_2, 'strval' 6730 $P4 = $P1.'issinglequoted'() 6731 unless $P4 goto __label_2 6732 $P5 = $P2.'issinglequoted'() 6733 unless $P5 goto __label_2 6734 new $P6, [ 'Winxed'; 'Compiler'; 'TokenSingleQuoted' ] 6735 getattribute $P7, $P1, 'file' 6736 getattribute $P8, $P1, 'line' 6737 getattribute $P9, $P1, 'str' 6738 set $S1, $P9 6739 getattribute $P10, $P2, 'str' 6740 set $S2, $P10 6741 concat $S3, $S1, $S2 6742 $P6.'TokenSingleQuoted'($P7, $P8, $S3) 6743 set $P3, $P6 6744 goto __label_1 6745 __label_2: 6746 new $P12, [ 'Winxed'; 'Compiler'; 'TokenQuoted' ] 6747 getattribute $P13, $P1, 'file' 6748 getattribute $P14, $P1, 'line' 6749 $S4 = $P1.'getasquoted'() 6750 $S5 = $P2.'getasquoted'() 6751 concat $S6, $S4, $S5 6752 $P12.'TokenQuoted'($P13, $P14, $S6) 6753 set $P11, $P12 6754 set $P3, $P11 6755 __label_1: 6756 new $P5, [ 'Winxed'; 'Compiler'; 'StringLiteral' ] 6757 getattribute $P6, __ARG_1, 'owner' 6758 $P5.'StringLiteral'($P6, $P3) 6759 set $P4, $P5 6760 .return($P4) 6761 6762.end # concat_literal 6763 6764.namespace [ 'Winxed'; 'Compiler'; 'FunctionId' ] 6765 6766.sub 'FunctionId' :method 6767 .param pmc __ARG_1 6768 .param pmc __ARG_2 6769 .param string __ARG_3 6770 self.'Expr'(__ARG_1, __ARG_2) 6771 box $P1, __ARG_3 6772 setattribute self, 'subid', $P1 6773 6774.end # FunctionId 6775 6776 6777.sub 'checkresult' :method 6778 .return("P") 6779 6780.end # checkresult 6781 6782 6783.sub 'emitvar' :method 6784 .param pmc __ARG_1 6785 .param string __ARG_2 6786 getattribute $P1, self, 'start' 6787 root_new $P4, ['parrot';'ResizablePMCArray'] 6788 assign $P4, 1 6789 $P4[0] = $P1 6790 $P2 = self.'scopesearch'($P4, 0) 6791 getattribute $P4, $P2, 'owner' 6792 $P3 = $P4.'getpath'() 6793 self.'annotate'(__ARG_1) 6794 $P4 = $P3.'getparrotkey'() 6795 __ARG_1.'emitget_hll_global'(__ARG_2, $P1, $P4) 6796 6797.end # emitvar 6798 6799 6800.sub 'emit_get' :method 6801 .param pmc __ARG_1 6802 getattribute $P1, self, 'subid' 6803 .return($P1) 6804 6805.end # emit_get 6806 6807 6808.sub 'emit' :method 6809 .param pmc __ARG_1 6810 .param string __ARG_2 6811 self.'annotate'(__ARG_1) 6812 getattribute $P1, self, 'subid' 6813 __ARG_1.'emitset'(__ARG_2, $P1) 6814 6815.end # emit 6816 6817.sub Winxed_class_init :anon :load :init 6818 newclass $P0, [ 'Winxed'; 'Compiler'; 'FunctionId' ] 6819 get_class $P1, [ 'Winxed'; 'Compiler'; 'FinalExpr' ] 6820 addparent $P0, $P1 6821 addattribute $P0, 'subid' 6822.end 6823.namespace [ 'Winxed'; 'Compiler'; 'FunctionRef' ] 6824 6825.sub 'FunctionRef' :method 6826 .param pmc __ARG_1 6827 .param pmc __ARG_2 6828 .param pmc __ARG_3 6829 self.'Expr'(__ARG_1, __ARG_2) 6830 setattribute self, 'sym', __ARG_3 6831 6832.end # FunctionRef 6833 6834 6835.sub 'checkresult' :method 6836 .return("P") 6837 6838.end # checkresult 6839 6840 6841.sub 'emit' :method 6842 .param pmc __ARG_1 6843 .param string __ARG_2 6844 getattribute $P1, self, 'sym' 6845 getattribute $P3, $P1, 'owner' 6846 $P2 = $P3.'getpath'() 6847 self.'annotate'(__ARG_1) 6848 getattribute $P3, self, 'owner' 6849 getattribute $P4, $P1, 'name' 6850 $P2.'emit_get_global'(__ARG_1, $P3, __ARG_2, $P4) 6851 6852.end # emit 6853 6854.sub Winxed_class_init :anon :load :init 6855 newclass $P0, [ 'Winxed'; 'Compiler'; 'FunctionRef' ] 6856 get_class $P1, [ 'Winxed'; 'Compiler'; 'FinalExpr' ] 6857 addparent $P0, $P1 6858 addattribute $P0, 'sym' 6859.end 6860.namespace [ 'Winxed'; 'Compiler'; 'NullExpr' ] 6861 6862.sub 'NullExpr' :method 6863 .param pmc __ARG_1 6864 .param pmc __ARG_2 6865 self.'Expr'(__ARG_1, __ARG_2) 6866 6867.end # NullExpr 6868 6869 6870.sub 'isnull' :method 6871 .return(1) 6872 6873.end # isnull 6874 6875 6876.sub 'emit_get_nonull' :method 6877 .param pmc __ARG_1 6878.const 'Sub' SyntaxError = "SyntaxError" 6879 SyntaxError("Invalid 'null' usage", self) 6880 6881.end # emit_get_nonull 6882 6883 6884.sub 'checkresult' :method 6885 .return("P") 6886 6887.end # checkresult 6888 6889 6890.sub 'emit_void' :method 6891 .param pmc __ARG_1 6892 6893.end # emit_void 6894 6895 6896.sub 'emit' :method 6897 .param pmc __ARG_1 6898 .param string __ARG_2 6899 self.'annotate'(__ARG_1) 6900 __ARG_1.'emitnull'(__ARG_2) 6901 6902.end # emit 6903 6904.sub Winxed_class_init :anon :load :init 6905 newclass $P0, [ 'Winxed'; 'Compiler'; 'NullExpr' ] 6906 get_class $P1, [ 'Winxed'; 'Compiler'; 'FinalExpr' ] 6907 addparent $P0, $P1 6908.end 6909.namespace [ 'Winxed'; 'Compiler'; 'IdentifierExpr' ] 6910 6911.sub 'isidentifier' :method 6912 .return(1) 6913 6914.end # isidentifier 6915 6916 6917.sub 'IdentifierExpr' :method 6918 .param pmc __ARG_1 6919 .param pmc __ARG_2 6920 self.'Expr'(__ARG_1, __ARG_2) 6921 setattribute self, 'name', __ARG_2 6922 6923.end # IdentifierExpr 6924 6925 6926.sub 'clone' :method 6927 .param pmc __ARG_1 6928 new $P2, [ 'Winxed'; 'Compiler'; 'IdentifierExpr' ] 6929 getattribute $P3, self, 'name' 6930 $P2.'IdentifierExpr'(__ARG_1, $P3) 6931 set $P1, $P2 6932 .return($P1) 6933 6934.end # clone 6935 6936 6937.sub 'isnull' :method 6938 getattribute $P1, self, 'name' 6939 getattribute $P3, self, 'owner' 6940 $P2 = $P3.'getvar'($P1) 6941 if_null $P2, __label_1 6942 .return(0) 6943 __label_1: # endif 6944 .tailcall $P1.'iskeyword'("null") 6945 6946.end # isnull 6947 6948 6949.sub 'emit_get_nonull' :method 6950 .param pmc __ARG_1 6951.const 'Sub' SyntaxError = "SyntaxError" 6952 $P1 = self.'isnull'() 6953 if_null $P1, __label_1 6954 unless $P1 goto __label_1 6955 SyntaxError("Invalid 'null' usage", self) 6956 __label_1: # endif 6957 .tailcall self.'emit_get'(__ARG_1) 6958 6959.end # emit_get_nonull 6960 6961 6962.sub 'checkresult' :method 6963 getattribute $P1, self, 'name' 6964 getattribute $P3, self, 'owner' 6965 $P2 = $P3.'getvar'($P1) 6966 if_null $P2, __label_1 6967 .tailcall $P2.'gettype'() 6968 goto __label_2 6969 __label_1: # else 6970 set $S1, $P1 6971 if $S1 == "self" goto __label_5 6972 if $S1 == "null" goto __label_6 6973 goto __label_3 6974 __label_5: # case 6975 __label_6: # case 6976 .return("P") 6977 __label_3: # default 6978 .return("") 6979 __label_4: # switch end 6980 __label_2: # endif 6981 6982.end # checkresult 6983 6984 6985.sub 'getName' :method 6986 getattribute $P1, self, 'name' 6987 null $S1 6988 if_null $P1, __label_1 6989 set $S1, $P1 6990 __label_1: 6991 .return($S1) 6992 6993.end # getName 6994 6995 6996.sub 'checkVar' :method 6997 getattribute $P1, self, 'owner' 6998 getattribute $P2, self, 'name' 6999 set $S1, $P2 7000 .tailcall $P1.'getvar'($S1) 7001 7002.end # checkVar 7003 7004 7005.sub 'checkIdentifier' :method 7006.const 'Sub' InternalError = "InternalError" 7007 getattribute $P1, self, 'name' 7008 unless_null $P1, __label_1 7009 InternalError("Bad thing") 7010 __label_1: # endif 7011 getattribute $P3, self, 'owner' 7012 $P2 = $P3.'getvar'($P1) 7013 null $S1 7014 unless_null $P2, __label_2 7015 set $S2, $P1 7016 if $S2 == "self" goto __label_6 7017 if $S2 == "null" goto __label_7 7018 goto __label_4 7019 __label_6: # case 7020 __label_7: # case 7021 set $S1, $P1 7022 goto __label_5 # break 7023 __label_4: # default 7024 set $S1, "" 7025 __label_5: # switch end 7026 goto __label_3 7027 __label_2: # else 7028 $P3 = $P2.'getreg'() 7029 set $S1, $P3 7030 __label_3: # endif 7031 .return($S1) 7032 7033.end # checkIdentifier 7034 7035 7036.sub 'getIdentifier' :method 7037.const 'Sub' WSubId_102 = "WSubId_102" 7038 $P1 = self.'checkIdentifier'() 7039 set $S1, $P1 7040 ne $S1, "", __label_1 7041 getattribute $P2, self, 'name' 7042 WSubId_102($P2, self) 7043 __label_1: # endif 7044 .return($P1) 7045 7046.end # getIdentifier 7047 7048 7049.sub 'optimize' :method 7050 getattribute $P1, self, 'name' 7051 getattribute $P2, self, 'owner' 7052 $P3 = $P2.'getvar'($P1) 7053 if_null $P3, __label_1 7054 $P6 = $P3.'isconst'() 7055 if_null $P6, __label_3 7056 unless $P6 goto __label_3 7057 .tailcall $P3.'getvalue'() 7058 __label_3: # endif 7059 $P6 = $P3.'getflags'() 7060 set $I1, $P6 7061 band $I2, $I1, 1 7062 unless $I2 goto __label_4 7063 band $I3, $I1, 2 7064 unless $I3 goto __label_6 7065 new $P7, [ 'Winxed'; 'Compiler'; 'LexicalVolatileExpr' ] 7066 $P7.'LexicalVolatileExpr'(self, $P3) 7067 set $P6, $P7 7068 .return($P6) 7069 __label_6: # endif 7070 goto __label_5 7071 __label_4: # else 7072 $P4 = $P3.'getreg'() 7073 if_null $P4, __label_7 7074 set $S3, $P4 7075 substr $S2, $S3, 0, 7 7076 ne $S2, "WSubId_", __label_7 7077 new $P7, [ 'Winxed'; 'Compiler'; 'FunctionId' ] 7078 $P7.'FunctionId'($P2, $P1, $P4) 7079 set $P6, $P7 7080 .return($P6) 7081 __label_7: # endif 7082 __label_5: # endif 7083 goto __label_2 7084 __label_1: # else 7085 root_new $P6, ['parrot';'ResizablePMCArray'] 7086 assign $P6, 1 7087 $P6[0] = $P1 7088 $P5 = self.'scopesearch'($P6, 0) 7089 if_null $P5, __label_10 7090 isa $I2, $P5, [ 'Winxed'; 'Compiler'; 'FunctionStatement' ] 7091 if $I2 goto __label_11 7092 isa $I3, $P5, [ 'Winxed'; 'Compiler'; 'FunctionExtern' ] 7093 if $I3 goto __label_12 7094 isa $I4, $P5, [ 'Winxed'; 'Compiler'; 'InlineStatement' ] 7095 if $I4 goto __label_13 7096 goto __label_9 7097 __label_10: # case 7098 $P6 = $P1.'iskeyword'("null") 7099 if_null $P6, __label_14 7100 unless $P6 goto __label_14 7101 new $P8, [ 'Winxed'; 'Compiler'; 'NullExpr' ] 7102 getattribute $P9, self, 'owner' 7103 $P8.'NullExpr'($P9, $P1) 7104 set $P7, $P8 7105 .return($P7) 7106 __label_14: # endif 7107 goto __label_8 # break 7108 __label_11: # case 7109 $P10 = $P5.'ismulti'() 7110 if $P10 goto __label_15 7111 $P11 = $P5.'makesubid'() 7112 null $S1 7113 if_null $P11, __label_17 7114 set $S1, $P11 7115 __label_17: 7116 self.'usesubid'($S1) 7117 $P2.'createvarnamed'($P1, "P", $S1) 7118 new $P7, [ 'Winxed'; 'Compiler'; 'FunctionId' ] 7119 $P7.'FunctionId'($P2, $P1, $S1) 7120 set $P6, $P7 7121 .return($P6) 7122 goto __label_16 7123 __label_15: # else 7124 new $P7, [ 'Winxed'; 'Compiler'; 'FunctionRef' ] 7125 $P7.'FunctionRef'($P2, $P1, $P5) 7126 set $P6, $P7 7127 .return($P6) 7128 __label_16: # endif 7129 goto __label_8 # break 7130 __label_12: # case 7131 new $P9, [ 'Winxed'; 'Compiler'; 'FunctionRef' ] 7132 $P9.'FunctionRef'($P2, $P1, $P5) 7133 set $P8, $P9 7134 .return($P8) 7135 __label_13: # case 7136 new $P11, [ 'Winxed'; 'Compiler'; 'InlineRef' ] 7137 $P11.'InlineRef'($P2, $P1, $P5) 7138 set $P10, $P11 7139 .return($P10) 7140 __label_9: # default 7141 __label_8: # switch end 7142 __label_2: # endif 7143 .return(self) 7144 7145.end # optimize 7146 7147 7148.sub 'emit' :method 7149 .param pmc __ARG_1 7150 .param string __ARG_2 7151 $P1 = self.'emit_get'(__ARG_1) 7152 null $S1 7153 if_null $P1, __label_1 7154 set $S1, $P1 7155 __label_1: 7156 self.'annotate'(__ARG_1) 7157 __ARG_1.'emitset'(__ARG_2, $S1) 7158 7159.end # emit 7160 7161 7162.sub 'emit_void' :method 7163 .param pmc __ARG_1 7164 7165.end # emit_void 7166 7167 7168.sub 'emit_get' :method 7169 .param pmc __ARG_1 7170 null $S1 7171 $P2 = self.'getIdentifier'() 7172 set $S1, $P2 7173 getattribute $P2, self, 'owner' 7174 getattribute $P3, self, 'name' 7175 $P1 = $P2.'getvar'($P3) 7176 unless_null $P1, __label_2 7177 null $I1 7178 goto __label_1 7179 __label_2: 7180 $P2 = $P1.'getflags'() 7181 set $I1, $P2 7182 __label_1: 7183 band $I2, $I1, 1 7184 unless $I2 goto __label_3 7185 band $I3, $I1, 2 7186 unless $I3 goto __label_4 7187 $P2 = $P1.'getlex'() 7188 null $S2 7189 if_null $P2, __label_5 7190 set $S2, $P2 7191 __label_5: 7192 if_null $S2, __label_6 7193 self.'annotate'(__ARG_1) 7194 __label_6: # endif 7195 __ARG_1.'emitfind_lex'($S1, $S2) 7196 __label_4: # endif 7197 __label_3: # endif 7198 .return($S1) 7199 7200.end # emit_get 7201 7202 7203.sub 'emit_assign_get' :method 7204 .param pmc __ARG_1 7205 .param pmc __ARG_2 7206.const 'Sub' SyntaxError = "SyntaxError" 7207 self.'annotate'(__ARG_1) 7208 $P1 = self.'isnull'() 7209 if_null $P1, __label_1 7210 unless $P1 goto __label_1 7211 SyntaxError("Cannot assign to null", self) 7212 __label_1: # endif 7213 $P1 = self.'checkresult'() 7214 null $S1 7215 if_null $P1, __label_2 7216 set $S1, $P1 7217 __label_2: 7218 $P1 = self.'getIdentifier'() 7219 null $S2 7220 if_null $P1, __label_3 7221 set $S2, $P1 7222 __label_3: 7223 $P1 = __ARG_2.'isnull'() 7224 if_null $P1, __label_4 7225 unless $P1 goto __label_4 7226 if_null $S1, __label_6 7227 length $I1, $S1 7228 ne $I1, 1, __label_6 7229 ord $I1, $S1 7230 if $I1 == 83 goto __label_8 7231 if $I1 == 80 goto __label_9 7232 goto __label_6 7233 __label_8: # case 7234 __label_9: # case 7235 __ARG_1.'emitnull'($S2) 7236 goto __label_7 # break 7237 __label_6: # default 7238 SyntaxError("Can't assign null to that type", self) 7239 __label_7: # switch end 7240 goto __label_5 7241 __label_4: # else 7242 isa $I1, __ARG_2, [ 'Winxed'; 'Compiler'; 'IndexExpr' ] 7243 unless $I1 goto __label_10 7244 __ARG_2.'emit'(__ARG_1, $S2) 7245 goto __label_11 7246 __label_10: # else 7247 $P1 = __ARG_2.'checkresult'() 7248 null $S3 7249 if_null $P1, __label_12 7250 set $S3, $P1 7251 __label_12: 7252 ne $S3, "v", __label_13 7253 SyntaxError("Can't assign from void expression", self) 7254 __label_13: # endif 7255 ne $S1, $S3, __label_14 7256 __ARG_2.'emit'(__ARG_1, $S2) 7257 goto __label_15 7258 __label_14: # else 7259 $P1 = __ARG_2.'emit_get'(__ARG_1) 7260 null $S4 7261 if_null $P1, __label_16 7262 set $S4, $P1 7263 __label_16: 7264 self.'annotate'(__ARG_1) 7265 ne $S1, "P", __label_17 7266 eq $S3, "P", __label_17 7267 __ARG_1.'emitbox'($S2, $S4) 7268 goto __label_18 7269 __label_17: # else 7270 __ARG_1.'emitset'($S2, $S4) 7271 __label_18: # endif 7272 __label_15: # endif 7273 __label_11: # endif 7274 __label_5: # endif 7275 .return($S2) 7276 7277.end # emit_assign_get 7278 7279.sub Winxed_class_init :anon :load :init 7280 newclass $P0, [ 'Winxed'; 'Compiler'; 'IdentifierExpr' ] 7281 get_class $P1, [ 'Winxed'; 'Compiler'; 'SimpleExpr' ] 7282 addparent $P0, $P1 7283 addattribute $P0, 'name' 7284.end 7285.namespace [ 'Winxed'; 'Compiler'; 'LexicalVolatileExpr' ] 7286 7287.sub 'LexicalVolatileExpr' :method 7288 .param pmc __ARG_1 7289 .param pmc __ARG_2 7290 getattribute $P1, __ARG_1, 'owner' 7291 getattribute $P2, __ARG_1, 'start' 7292 self.'Expr'($P1, $P2) 7293 setattribute self, 'desc', __ARG_2 7294 7295.end # LexicalVolatileExpr 7296 7297 7298.sub 'checkresult' :method 7299 getattribute $P1, self, 'desc' 7300 .tailcall $P1.'gettype'() 7301 7302.end # checkresult 7303 7304 7305.sub 'emit_get' :method 7306 .param pmc __ARG_1 7307 getattribute $P1, self, 'desc' 7308 $P2 = $P1.'getlex'() 7309 null $S1 7310 if_null $P2, __label_1 7311 set $S1, $P2 7312 __label_1: 7313 getattribute $P3, self, 'owner' 7314 $P4 = $P1.'gettype'() 7315 $P2 = $P3.'tempreg'($P4) 7316 null $S2 7317 if_null $P2, __label_2 7318 set $S2, $P2 7319 __label_2: 7320 __ARG_1.'emitfind_lex'($S2, $S1) 7321 .return($S2) 7322 7323.end # emit_get 7324 7325 7326.sub 'emit' :method 7327 .param pmc __ARG_1 7328 .param string __ARG_2 7329 self.'annotate'(__ARG_1) 7330 $P1 = self.'emit_get'(__ARG_1) 7331 null $S1 7332 if_null $P1, __label_1 7333 set $S1, $P1 7334 __label_1: 7335 __ARG_1.'emitset'(__ARG_2, $S1) 7336 7337.end # emit 7338 7339 7340.sub 'emit_assign_get' :method 7341 .param pmc __ARG_1 7342 .param pmc __ARG_2 7343 getattribute $P1, self, 'owner' 7344 getattribute $P2, self, 'desc' 7345 $P3 = $P2.'gettype'() 7346 null $S1 7347 if_null $P3, __label_1 7348 set $S1, $P3 7349 __label_1: 7350 null $S2 7351 $P3 = __ARG_2.'isnull'() 7352 set $I1, $P3 7353 if $I1 goto __label_4 7354 isa $I2, __ARG_2, [ 'Winxed'; 'Compiler'; 'IndexExpr' ] 7355 if $I2 goto __label_5 7356 goto __label_3 7357 __label_4: # case 7358 $P4 = $P1.'tempreg'($S1) 7359 set $S2, $P4 7360 __ARG_1.'emitnull'($S2) 7361 goto __label_2 # break 7362 __label_5: # case 7363 $P5 = $P1.'tempreg'($S1) 7364 set $S2, $P5 7365 __ARG_2.'emit'(__ARG_1, $S2) 7366 goto __label_2 # break 7367 __label_3: # default 7368 ne $S1, "P", __label_6 7369 $P6 = __ARG_2.'emit_getvar'(__ARG_1) 7370 set $S2, $P6 7371 goto __label_7 7372 __label_6: # else 7373 $P7 = __ARG_2.'checkresult'() 7374 set $S3, $P7 7375 ne $S1, $S3, __label_8 7376 $P8 = __ARG_2.'emit_get'(__ARG_1) 7377 set $S2, $P8 7378 goto __label_9 7379 __label_8: # else 7380 $P9 = $P1.'tempreg'($S1) 7381 set $S2, $P9 7382 __ARG_2.'emit'(__ARG_1, $S2) 7383 __label_9: # endif 7384 __label_7: # endif 7385 __label_2: # switch end 7386 $P3 = $P2.'getlex'() 7387 __ARG_1.'emitstore_lex'($P3, $S2) 7388 .return($S2) 7389 7390.end # emit_assign_get 7391 7392 7393.sub 'emit_store' :method 7394 .param pmc __ARG_1 7395 .param string __ARG_2 7396 getattribute $P2, self, 'desc' 7397 $P1 = $P2.'getlex'() 7398 __ARG_1.'emitstore_lex'($P1, __ARG_2) 7399 7400.end # emit_store 7401 7402.sub Winxed_class_init :anon :load :init 7403 newclass $P0, [ 'Winxed'; 'Compiler'; 'LexicalVolatileExpr' ] 7404 get_class $P1, [ 'Winxed'; 'Compiler'; 'FinalExpr' ] 7405 addparent $P0, $P1 7406 addattribute $P0, 'desc' 7407.end 7408.namespace [ 'Winxed'; 'Compiler'; 'OpExpr' ] 7409 7410.sub 'initop' :method 7411 .param pmc __ARG_1 7412 .param pmc __ARG_2 7413 self.'Expr'(__ARG_1, __ARG_2) 7414 7415.end # initop 7416 7417.sub Winxed_class_init :anon :load :init 7418 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpExpr' ] 7419 get_class $P1, [ 'Winxed'; 'Compiler'; 'Expr' ] 7420 addparent $P0, $P1 7421.end 7422.namespace [ 'Winxed'; 'Compiler'; 'OpNamespaceExpr' ] 7423 7424.sub 'OpNamespaceExpr' :method 7425 .param pmc __ARG_1 7426 .param pmc __ARG_2 7427 .param pmc __ARG_3 7428.const 'Sub' parseDotted = "parseDotted" 7429.const 'Sub' Expected = "Expected" 7430 self.'initop'(__ARG_2, __ARG_3) 7431 $P2 = parseDotted(__ARG_1) 7432 setattribute self, 'key', $P2 7433 getattribute $P1, self, 'key' 7434 elements $I1, $P1 7435 if $I1 goto __label_1 7436 Expected("namespace identifier", __ARG_3) 7437 __label_1: # endif 7438 7439.end # OpNamespaceExpr 7440 7441 7442.sub 'checkresult' :method 7443 .return("P") 7444 7445.end # checkresult 7446 7447 7448.sub 'emit' :method 7449 .param pmc __ARG_1 7450 .param string __ARG_2 7451.const 'Sub' SyntaxError = "SyntaxError" 7452 getattribute $P1, self, 'owner' 7453 getattribute $P4, self, 'key' 7454 $P2 = $P1.'scopesearch'($P4, 1) 7455 unless_null $P2, __label_1 7456 SyntaxError("unknown namespace", self) 7457 __label_1: # endif 7458 $P3 = $P2.'getpath'() 7459 $P3.'emit_get_namespace'(__ARG_1, $P1, __ARG_2) 7460 7461.end # emit 7462 7463.sub Winxed_class_init :anon :load :init 7464 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpNamespaceExpr' ] 7465 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpExpr' ] 7466 addparent $P0, $P1 7467 addattribute $P0, 'key' 7468.end 7469.namespace [ 'Winxed'; 'Compiler'; 'OpClassExpr' ] 7470 7471.sub 'OpClassExpr' :method 7472 .param pmc __ARG_1 7473 .param pmc __ARG_2 7474 .param pmc __ARG_3 7475.const 'Sub' WSubId_103 = "WSubId_103" 7476 self.'initop'(__ARG_2, __ARG_3) 7477 $P2 = WSubId_103(__ARG_1, __ARG_2) 7478 setattribute self, 'clspec', $P2 7479 7480.end # OpClassExpr 7481 7482 7483.sub 'checkresult' :method 7484 .return("P") 7485 7486.end # checkresult 7487 7488 7489.sub 'get_class_raw_key' :method 7490.const 'Sub' SyntaxError = "SyntaxError" 7491.const 'Sub' InternalError = "InternalError" 7492 getattribute $P1, self, 'owner' 7493 getattribute $P2, self, 'clspec' 7494 null $P3 7495 isa $I1, $P2, [ 'Winxed'; 'Compiler'; 'ClassSpecifierId' ] 7496 if $I1 goto __label_3 7497 isa $I2, $P2, [ 'Winxed'; 'Compiler'; 'ClassSpecifierParrotKey' ] 7498 if $I2 goto __label_4 7499 isa $I3, $P2, [ 'Winxed'; 'Compiler'; 'ClassSpecifier' ] 7500 if $I3 goto __label_5 7501 goto __label_2 7502 __label_3: # case 7503 $P3 = $P2.'checknskey'($P1) 7504 if_null $P3, __label_7 7505 getattribute $P4, $P3, 'path' 7506 goto __label_6 7507 __label_7: 7508 null $P4 7509 __label_6: 7510 .return($P4) 7511 __label_4: # case 7512 $P3 = $P2.'checknskey'($P1) 7513 if_null $P3, __label_9 7514 getattribute $P5, $P3, 'path' 7515 goto __label_8 7516 __label_9: 7517 null $P5 7518 __label_8: 7519 .return($P5) 7520 __label_5: # case 7521 typeof $P6, $P2 7522 set $S1, $P6 7523 concat $S2, $S1, " not supported yet here" 7524 getattribute $P7, $P2, 'start' 7525 SyntaxError($S2, $P7) 7526 __label_2: # default 7527 __label_1: # switch end 7528 getattribute $P4, $P2, 'start' 7529 InternalError("Unexpected class key", $P4) 7530 7531.end # get_class_raw_key 7532 7533 7534.sub 'emit' :method 7535 .param pmc __ARG_1 7536 .param string __ARG_2 7537 getattribute $P1, self, 'owner' 7538 getattribute $P2, self, 'clspec' 7539 isa $I1, $P2, [ 'Winxed'; 'Compiler'; 'ClassSpecifierId' ] 7540 if $I1 goto __label_3 7541 goto __label_2 7542 __label_3: # case 7543 $P3 = $P2.'checknskey'($P1) 7544 if_null $P3, __label_4 7545 $P3.'emit_get_class'(__ARG_1, $P1, __ARG_2) 7546 .return() 7547 __label_4: # endif 7548 goto __label_1 # break 7549 __label_2: # default 7550 __label_1: # switch end 7551 __ARG_1.'print'(" get_class ", __ARG_2, ", ") 7552 getattribute $P4, self, 'owner' 7553 $P2.'emit'(__ARG_1, $P4) 7554 __ARG_1.'say'() 7555 7556.end # emit 7557 7558.sub Winxed_class_init :anon :load :init 7559 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpClassExpr' ] 7560 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpExpr' ] 7561 addparent $P0, $P1 7562 addattribute $P0, 'clspec' 7563.end 7564.namespace [ 'Winxed'; 'Compiler'; 'OpUnaryExpr' ] 7565 7566.sub 'OpUnaryExpr' :method 7567 .param pmc __ARG_1 7568 .param pmc __ARG_2 7569 .param pmc __ARG_3 7570 self.'initop'(__ARG_1, __ARG_2) 7571 setattribute self, 'subexpr', __ARG_3 7572 7573.end # OpUnaryExpr 7574 7575 7576.sub 'cloneunary' :method 7577 .param pmc __ARG_1 7578 .param pmc __ARG_2 7579 getattribute $P1, self, 'start' 7580 getattribute $P3, self, 'subexpr' 7581 $P2 = $P3.'clone'(__ARG_2) 7582 __ARG_1.'OpUnaryExpr'(__ARG_2, $P1, $P2) 7583 .return(__ARG_1) 7584 7585.end # cloneunary 7586 7587 7588.sub 'optimizearg' :method 7589 getattribute $P3, self, 'subexpr' 7590 $P2 = $P3.'optimize'() 7591 setattribute self, 'subexpr', $P2 7592 7593.end # optimizearg 7594 7595 7596.sub 'optimize' :method 7597 self.'optimizearg'() 7598 .return(self) 7599 7600.end # optimize 7601 7602.sub Winxed_class_init :anon :load :init 7603 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpUnaryExpr' ] 7604 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpExpr' ] 7605 addparent $P0, $P1 7606 addattribute $P0, 'subexpr' 7607.end 7608.namespace [ 'Winxed'; 'Compiler'; 'OpBinaryExpr' ] 7609 7610.sub 'initbinary' :method 7611 .param pmc __ARG_1 7612 .param pmc __ARG_2 7613 .param pmc __ARG_3 7614 .param pmc __ARG_4 7615 self.'initop'(__ARG_1, __ARG_2) 7616 setattribute self, 'lexpr', __ARG_3 7617 setattribute self, 'rexpr', __ARG_4 7618 7619.end # initbinary 7620 7621 7622.sub 'set' :method 7623 .param pmc __ARG_1 7624 .param pmc __ARG_2 7625 .param pmc __ARG_3 7626 .param pmc __ARG_4 7627 self.'initbinary'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 7628 .return(self) 7629 7630.end # set 7631 7632 7633.sub 'clonebinary' :method 7634 .param pmc __ARG_1 7635 .param pmc __ARG_2 7636 getattribute $P1, self, 'start' 7637 getattribute $P3, self, 'lexpr' 7638 $P2 = $P3.'clone'(__ARG_2) 7639 getattribute $P5, self, 'rexpr' 7640 $P4 = $P5.'clone'(__ARG_2) 7641 __ARG_1.'initbinary'(__ARG_2, $P1, $P2, $P4) 7642 .return(__ARG_1) 7643 7644.end # clonebinary 7645 7646 7647.sub 'setfrom' :method 7648 .param pmc __ARG_1 7649 getattribute $P1, __ARG_1, 'owner' 7650 getattribute $P2, __ARG_1, 'start' 7651 getattribute $P3, __ARG_1, 'lexpr' 7652 getattribute $P4, __ARG_1, 'rexpr' 7653 .tailcall self.'set'($P1, $P2, $P3, $P4) 7654 7655.end # setfrom 7656 7657 7658.sub 'optimizearg' :method 7659 getattribute $P3, self, 'lexpr' 7660 $P2 = $P3.'optimize'() 7661 setattribute self, 'lexpr', $P2 7662 getattribute $P3, self, 'rexpr' 7663 $P2 = $P3.'optimize'() 7664 setattribute self, 'rexpr', $P2 7665 7666.end # optimizearg 7667 7668 7669.sub 'optimize' :method 7670 self.'optimizearg'() 7671 .return(self) 7672 7673.end # optimize 7674 7675 7676.sub 'emit_intleft' :method 7677 .param pmc __ARG_1 7678 getattribute $P1, self, 'lexpr' 7679 .tailcall $P1.'emit_getint'(__ARG_1) 7680 7681.end # emit_intleft 7682 7683 7684.sub 'emit_intright' :method 7685 .param pmc __ARG_1 7686 getattribute $P1, self, 'rexpr' 7687 .tailcall $P1.'emit_getint'(__ARG_1) 7688 7689.end # emit_intright 7690 7691.sub Winxed_class_init :anon :load :init 7692 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpBinaryExpr' ] 7693 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpExpr' ] 7694 addparent $P0, $P1 7695 addattribute $P0, 'lexpr' 7696 addattribute $P0, 'rexpr' 7697.end 7698.namespace [ 'Winxed'; 'Compiler'; 'OpBinaryIntExpr' ] 7699 7700.sub 'checkresult' :method 7701 .return("I") 7702 7703.end # checkresult 7704 7705 7706.sub 'optimize' :method 7707.const 'Sub' integerValue = "integerValue" 7708 self.'optimizearg'() 7709 getattribute $P1, self, 'lexpr' 7710 getattribute $P2, self, 'rexpr' 7711 $P3 = $P1.'isintegerliteral'() 7712 unless $P3 goto __label_1 7713 $P4 = $P2.'isintegerliteral'() 7714 unless $P4 goto __label_1 7715 $P5 = $P1.'getIntegerValue'() 7716 set $I1, $P5 7717 $P3 = $P2.'getIntegerValue'() 7718 set $I2, $P3 7719 getattribute $P3, self, 'owner' 7720 getattribute $P4, self, 'start' 7721 $P5 = self.'do_op'($I1, $I2) 7722 .tailcall integerValue($P3, $P4, $P5) 7723 __label_1: # endif 7724 .return(self) 7725 7726.end # optimize 7727 7728.sub Winxed_class_init :anon :load :init 7729 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpBinaryIntExpr' ] 7730 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBinaryExpr' ] 7731 addparent $P0, $P1 7732.end 7733.namespace [ 'Winxed'; 'Compiler'; 'OpDelExBase' ] 7734 7735.sub 'checkresult' :method 7736 .return("I") 7737 7738.end # checkresult 7739 7740 7741.sub 'optimize' :method 7742.const 'Sub' SyntaxError = "SyntaxError" 7743 self.'optimizearg'() 7744 getattribute $P1, self, 'subexpr' 7745 isa $I2, $P1, [ 'Winxed'; 'Compiler'; 'IndexExpr' ] 7746 not $I1, $I2 7747 if $I1 goto __label_2 7748 $P2 = $P1.'checkresult'() 7749 set $S1, $P2 7750 iseq $I1, $S1, "S" 7751 __label_2: 7752 unless $I1 goto __label_1 7753 SyntaxError("invalid operand", self) 7754 __label_1: # endif 7755 .return(self) 7756 7757.end # optimize 7758 7759.sub Winxed_class_init :anon :load :init 7760 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpDelExBase' ] 7761 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpUnaryExpr' ] 7762 addparent $P0, $P1 7763.end 7764.namespace [ 'Winxed'; 'Compiler'; 'OpDeleteExpr' ] 7765 7766.sub 'OpDeleteExpr' :method 7767 .param pmc __ARG_1 7768 .param pmc __ARG_2 7769 .param pmc __ARG_3 7770 self.'OpUnaryExpr'(__ARG_1, __ARG_2, __ARG_3) 7771 7772.end # OpDeleteExpr 7773 7774 7775.sub 'emit_void' :method 7776 .param pmc __ARG_1 7777 getattribute $P1, self, 'subexpr' 7778 $P1.'emit_prep'(__ARG_1) 7779 self.'annotate'(__ARG_1) 7780 __ARG_1.'print'(" delete ") 7781 $P1.'emit_aux'(__ARG_1) 7782 __ARG_1.'say'() 7783 7784.end # emit_void 7785 7786 7787.sub 'emit' :method 7788 .param pmc __ARG_1 7789 .param string __ARG_2 7790 self.'emit_void'(__ARG_1) 7791 __ARG_1.'emitset'(__ARG_2, "1") 7792 7793.end # emit 7794 7795.sub Winxed_class_init :anon :load :init 7796 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpDeleteExpr' ] 7797 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpDelExBase' ] 7798 addparent $P0, $P1 7799.end 7800.namespace [ 'Winxed'; 'Compiler'; 'OpExistsExpr' ] 7801 7802.sub 'OpExistsExpr' :method 7803 .param pmc __ARG_1 7804 .param pmc __ARG_2 7805 .param pmc __ARG_3 7806 self.'OpUnaryExpr'(__ARG_1, __ARG_2, __ARG_3) 7807 7808.end # OpExistsExpr 7809 7810 7811.sub 'emit' :method 7812 .param pmc __ARG_1 7813 .param string __ARG_2 7814 getattribute $P1, self, 'subexpr' 7815 $P1.'emit_prep'(__ARG_1) 7816 self.'annotate'(__ARG_1) 7817 __ARG_1.'print'(" exists ", __ARG_2, ", ") 7818 $P1.'emit_aux'(__ARG_1) 7819 __ARG_1.'say'() 7820 7821.end # emit 7822 7823.sub Winxed_class_init :anon :load :init 7824 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpExistsExpr' ] 7825 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpDelExBase' ] 7826 addparent $P0, $P1 7827.end 7828.namespace [ 'Winxed'; 'Compiler'; 'OpDefinedExpr' ] 7829 7830.sub 'OpDefinedExpr' :method 7831 .param pmc __ARG_1 7832 .param pmc __ARG_2 7833 .param pmc __ARG_3 7834 self.'OpUnaryExpr'(__ARG_1, __ARG_2, __ARG_3) 7835 7836.end # OpDefinedExpr 7837 7838 7839.sub 'optimize' :method 7840.const 'Sub' SyntaxError = "SyntaxError" 7841 self.'optimizearg'() 7842 getattribute $P1, self, 'subexpr' 7843 $P3 = $P1.'checkresult'() 7844 set $S1, $P3 7845 isne $I1, $S1, "P" 7846 box $P2, $I1 7847 if $P2 goto __label_2 7848 $P2 = $P1.'isnull'() 7849 __label_2: 7850 if_null $P2, __label_1 7851 unless $P2 goto __label_1 7852 SyntaxError("invalid operand", self) 7853 __label_1: # endif 7854 .return(self) 7855 7856.end # optimize 7857 7858 7859.sub 'emit' :method 7860 .param pmc __ARG_1 7861 .param string __ARG_2 7862 getattribute $P1, self, 'subexpr' 7863 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'IndexExpr' ] 7864 unless $I1 goto __label_1 7865 $P1.'emit_prep'(__ARG_1) 7866 self.'annotate'(__ARG_1) 7867 __ARG_1.'print'(" defined ", __ARG_2, ", ") 7868 $P1.'emit_aux'(__ARG_1) 7869 __ARG_1.'say'() 7870 goto __label_2 7871 __label_1: # else 7872 $P2 = $P1.'emit_get'(__ARG_1) 7873 null $S1 7874 if_null $P2, __label_3 7875 set $S1, $P2 7876 __label_3: 7877 __ARG_1.'say'(" defined ", __ARG_2, ", ", $S1) 7878 __label_2: # endif 7879 7880.end # emit 7881 7882.sub Winxed_class_init :anon :load :init 7883 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpDefinedExpr' ] 7884 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpDelExBase' ] 7885 addparent $P0, $P1 7886.end 7887.namespace [ 'Winxed'; 'Compiler'; 'OpUnaryMinusExpr' ] 7888 7889.sub 'OpUnaryMinusExpr' :method 7890 .param pmc __ARG_1 7891 .param pmc __ARG_2 7892 .param pmc __ARG_3 7893 self.'OpUnaryExpr'(__ARG_1, __ARG_2, __ARG_3) 7894 7895.end # OpUnaryMinusExpr 7896 7897 7898.sub 'clone' :method 7899 .param pmc __ARG_1 7900 new $P1, [ 'Winxed'; 'Compiler'; 'OpUnaryMinusExpr' ] 7901 .tailcall self.'cloneunary'($P1, __ARG_1) 7902 7903.end # clone 7904 7905 7906.sub 'checkresult' :method 7907 getattribute $P1, self, 'subexpr' 7908 .tailcall $P1.'checkresult'() 7909 7910.end # checkresult 7911 7912 7913.sub 'set' :method 7914 .param pmc __ARG_1 7915 .param pmc __ARG_2 7916 .param pmc __ARG_3 7917 self.'OpUnaryExpr'(__ARG_1, __ARG_2, __ARG_3) 7918 .return(self) 7919 7920.end # set 7921 7922 7923.sub 'optimize' :method 7924.const 'Sub' integerValue = "integerValue" 7925.const 'Sub' WSubId_100 = "WSubId_100" 7926 getattribute $P1, self, 'subexpr' 7927 self.'optimizearg'() 7928 $P2 = $P1.'isintegerliteral'() 7929 if_null $P2, __label_1 7930 unless $P2 goto __label_1 7931 $P3 = $P1.'getIntegerValue'() 7932 set $I1, $P3 7933 getattribute $P2, self, 'owner' 7934 getattribute $P3, $P1, 'start' 7935 neg $I2, $I1 7936 .tailcall integerValue($P2, $P3, $I2) 7937 __label_1: # endif 7938 $P2 = $P1.'isfloatliteral'() 7939 if_null $P2, __label_2 7940 unless $P2 goto __label_2 7941 $P3 = $P1.'getFloatValue'() 7942 set $N1, $P3 7943 getattribute $P2, self, 'owner' 7944 getattribute $P3, $P1, 'start' 7945 neg $N2, $N1 7946 .tailcall WSubId_100($P2, $P3, $N2) 7947 __label_2: # endif 7948 .return(self) 7949 7950.end # optimize 7951 7952 7953.sub 'emit' :method 7954 .param pmc __ARG_1 7955 .param string __ARG_2 7956 getattribute $P2, self, 'subexpr' 7957 $P1 = $P2.'emit_get'(__ARG_1) 7958 null $S1 7959 if_null $P1, __label_1 7960 set $S1, $P1 7961 __label_1: 7962 self.'annotate'(__ARG_1) 7963 __ARG_1.'emitarg2'("neg", __ARG_2, $S1) 7964 7965.end # emit 7966 7967.sub Winxed_class_init :anon :load :init 7968 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpUnaryMinusExpr' ] 7969 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpUnaryExpr' ] 7970 addparent $P0, $P1 7971.end 7972.namespace [ 'Winxed'; 'Compiler'; 'OpNotExpr' ] 7973 7974.sub 'OpNotExpr' :method 7975 .param pmc __ARG_1 7976 .param pmc __ARG_2 7977 .param pmc __ARG_3 7978 self.'OpUnaryExpr'(__ARG_1, __ARG_2, __ARG_3) 7979 7980.end # OpNotExpr 7981 7982 7983.sub 'clone' :method 7984 .param pmc __ARG_1 7985 new $P1, [ 'Winxed'; 'Compiler'; 'OpNotExpr' ] 7986 .tailcall self.'cloneunary'($P1, __ARG_1) 7987 7988.end # clone 7989 7990 7991.sub 'isnegable' :method 7992 .return(1) 7993 7994.end # isnegable 7995 7996 7997.sub 'checkresult' :method 7998 .return("I") 7999 8000.end # checkresult 8001 8002 8003.sub 'set' :method 8004 .param pmc __ARG_1 8005 .param pmc __ARG_2 8006 .param pmc __ARG_3 8007 self.'OpUnaryExpr'(__ARG_1, __ARG_2, __ARG_3) 8008 .return(self) 8009 8010.end # set 8011 8012 8013.sub 'optimize' :method 8014.const 'Sub' integerValue = "integerValue" 8015 self.'optimizearg'() 8016 getattribute $P1, self, 'subexpr' 8017 $P2 = $P1.'isintegerliteral'() 8018 if_null $P2, __label_1 8019 unless $P2 goto __label_1 8020 $P3 = $P1.'getIntegerValue'() 8021 set $I1, $P3 8022 getattribute $P2, self, 'owner' 8023 getattribute $P3, $P1, 'start' 8024 not $I2, $I1 8025 .tailcall integerValue($P2, $P3, $I2) 8026 __label_1: # endif 8027 $P2 = $P1.'isnegable'() 8028 if_null $P2, __label_2 8029 unless $P2 goto __label_2 8030 .tailcall $P1.'negated'() 8031 __label_2: # endif 8032 .return(self) 8033 8034.end # optimize 8035 8036 8037.sub 'negated' :method 8038 getattribute $P1, self, 'subexpr' 8039 .return($P1) 8040 8041.end # negated 8042 8043 8044.sub 'emit' :method 8045 .param pmc __ARG_1 8046 .param string __ARG_2 8047 getattribute $P1, self, 'subexpr' 8048 $P2 = $P1.'emit_get'(__ARG_1) 8049 null $S1 8050 if_null $P2, __label_1 8051 set $S1, $P2 8052 __label_1: 8053 self.'annotate'(__ARG_1) 8054 $P2 = $P1.'checkresult'() 8055 set $S3, $P2 8056 if_null $S3, __label_2 8057 length $I1, $S3 8058 ne $I1, 1, __label_2 8059 ord $I1, $S3 8060 if $I1 == 73 goto __label_4 8061 if $I1 == 83 goto __label_5 8062 if $I1 == 80 goto __label_6 8063 goto __label_2 8064 __label_4: # case 8065 __ARG_1.'emitarg2'("not", __ARG_2, $S1) 8066 goto __label_3 # break 8067 __label_5: # case 8068 __ARG_1.'emitset'(__ARG_2, 0) 8069 $P3 = self.'genlabel'() 8070 null $S2 8071 if_null $P3, __label_7 8072 set $S2, $P3 8073 __label_7: 8074 __ARG_1.'emitif'($S1, $S2) 8075 __ARG_1.'emitinc'(__ARG_2) 8076 __ARG_1.'emitlabel'($S2) 8077 goto __label_3 # break 8078 __label_6: # case 8079 __ARG_1.'emitarg2'("isfalse", __ARG_2, $S1) 8080 goto __label_3 # break 8081 __label_2: # default 8082 __ARG_1.'emitarg2'("isfalse", __ARG_2, $S1) 8083 __label_3: # switch end 8084 8085.end # emit 8086 8087 8088.sub 'emit_if' :method 8089 .param pmc __ARG_1 8090 .param string __ARG_2 8091 getattribute $P2, self, 'subexpr' 8092 $P1 = $P2.'emit_get'(__ARG_1) 8093 null $S1 8094 if_null $P1, __label_1 8095 set $S1, $P1 8096 __label_1: 8097 self.'annotate'(__ARG_1) 8098 __ARG_1.'emitunless'($S1, __ARG_2) 8099 8100.end # emit_if 8101 8102 8103.sub 'emit_else' :method 8104 .param pmc __ARG_1 8105 .param string __ARG_2 8106 getattribute $P2, self, 'subexpr' 8107 $P1 = $P2.'emit_get'(__ARG_1) 8108 null $S1 8109 if_null $P1, __label_1 8110 set $S1, $P1 8111 __label_1: 8112 self.'annotate'(__ARG_1) 8113 __ARG_1.'emitif'($S1, __ARG_2) 8114 8115.end # emit_else 8116 8117.sub Winxed_class_init :anon :load :init 8118 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpNotExpr' ] 8119 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpUnaryExpr' ] 8120 addparent $P0, $P1 8121 get_class $P2, [ 'Winxed'; 'Compiler'; 'ConditionFriendlyExpr' ] 8122 addparent $P0, $P2 8123.end 8124.namespace [ 'Winxed'; 'Compiler'; 'OpBinNotExpr' ] 8125 8126.sub 'OpBinNotExpr' :method 8127 .param pmc __ARG_1 8128 .param pmc __ARG_2 8129 .param pmc __ARG_3 8130 self.'OpUnaryExpr'(__ARG_1, __ARG_2, __ARG_3) 8131 8132.end # OpBinNotExpr 8133 8134 8135.sub 'clone' :method 8136 .param pmc __ARG_1 8137 new $P1, [ 'Winxed'; 'Compiler'; 'OpBinNotExpr' ] 8138 .tailcall self.'cloneunary'($P1, __ARG_1) 8139 8140.end # clone 8141 8142 8143.sub 'checkresult' :method 8144 .return("I") 8145 8146.end # checkresult 8147 8148 8149.sub 'set' :method 8150 .param pmc __ARG_1 8151 .param pmc __ARG_2 8152 .param pmc __ARG_3 8153 self.'OpUnaryExpr'(__ARG_1, __ARG_2, __ARG_3) 8154 .return(self) 8155 8156.end # set 8157 8158 8159.sub 'optimize' :method 8160.const 'Sub' integerValue = "integerValue" 8161 self.'optimizearg'() 8162 getattribute $P1, self, 'subexpr' 8163 $P2 = $P1.'isintegerliteral'() 8164 if_null $P2, __label_1 8165 unless $P2 goto __label_1 8166 $P3 = $P1.'getIntegerValue'() 8167 set $I1, $P3 8168 getattribute $P2, self, 'owner' 8169 getattribute $P3, $P1, 'start' 8170 bxor $I2, $I1, -1 8171 .tailcall integerValue($P2, $P3, $I2) 8172 __label_1: # endif 8173 .return(self) 8174 8175.end # optimize 8176 8177 8178.sub 'emit' :method 8179 .param pmc __ARG_1 8180 .param string __ARG_2 8181 getattribute $P1, self, 'subexpr' 8182 $P2 = $P1.'emit_getint'(__ARG_1) 8183 null $S1 8184 if_null $P2, __label_1 8185 set $S1, $P2 8186 __label_1: 8187 self.'annotate'(__ARG_1) 8188 __ARG_1.'emitarg3'("bxor", __ARG_2, $S1, -1) 8189 8190.end # emit 8191 8192.sub Winxed_class_init :anon :load :init 8193 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpBinNotExpr' ] 8194 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpUnaryExpr' ] 8195 addparent $P0, $P1 8196.end 8197.namespace [ 'Winxed'; 'Compiler'; 'OpIncDec' ] 8198 8199.sub 'checkresult' :method 8200 getattribute $P1, self, 'subexpr' 8201 .tailcall $P1.'checkresult'() 8202 8203.end # checkresult 8204 8205 8206.sub 'iflexical' :method 8207 .param pmc __ARG_1 8208 .param string __ARG_2 8209 getattribute $P1, self, 'subexpr' 8210 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'LexicalVolatileExpr' ] 8211 unless $I1 goto __label_1 8212 $P1.'emit_store'(__ARG_1, __ARG_2) 8213 __label_1: # endif 8214 8215.end # iflexical 8216 8217.sub Winxed_class_init :anon :load :init 8218 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpIncDec' ] 8219 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpUnaryExpr' ] 8220 addparent $P0, $P1 8221.end 8222.namespace [ 'Winxed'; 'Compiler'; 'OpPreIncDec' ] 8223 8224.sub 'emit' :method 8225 .param pmc __ARG_1 8226 .param string __ARG_2 8227 $P1 = self.'emit_get'(__ARG_1) 8228 null $S1 8229 if_null $P1, __label_1 8230 set $S1, $P1 8231 __label_1: 8232 __ARG_1.'emitset'(__ARG_2, $S1) 8233 8234.end # emit 8235 8236 8237.sub 'emit_void' :method 8238 .param pmc __ARG_1 8239 self.'emit_get'(__ARG_1) 8240 8241.end # emit_void 8242 8243.sub Winxed_class_init :anon :load :init 8244 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpPreIncDec' ] 8245 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpIncDec' ] 8246 addparent $P0, $P1 8247.end 8248.namespace [ 'Winxed'; 'Compiler'; 'OpPreIncExpr' ] 8249 8250.sub 'OpPreIncExpr' :method 8251 .param pmc __ARG_1 8252 .param pmc __ARG_2 8253 .param pmc __ARG_3 8254 self.'OpUnaryExpr'(__ARG_1, __ARG_2, __ARG_3) 8255 8256.end # OpPreIncExpr 8257 8258 8259.sub 'clone' :method 8260 .param pmc __ARG_1 8261 new $P1, [ 'Winxed'; 'Compiler'; 'OpPreIncExpr' ] 8262 .tailcall self.'cloneunary'($P1, __ARG_1) 8263 8264.end # clone 8265 8266 8267.sub 'emit_get' :method 8268 .param pmc __ARG_1 8269 getattribute $P2, self, 'subexpr' 8270 $P1 = $P2.'emit_get'(__ARG_1) 8271 null $S1 8272 if_null $P1, __label_1 8273 set $S1, $P1 8274 __label_1: 8275 self.'annotate'(__ARG_1) 8276 __ARG_1.'emitinc'($S1) 8277 self.'iflexical'(__ARG_1, $S1) 8278 .return($S1) 8279 8280.end # emit_get 8281 8282.sub Winxed_class_init :anon :load :init 8283 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpPreIncExpr' ] 8284 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpPreIncDec' ] 8285 addparent $P0, $P1 8286.end 8287.namespace [ 'Winxed'; 'Compiler'; 'OpPreDecExpr' ] 8288 8289.sub 'OpPreDecExpr' :method 8290 .param pmc __ARG_1 8291 .param pmc __ARG_2 8292 .param pmc __ARG_3 8293 self.'OpUnaryExpr'(__ARG_1, __ARG_2, __ARG_3) 8294 8295.end # OpPreDecExpr 8296 8297 8298.sub 'clone' :method 8299 .param pmc __ARG_1 8300 new $P1, [ 'Winxed'; 'Compiler'; 'OpPreDecExpr' ] 8301 .tailcall self.'cloneunary'($P1, __ARG_1) 8302 8303.end # clone 8304 8305 8306.sub 'emit_get' :method 8307 .param pmc __ARG_1 8308 getattribute $P2, self, 'subexpr' 8309 $P1 = $P2.'emit_get'(__ARG_1) 8310 null $S1 8311 if_null $P1, __label_1 8312 set $S1, $P1 8313 __label_1: 8314 self.'annotate'(__ARG_1) 8315 __ARG_1.'emitdec'($S1) 8316 self.'iflexical'(__ARG_1, $S1) 8317 .return($S1) 8318 8319.end # emit_get 8320 8321.sub Winxed_class_init :anon :load :init 8322 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpPreDecExpr' ] 8323 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpPreIncDec' ] 8324 addparent $P0, $P1 8325.end 8326.namespace [ 'Winxed'; 'Compiler'; 'OpPostIncExpr' ] 8327 8328.sub 'OpPostIncExpr' :method 8329 .param pmc __ARG_1 8330 .param pmc __ARG_2 8331 .param pmc __ARG_3 8332 self.'OpUnaryExpr'(__ARG_1, __ARG_2, __ARG_3) 8333 8334.end # OpPostIncExpr 8335 8336 8337.sub 'clone' :method 8338 .param pmc __ARG_1 8339 new $P1, [ 'Winxed'; 'Compiler'; 'OpPostIncExpr' ] 8340 .tailcall self.'cloneunary'($P1, __ARG_1) 8341 8342.end # clone 8343 8344 8345.sub 'emit' :method 8346 .param pmc __ARG_1 8347 .param string __ARG_2 8348 getattribute $P2, self, 'subexpr' 8349 $P1 = $P2.'emit_get'(__ARG_1) 8350 null $S1 8351 if_null $P1, __label_1 8352 set $S1, $P1 8353 __label_1: 8354 self.'annotate'(__ARG_1) 8355 $P1 = self.'checkresult'() 8356 set $S3, $P1 8357 ne $S3, "P", __label_2 8358 $P2 = self.'tempreg'("P") 8359 null $S2 8360 if_null $P2, __label_4 8361 set $S2, $P2 8362 __label_4: 8363 __ARG_1.'emitarg2'("clone", $S2, $S1) 8364 __ARG_1.'emitset'(__ARG_2, $S2) 8365 goto __label_3 8366 __label_2: # else 8367 __ARG_1.'emitset'(__ARG_2, $S1) 8368 __label_3: # endif 8369 __ARG_1.'emitinc'($S1) 8370 self.'iflexical'(__ARG_1, $S1) 8371 8372.end # emit 8373 8374 8375.sub 'emit_get' :method 8376 .param pmc __ARG_1 8377 getattribute $P2, self, 'subexpr' 8378 $P1 = $P2.'emit_get'(__ARG_1) 8379 null $S1 8380 if_null $P1, __label_1 8381 set $S1, $P1 8382 __label_1: 8383 self.'annotate'(__ARG_1) 8384 $P2 = self.'checkresult'() 8385 $P1 = self.'tempreg'($P2) 8386 null $S2 8387 if_null $P1, __label_2 8388 set $S2, $P1 8389 __label_2: 8390 $P1 = self.'checkresult'() 8391 set $S3, $P1 8392 ne $S3, "P", __label_3 8393 __ARG_1.'emitarg2'("clone", $S2, $S1) 8394 goto __label_4 8395 __label_3: # else 8396 __ARG_1.'emitset'($S2, $S1) 8397 __label_4: # endif 8398 __ARG_1.'emitinc'($S1) 8399 self.'iflexical'(__ARG_1, $S1) 8400 .return($S2) 8401 8402.end # emit_get 8403 8404 8405.sub 'emit_void' :method 8406 .param pmc __ARG_1 8407 getattribute $P2, self, 'subexpr' 8408 $P1 = $P2.'emit_get'(__ARG_1) 8409 null $S1 8410 if_null $P1, __label_1 8411 set $S1, $P1 8412 __label_1: 8413 self.'annotate'(__ARG_1) 8414 __ARG_1.'emitinc'($S1) 8415 self.'iflexical'(__ARG_1, $S1) 8416 8417.end # emit_void 8418 8419.sub Winxed_class_init :anon :load :init 8420 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpPostIncExpr' ] 8421 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpIncDec' ] 8422 addparent $P0, $P1 8423.end 8424.namespace [ 'Winxed'; 'Compiler'; 'OpPostDecExpr' ] 8425 8426.sub 'OpPostDecExpr' :method 8427 .param pmc __ARG_1 8428 .param pmc __ARG_2 8429 .param pmc __ARG_3 8430 self.'OpUnaryExpr'(__ARG_1, __ARG_2, __ARG_3) 8431 8432.end # OpPostDecExpr 8433 8434 8435.sub 'clone' :method 8436 .param pmc __ARG_1 8437 new $P1, [ 'Winxed'; 'Compiler'; 'OpPostDecExpr' ] 8438 .tailcall self.'cloneunary'($P1, __ARG_1) 8439 8440.end # clone 8441 8442 8443.sub 'emit' :method 8444 .param pmc __ARG_1 8445 .param string __ARG_2 8446 getattribute $P2, self, 'subexpr' 8447 $P1 = $P2.'emit_get'(__ARG_1) 8448 null $S1 8449 if_null $P1, __label_1 8450 set $S1, $P1 8451 __label_1: 8452 self.'annotate'(__ARG_1) 8453 $P1 = self.'checkresult'() 8454 set $S3, $P1 8455 ne $S3, "P", __label_2 8456 $P2 = self.'tempreg'("P") 8457 null $S2 8458 if_null $P2, __label_4 8459 set $S2, $P2 8460 __label_4: 8461 __ARG_1.'emitarg2'("clone", $S2, $S1) 8462 __ARG_1.'emitset'(__ARG_2, $S2) 8463 goto __label_3 8464 __label_2: # else 8465 __ARG_1.'emitset'(__ARG_2, $S1) 8466 __label_3: # endif 8467 __ARG_1.'emitdec'($S1) 8468 self.'iflexical'(__ARG_1, $S1) 8469 .return($S1) 8470 8471.end # emit 8472 8473 8474.sub 'emit_get' :method 8475 .param pmc __ARG_1 8476 getattribute $P2, self, 'subexpr' 8477 $P1 = $P2.'emit_get'(__ARG_1) 8478 null $S1 8479 if_null $P1, __label_1 8480 set $S1, $P1 8481 __label_1: 8482 self.'annotate'(__ARG_1) 8483 $P2 = self.'checkresult'() 8484 $P1 = self.'tempreg'($P2) 8485 null $S2 8486 if_null $P1, __label_2 8487 set $S2, $P1 8488 __label_2: 8489 $P1 = self.'checkresult'() 8490 set $S3, $P1 8491 ne $S3, "P", __label_3 8492 __ARG_1.'emitarg2'("clone", $S2, $S1) 8493 goto __label_4 8494 __label_3: # else 8495 __ARG_1.'emitset'($S2, $S1) 8496 __label_4: # endif 8497 __ARG_1.'emitdec'($S1) 8498 self.'iflexical'(__ARG_1, $S1) 8499 .return($S2) 8500 8501.end # emit_get 8502 8503 8504.sub 'emit_void' :method 8505 .param pmc __ARG_1 8506 getattribute $P2, self, 'subexpr' 8507 $P1 = $P2.'emit_get'(__ARG_1) 8508 null $S1 8509 if_null $P1, __label_1 8510 set $S1, $P1 8511 __label_1: 8512 self.'annotate'(__ARG_1) 8513 __ARG_1.'emitdec'($S1) 8514 self.'iflexical'(__ARG_1, $S1) 8515 8516.end # emit_void 8517 8518.sub Winxed_class_init :anon :load :init 8519 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpPostDecExpr' ] 8520 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpIncDec' ] 8521 addparent $P0, $P1 8522.end 8523.namespace [ 'Winxed'; 'Compiler'; 'OpBaseAssignExpr' ] 8524 8525.sub 'set' :method 8526 .param pmc __ARG_1 8527 .param pmc __ARG_2 8528 .param pmc __ARG_3 8529 .param pmc __ARG_4 8530 self.'Expr'(__ARG_1, __ARG_2) 8531 setattribute self, 'lexpr', __ARG_3 8532 setattribute self, 'rexpr', __ARG_4 8533 .return(self) 8534 8535.end # set 8536 8537 8538.sub 'cloneassign' :method 8539 .param pmc __ARG_1 8540 .param pmc __ARG_2 8541 getattribute $P1, self, 'start' 8542 getattribute $P3, self, 'lexpr' 8543 $P2 = $P3.'clone'(__ARG_2) 8544 getattribute $P5, self, 'rexpr' 8545 $P4 = $P5.'clone'(__ARG_2) 8546 .tailcall __ARG_1.'set'(__ARG_2, $P1, $P2, $P4) 8547 8548.end # cloneassign 8549 8550 8551.sub 'checkresult' :method 8552 getattribute $P1, self, 'lexpr' 8553 .tailcall $P1.'checkresult'() 8554 8555.end # checkresult 8556 8557 8558.sub 'optimize_base' :method 8559 getattribute $P3, self, 'lexpr' 8560 $P2 = $P3.'optimize'() 8561 setattribute self, 'lexpr', $P2 8562 getattribute $P3, self, 'rexpr' 8563 $P2 = $P3.'optimize'() 8564 setattribute self, 'rexpr', $P2 8565 .return(self) 8566 8567.end # optimize_base 8568 8569 8570.sub 'optimize' :method 8571 .tailcall self.'optimize_base'() 8572 8573.end # optimize 8574 8575 8576.sub 'checkleft' :method 8577.const 'Sub' WSubId_99 = "WSubId_99" 8578 getattribute $P1, self, 'lexpr' 8579 $P2 = $P1.'isnull'() 8580 if $P2 goto __label_2 8581 $P2 = $P1.'isliteral'() 8582 __label_2: 8583 if_null $P2, __label_1 8584 unless $P2 goto __label_1 8585 WSubId_99($P1) 8586 __label_1: # endif 8587 8588.end # checkleft 8589 8590 8591.sub 'emit' :method 8592 .param pmc __ARG_1 8593 .param string __ARG_2 8594 $P1 = self.'emit_get'(__ARG_1) 8595 null $S1 8596 if_null $P1, __label_1 8597 set $S1, $P1 8598 __label_1: 8599 self.'annotate'(__ARG_1) 8600 __ARG_1.'emitset'(__ARG_2, $S1) 8601 8602.end # emit 8603 8604 8605.sub 'emit_void' :method 8606 .param pmc __ARG_1 8607 self.'emit_get'(__ARG_1) 8608 8609.end # emit_void 8610 8611.sub Winxed_class_init :anon :load :init 8612 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpBaseAssignExpr' ] 8613 get_class $P1, [ 'Winxed'; 'Compiler'; 'Expr' ] 8614 addparent $P0, $P1 8615 addattribute $P0, 'lexpr' 8616 addattribute $P0, 'rexpr' 8617.end 8618.namespace [ 'Winxed'; 'Compiler'; 'OpAssignExpr' ] 8619 8620.sub 'clone' :method 8621 .param pmc __ARG_1 8622 new $P1, [ 'Winxed'; 'Compiler'; 'OpAssignExpr' ] 8623 .tailcall self.'cloneassign'($P1, __ARG_1) 8624 8625.end # clone 8626 8627 8628.sub 'emit_get' :method 8629 .param pmc __ARG_1 8630 self.'annotate'(__ARG_1) 8631 getattribute $P1, self, 'lexpr' 8632 getattribute $P2, self, 'rexpr' 8633 .tailcall $P1.'emit_assign_get'(__ARG_1, $P2) 8634 8635.end # emit_get 8636 8637 8638.sub 'emit_void' :method 8639 .param pmc __ARG_1 8640 self.'annotate'(__ARG_1) 8641 getattribute $P1, self, 'lexpr' 8642 getattribute $P2, self, 'rexpr' 8643 $P1.'emit_assign_get'(__ARG_1, $P2) 8644 8645.end # emit_void 8646 8647.sub Winxed_class_init :anon :load :init 8648 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpAssignExpr' ] 8649 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBaseAssignExpr' ] 8650 addparent $P0, $P1 8651.end 8652.namespace [ 'Winxed'; 'Compiler'; 'OpAssignToExpr' ] 8653 8654.sub 'clone' :method 8655 .param pmc __ARG_1 8656 new $P1, [ 'Winxed'; 'Compiler'; 'OpAssignToExpr' ] 8657 .tailcall self.'cloneassign'($P1, __ARG_1) 8658 8659.end # clone 8660 8661 8662.sub 'emit' :method 8663 .param pmc __ARG_1 8664 .param string __ARG_2 8665 self.'annotate'(__ARG_1) 8666 $P1 = self.'emit_get'(__ARG_1) 8667 null $S1 8668 if_null $P1, __label_1 8669 set $S1, $P1 8670 __label_1: 8671 __ARG_1.'emitassign'(__ARG_2, $S1) 8672 8673.end # emit 8674 8675 8676.sub 'emit_get' :method 8677 .param pmc __ARG_1 8678.const 'Sub' SyntaxError = "SyntaxError" 8679 self.'checkleft'() 8680 getattribute $P1, self, 'lexpr' 8681 $P2 = $P1.'checkresult'() 8682 set $S3, $P2 8683 eq $S3, "P", __label_1 8684 SyntaxError("Wrong dest type in =:", $P1) 8685 __label_1: # endif 8686 $P2 = $P1.'emit_get'(__ARG_1) 8687 null $S1 8688 if_null $P2, __label_2 8689 set $S1, $P2 8690 __label_2: 8691 getattribute $P3, self, 'rexpr' 8692 $P2 = $P3.'emit_get'(__ARG_1) 8693 null $S2 8694 if_null $P2, __label_3 8695 set $S2, $P2 8696 __label_3: 8697 self.'annotate'(__ARG_1) 8698 __ARG_1.'emitassign'($S1, $S2) 8699 .return($S1) 8700 8701.end # emit_get 8702 8703 8704.sub 'emit_void' :method 8705 .param pmc __ARG_1 8706 self.'annotate'(__ARG_1) 8707 $P1 = self.'emit_get'(__ARG_1) 8708 null $S1 8709 if_null $P1, __label_1 8710 set $S1, $P1 8711 __label_1: 8712 8713.end # emit_void 8714 8715.sub Winxed_class_init :anon :load :init 8716 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpAssignToExpr' ] 8717 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBaseAssignExpr' ] 8718 addparent $P0, $P1 8719.end 8720.namespace [ 'Winxed'; 'Compiler'; 'OpAddToExpr' ] 8721 8722.sub 'clone' :method 8723 .param pmc __ARG_1 8724 new $P1, [ 'Winxed'; 'Compiler'; 'OpAddToExpr' ] 8725 .tailcall self.'cloneassign'($P1, __ARG_1) 8726 8727.end # clone 8728 8729 8730.sub 'emit_get' :method 8731 .param pmc __ARG_1 8732 self.'checkleft'() 8733 getattribute $P1, self, 'lexpr' 8734 getattribute $P2, self, 'rexpr' 8735 $P3 = $P1.'checkresult'() 8736 null $S1 8737 if_null $P3, __label_1 8738 set $S1, $P3 8739 __label_1: 8740 $P3 = $P2.'checkresult'() 8741 null $S2 8742 if_null $P3, __label_2 8743 set $S2, $P3 8744 __label_2: 8745 $P3 = $P1.'emit_get'(__ARG_1) 8746 null $S3 8747 if_null $P3, __label_3 8748 set $S3, $P3 8749 __label_3: 8750 ne $S1, "S", __label_4 8751 isa $I1, $P2, [ 'Winxed'; 'Compiler'; 'ConcatString' ] 8752 unless $I1 goto __label_4 8753 $P2.'emit_concat_to'(__ARG_1, $S3) 8754 goto __label_5 8755 __label_4: # else 8756 $P3 = $P2.'emit_get'(__ARG_1) 8757 null $S4 8758 if_null $P3, __label_6 8759 set $S4, $P3 8760 __label_6: 8761 null $S5 8762 self.'annotate'(__ARG_1) 8763 if_null $S1, __label_7 8764 length $I1, $S1 8765 ne $I1, 1, __label_7 8766 ord $I1, $S1 8767 if $I1 == 83 goto __label_9 8768 if $I1 == 73 goto __label_10 8769 if $I1 == 78 goto __label_11 8770 goto __label_7 8771 __label_9: # case 8772 eq $S2, "S", __label_12 8773 $P3 = self.'tempreg'("S") 8774 set $S5, $P3 8775 __ARG_1.'emitset'($S5, $S4) 8776 set $S4, $S5 8777 __label_12: # endif 8778 __ARG_1.'emitconcat1'($S3, $S4) 8779 goto __label_8 # break 8780 __label_10: # case 8781 __label_11: # case 8782 eq $S1, $S2, __label_13 8783 $P3 = self.'tempreg'($S1) 8784 set $S5, $P3 8785 __ARG_1.'emitset'($S5, $S4) 8786 set $S4, $S5 8787 __label_13: # endif 8788 __ARG_1.'emitaddto'($S3, $S4) 8789 goto __label_8 # break 8790 __label_7: # default 8791 __ARG_1.'emitaddto'($S3, $S4) 8792 __label_8: # switch end 8793 __label_5: # endif 8794 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'LexicalVolatileExpr' ] 8795 unless $I1 goto __label_14 8796 $P1.'emit_store'(__ARG_1, $S3) 8797 __label_14: # endif 8798 .return($S3) 8799 8800.end # emit_get 8801 8802.sub Winxed_class_init :anon :load :init 8803 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpAddToExpr' ] 8804 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBaseAssignExpr' ] 8805 addparent $P0, $P1 8806.end 8807.namespace [ 'Winxed'; 'Compiler'; 'OpSubToExpr' ] 8808 8809.sub 'clone' :method 8810 .param pmc __ARG_1 8811 new $P1, [ 'Winxed'; 'Compiler'; 'OpSubToExpr' ] 8812 .tailcall self.'cloneassign'($P1, __ARG_1) 8813 8814.end # clone 8815 8816 8817.sub 'emit_get' :method 8818 .param pmc __ARG_1 8819.const 'Sub' SyntaxError = "SyntaxError" 8820 self.'checkleft'() 8821 getattribute $P1, self, 'lexpr' 8822 getattribute $P2, self, 'rexpr' 8823 $P3 = $P1.'checkresult'() 8824 null $S1 8825 if_null $P3, __label_1 8826 set $S1, $P3 8827 __label_1: 8828 $P3 = $P2.'checkresult'() 8829 null $S2 8830 if_null $P3, __label_2 8831 set $S2, $P3 8832 __label_2: 8833 $P3 = $P1.'emit_get'(__ARG_1) 8834 null $S3 8835 if_null $P3, __label_3 8836 set $S3, $P3 8837 __label_3: 8838 $P3 = $P2.'emit_get'(__ARG_1) 8839 null $S4 8840 if_null $P3, __label_4 8841 set $S4, $P3 8842 __label_4: 8843 null $S5 8844 self.'annotate'(__ARG_1) 8845 if_null $S1, __label_5 8846 length $I1, $S1 8847 ne $I1, 1, __label_5 8848 ord $I1, $S1 8849 if $I1 == 83 goto __label_7 8850 if $I1 == 73 goto __label_8 8851 if $I1 == 78 goto __label_9 8852 goto __label_5 8853 __label_7: # case 8854 SyntaxError("-= can't be applied to string", self) 8855 __label_8: # case 8856 __label_9: # case 8857 eq $S1, $S2, __label_10 8858 $P3 = self.'tempreg'($S1) 8859 set $S5, $P3 8860 __ARG_1.'emitset'($S5, $S4) 8861 set $S4, $S5 8862 __label_10: # endif 8863 __ARG_1.'emitsubto'($S3, $S4) 8864 goto __label_6 # break 8865 __label_5: # default 8866 __ARG_1.'emitsubto'($S3, $S4) 8867 __label_6: # switch end 8868 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'LexicalVolatileExpr' ] 8869 unless $I1 goto __label_11 8870 $P1.'emit_store'(__ARG_1, $S3) 8871 __label_11: # endif 8872 .return($S3) 8873 8874.end # emit_get 8875 8876.sub Winxed_class_init :anon :load :init 8877 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpSubToExpr' ] 8878 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBaseAssignExpr' ] 8879 addparent $P0, $P1 8880.end 8881.namespace [ 'Winxed'; 'Compiler'; 'OpMulToExpr' ] 8882 8883.sub 'clone' :method 8884 .param pmc __ARG_1 8885 new $P1, [ 'Winxed'; 'Compiler'; 'OpMulToExpr' ] 8886 .tailcall self.'cloneassign'($P1, __ARG_1) 8887 8888.end # clone 8889 8890 8891.sub 'emit_get' :method 8892 .param pmc __ARG_1 8893 self.'checkleft'() 8894 getattribute $P1, self, 'lexpr' 8895 getattribute $P2, self, 'rexpr' 8896 $P3 = $P1.'emit_get'(__ARG_1) 8897 null $S1 8898 if_null $P3, __label_1 8899 set $S1, $P3 8900 __label_1: 8901 null $S2 8902 $P3 = $P1.'checkresult'() 8903 set $S3, $P3 8904 if_null $S3, __label_2 8905 length $I1, $S3 8906 ne $I1, 1, __label_2 8907 ord $I1, $S3 8908 if $I1 == 83 goto __label_4 8909 goto __label_2 8910 __label_4: # case 8911 $P4 = $P2.'emit_getint'(__ARG_1) 8912 set $S2, $P4 8913 self.'annotate'(__ARG_1) 8914 __ARG_1.'emitrepeat'($S1, $S1, $S2) 8915 goto __label_3 # break 8916 __label_2: # default 8917 $P5 = $P2.'emit_get'(__ARG_1) 8918 set $S2, $P5 8919 self.'annotate'(__ARG_1) 8920 __ARG_1.'emitarg2'("mul", $S1, $S2) 8921 __label_3: # switch end 8922 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'LexicalVolatileExpr' ] 8923 unless $I1 goto __label_5 8924 $P1.'emit_store'(__ARG_1, $S1) 8925 __label_5: # endif 8926 .return($S1) 8927 8928.end # emit_get 8929 8930.sub Winxed_class_init :anon :load :init 8931 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpMulToExpr' ] 8932 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBaseAssignExpr' ] 8933 addparent $P0, $P1 8934.end 8935.namespace [ 'Winxed'; 'Compiler'; 'OpDivToExpr' ] 8936 8937.sub 'clone' :method 8938 .param pmc __ARG_1 8939 new $P1, [ 'Winxed'; 'Compiler'; 'OpDivToExpr' ] 8940 .tailcall self.'cloneassign'($P1, __ARG_1) 8941 8942.end # clone 8943 8944 8945.sub 'emit_get' :method 8946 .param pmc __ARG_1 8947 self.'checkleft'() 8948 getattribute $P1, self, 'lexpr' 8949 $P2 = $P1.'emit_get'(__ARG_1) 8950 null $S1 8951 if_null $P2, __label_1 8952 set $S1, $P2 8953 __label_1: 8954 getattribute $P3, self, 'rexpr' 8955 $P2 = $P3.'emit_get'(__ARG_1) 8956 null $S2 8957 if_null $P2, __label_2 8958 set $S2, $P2 8959 __label_2: 8960 self.'annotate'(__ARG_1) 8961 __ARG_1.'emitarg2'("div", $S1, $S2) 8962 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'LexicalVolatileExpr' ] 8963 unless $I1 goto __label_3 8964 $P1.'emit_store'(__ARG_1, $S1) 8965 __label_3: # endif 8966 .return($S1) 8967 8968.end # emit_get 8969 8970.sub Winxed_class_init :anon :load :init 8971 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpDivToExpr' ] 8972 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBaseAssignExpr' ] 8973 addparent $P0, $P1 8974.end 8975.namespace [ 'Winxed'; 'Compiler'; 'OpModToExpr' ] 8976 8977.sub 'clone' :method 8978 .param pmc __ARG_1 8979 new $P1, [ 'Winxed'; 'Compiler'; 'OpModToExpr' ] 8980 .tailcall self.'cloneassign'($P1, __ARG_1) 8981 8982.end # clone 8983 8984 8985.sub 'emit_get' :method 8986 .param pmc __ARG_1 8987 self.'checkleft'() 8988 getattribute $P1, self, 'lexpr' 8989 $P2 = $P1.'emit_get'(__ARG_1) 8990 null $S1 8991 if_null $P2, __label_1 8992 set $S1, $P2 8993 __label_1: 8994 getattribute $P3, self, 'rexpr' 8995 $P2 = $P3.'emit_get'(__ARG_1) 8996 null $S2 8997 if_null $P2, __label_2 8998 set $S2, $P2 8999 __label_2: 9000 self.'annotate'(__ARG_1) 9001 __ARG_1.'emitarg2'("mod", $S1, $S2) 9002 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'LexicalVolatileExpr' ] 9003 unless $I1 goto __label_3 9004 $P1.'emit_store'(__ARG_1, $S1) 9005 __label_3: # endif 9006 .return($S1) 9007 9008.end # emit_get 9009 9010.sub Winxed_class_init :anon :load :init 9011 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpModToExpr' ] 9012 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBaseAssignExpr' ] 9013 addparent $P0, $P1 9014.end 9015.namespace [ 'Winxed'; 'Compiler' ] 9016.namespace [ 'Winxed'; 'Compiler'; 'ComparatorBaseExpr' ] 9017 9018.sub 'checkresult' :method 9019 .return("I") 9020 9021.end # checkresult 9022 9023 9024.sub 'optimize' :method 9025.const 'Sub' integerValue = "integerValue" 9026 self.'optimizearg'() 9027 getattribute $P1, self, 'lexpr' 9028 getattribute $P2, self, 'rexpr' 9029 $P3 = $P1.'isintegerliteral'() 9030 unless $P3 goto __label_1 9031 $P4 = $P2.'isintegerliteral'() 9032 unless $P4 goto __label_1 9033 $P5 = $P1.'getIntegerValue'() 9034 set $I1, $P5 9035 $P3 = $P2.'getIntegerValue'() 9036 set $I2, $P3 9037 getattribute $P3, self, 'owner' 9038 getattribute $P4, self, 'start' 9039 $P5 = self.'int_op'($I1, $I2) 9040 .tailcall integerValue($P3, $P4, $P5) 9041 __label_1: # endif 9042 .return(self) 9043 9044.end # optimize 9045 9046 9047.sub 'emit_comparator' :method 9048 .param pmc __ARG_1 9049 .param string __ARG_2 9050 .param int __ARG_3 :optional 9051 getattribute $P2, self, 'lexpr' 9052 $P1 = $P2.'checkresult'() 9053 null $S1 9054 if_null $P1, __label_1 9055 set $S1, $P1 9056 __label_1: 9057 getattribute $P2, self, 'rexpr' 9058 $P1 = $P2.'checkresult'() 9059 null $S2 9060 if_null $P1, __label_2 9061 set $S2, $P1 9062 __label_2: 9063 getattribute $P2, self, 'lexpr' 9064 $P1 = $P2.'emit_get'(__ARG_1) 9065 null $S3 9066 if_null $P1, __label_3 9067 set $S3, $P1 9068 __label_3: 9069 getattribute $P2, self, 'rexpr' 9070 $P1 = $P2.'emit_get'(__ARG_1) 9071 null $S4 9072 if_null $P1, __label_4 9073 set $S4, $P1 9074 __label_4: 9075 self.'annotate'(__ARG_1) 9076 null $S5 9077 iseq $I1, $S1, "I" 9078 unless $I1 goto __label_8 9079 iseq $I1, $S2, "N" 9080 __label_8: 9081 if $I1 goto __label_7 9082 iseq $I2, $S1, "N" 9083 unless $I2 goto __label_10 9084 iseq $I2, $S2, "I" 9085 __label_10: 9086 if $I2 goto __label_9 9087 iseq $I3, $S2, "I" 9088 unless $I3 goto __label_12 9089 iseq $I3, $S1, "P" 9090 __label_12: 9091 if $I3 goto __label_11 9092 iseq $I4, $S2, "P" 9093 unless $I4 goto __label_14 9094 iseq $I4, $S1, "I" 9095 __label_14: 9096 if $I4 goto __label_13 9097 iseq $I5, $S2, "N" 9098 unless $I5 goto __label_16 9099 iseq $I5, $S1, "P" 9100 __label_16: 9101 if $I5 goto __label_15 9102 iseq $I6, $S2, "P" 9103 unless $I6 goto __label_18 9104 iseq $I6, $S1, "N" 9105 __label_18: 9106 if $I6 goto __label_17 9107 iseq $I7, $S2, "S" 9108 unless $I7 goto __label_20 9109 iseq $I7, $S1, "P" 9110 __label_20: 9111 if $I7 goto __label_19 9112 iseq $I8, $S2, "P" 9113 unless $I8 goto __label_22 9114 iseq $I8, $S1, "S" 9115 __label_22: 9116 if $I8 goto __label_21 9117 goto __label_6 9118 __label_7: # case 9119 $P1 = self.'tempreg'("N") 9120 set $S5, $P1 9121 __ARG_1.'emitset'($S5, $S3) 9122 set $S3, $S5 9123 goto __label_5 # break 9124 __label_9: # case 9125 $P2 = self.'tempreg'("N") 9126 set $S5, $P2 9127 __ARG_1.'emitset'($S5, $S4) 9128 set $S4, $S5 9129 goto __label_5 # break 9130 __label_11: # case 9131 $P3 = self.'tempreg'("I") 9132 set $S5, $P3 9133 __ARG_1.'emitset'($S5, $S3) 9134 set $S3, $S5 9135 goto __label_5 # break 9136 __label_13: # case 9137 $P4 = self.'tempreg'("I") 9138 set $S5, $P4 9139 __ARG_1.'emitset'($S5, $S4) 9140 set $S4, $S5 9141 goto __label_5 # break 9142 __label_15: # case 9143 $P5 = self.'tempreg'("N") 9144 set $S5, $P5 9145 __ARG_1.'emitset'($S5, $S3) 9146 set $S3, $S5 9147 goto __label_5 # break 9148 __label_17: # case 9149 $P6 = self.'tempreg'("N") 9150 set $S5, $P6 9151 __ARG_1.'emitset'($S5, $S4) 9152 set $S4, $S5 9153 goto __label_5 # break 9154 __label_19: # case 9155 $P7 = self.'tempreg'("S") 9156 set $S5, $P7 9157 __ARG_1.'emitset'($S5, $S3) 9158 set $S3, $S5 9159 goto __label_5 # break 9160 __label_21: # case 9161 $P8 = self.'tempreg'("S") 9162 set $S5, $P8 9163 __ARG_1.'emitset'($S5, $S4) 9164 set $S4, $S5 9165 goto __label_5 # break 9166 __label_6: # default 9167 __label_5: # switch end 9168 if __ARG_3 == 0 goto __label_25 9169 if __ARG_3 == 1 goto __label_26 9170 if __ARG_3 == 2 goto __label_27 9171 goto __label_23 9172 __label_25: # case 9173 self.'emitop'(__ARG_1, __ARG_2, $S3, $S4) 9174 goto __label_24 # break 9175 __label_26: # case 9176 self.'emitop_if'(__ARG_1, __ARG_2, $S3, $S4) 9177 goto __label_24 # break 9178 __label_27: # case 9179 self.'emitop_else'(__ARG_1, __ARG_2, $S3, $S4) 9180 goto __label_24 # break 9181 __label_23: # default 9182 __label_24: # switch end 9183 9184.end # emit_comparator 9185 9186 9187.sub 'emit' :method 9188 .param pmc __ARG_1 9189 .param string __ARG_2 9190 self.'emit_comparator'(__ARG_1, __ARG_2) 9191 9192.end # emit 9193 9194 9195.sub 'emit_if' :method 9196 .param pmc __ARG_1 9197 .param string __ARG_2 9198 self.'emit_comparator'(__ARG_1, __ARG_2, 1) 9199 9200.end # emit_if 9201 9202 9203.sub 'emit_else' :method 9204 .param pmc __ARG_1 9205 .param string __ARG_2 9206 self.'emit_comparator'(__ARG_1, __ARG_2, 2) 9207 9208.end # emit_else 9209 9210.sub Winxed_class_init :anon :load :init 9211 newclass $P0, [ 'Winxed'; 'Compiler'; 'ComparatorBaseExpr' ] 9212 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBinaryExpr' ] 9213 addparent $P0, $P1 9214 get_class $P2, [ 'Winxed'; 'Compiler'; 'ConditionFriendlyExpr' ] 9215 addparent $P0, $P2 9216.end 9217.namespace [ 'Winxed'; 'Compiler'; 'Negable' ] 9218 9219.sub 'Negable' :method 9220 .param int __ARG_1 9221 new $P2, [ 'Boolean' ], __ARG_1 9222 setattribute self, 'positive', $P2 9223 9224.end # Negable 9225 9226 9227.sub 'isnegable' :method 9228 .return(1) 9229 9230.end # isnegable 9231 9232 9233.sub 'negated' :method 9234 getattribute $P1, self, 'positive' 9235 isfalse $I1, $P1 9236 getattribute $P1, self, 'positive' 9237 assign $P1, $I1 9238 .return(self) 9239 9240.end # negated 9241 9242.sub Winxed_class_init :anon :load :init 9243 newclass $P0, [ 'Winxed'; 'Compiler'; 'Negable' ] 9244 addattribute $P0, 'positive' 9245.end 9246.namespace [ 'Winxed'; 'Compiler'; 'CheckerExpr' ] 9247 9248.sub 'CheckerExpr' :method 9249 .param pmc __ARG_1 9250 .param pmc __ARG_2 9251 .param int __ARG_3 9252 getattribute $P1, __ARG_1, 'owner' 9253 getattribute $P2, __ARG_1, 'start' 9254 self.'Expr'($P1, $P2) 9255 self.'Negable'(__ARG_3) 9256 setattribute self, 'expr', __ARG_2 9257 9258.end # CheckerExpr 9259 9260 9261.sub 'isnegable' :method 9262 .return(1) 9263 9264.end # isnegable 9265 9266 9267.sub 'checkresult' :method 9268 .return("I") 9269 9270.end # checkresult 9271 9272.sub Winxed_class_init :anon :load :init 9273 newclass $P0, [ 'Winxed'; 'Compiler'; 'CheckerExpr' ] 9274 get_class $P1, [ 'Winxed'; 'Compiler'; 'Expr' ] 9275 addparent $P0, $P1 9276 get_class $P2, [ 'Winxed'; 'Compiler'; 'Negable' ] 9277 addparent $P0, $P2 9278 get_class $P3, [ 'Winxed'; 'Compiler'; 'ConditionFriendlyExpr' ] 9279 addparent $P0, $P3 9280 addattribute $P0, 'expr' 9281.end 9282.namespace [ 'Winxed'; 'Compiler'; 'NullCheckerExpr' ] 9283 9284.sub 'NullCheckerExpr' :method 9285 .param pmc __ARG_1 9286 .param pmc __ARG_2 9287 .param int __ARG_3 9288 self.'CheckerExpr'(__ARG_1, __ARG_2, __ARG_3) 9289 9290.end # NullCheckerExpr 9291 9292 9293.sub 'emit' :method 9294 .param pmc __ARG_1 9295 .param string __ARG_2 9296 getattribute $P2, self, 'expr' 9297 $P1 = $P2.'emit_get'(__ARG_1) 9298 null $S1 9299 if_null $P1, __label_1 9300 set $S1, $P1 9301 __label_1: 9302 self.'annotate'(__ARG_1) 9303 __ARG_1.'emitarg2'("isnull", __ARG_2, $S1) 9304 getattribute $P1, self, 'positive' 9305 if $P1 goto __label_2 9306 __ARG_1.'emitarg1'("not", __ARG_2) 9307 __label_2: # endif 9308 9309.end # emit 9310 9311 9312.sub 'emit_if' :method 9313 .param pmc __ARG_1 9314 .param string __ARG_2 9315 getattribute $P2, self, 'expr' 9316 $P1 = $P2.'emit_get'(__ARG_1) 9317 null $S1 9318 if_null $P1, __label_1 9319 set $S1, $P1 9320 __label_1: 9321 self.'annotate'(__ARG_1) 9322 getattribute $P1, self, 'positive' 9323 if_null $P1, __label_2 9324 unless $P1 goto __label_2 9325 __ARG_1.'emitif_null'($S1, __ARG_2) 9326 goto __label_3 9327 __label_2: # else 9328 __ARG_1.'emitunless_null'($S1, __ARG_2) 9329 __label_3: # endif 9330 9331.end # emit_if 9332 9333 9334.sub 'emit_else' :method 9335 .param pmc __ARG_1 9336 .param string __ARG_2 9337 getattribute $P2, self, 'expr' 9338 $P1 = $P2.'emit_get'(__ARG_1) 9339 null $S1 9340 if_null $P1, __label_1 9341 set $S1, $P1 9342 __label_1: 9343 self.'annotate'(__ARG_1) 9344 getattribute $P1, self, 'positive' 9345 if_null $P1, __label_2 9346 unless $P1 goto __label_2 9347 __ARG_1.'emitunless_null'($S1, __ARG_2) 9348 goto __label_3 9349 __label_2: # else 9350 __ARG_1.'emitif_null'($S1, __ARG_2) 9351 __label_3: # endif 9352 9353.end # emit_else 9354 9355.sub Winxed_class_init :anon :load :init 9356 newclass $P0, [ 'Winxed'; 'Compiler'; 'NullCheckerExpr' ] 9357 get_class $P1, [ 'Winxed'; 'Compiler'; 'CheckerExpr' ] 9358 addparent $P0, $P1 9359.end 9360.namespace [ 'Winxed'; 'Compiler'; 'ZeroCheckerExpr' ] 9361 9362.sub 'ZeroCheckerExpr' :method 9363 .param pmc __ARG_1 9364 .param pmc __ARG_2 9365 .param int __ARG_3 9366 self.'CheckerExpr'(__ARG_1, __ARG_2, __ARG_3) 9367 9368.end # ZeroCheckerExpr 9369 9370 9371.sub 'emit' :method 9372 .param pmc __ARG_1 9373 .param string __ARG_2 9374 getattribute $P1, self, 'expr' 9375 $P2 = $P1.'emit_getint'(__ARG_1) 9376 null $S1 9377 if_null $P2, __label_1 9378 set $S1, $P2 9379 __label_1: 9380 self.'annotate'(__ARG_1) 9381 getattribute $P2, self, 'positive' 9382 if_null $P2, __label_2 9383 unless $P2 goto __label_2 9384 __ARG_1.'emitarg3'("iseq", __ARG_2, $S1, 0) 9385 goto __label_3 9386 __label_2: # else 9387 __ARG_1.'emitarg3'("isne", __ARG_2, $S1, 0) 9388 __label_3: # endif 9389 9390.end # emit 9391 9392 9393.sub 'emit_if' :method 9394 .param pmc __ARG_1 9395 .param string __ARG_2 9396 getattribute $P1, self, 'expr' 9397 $P2 = $P1.'emit_getint'(__ARG_1) 9398 null $S1 9399 if_null $P2, __label_1 9400 set $S1, $P2 9401 __label_1: 9402 self.'annotate'(__ARG_1) 9403 getattribute $P2, self, 'positive' 9404 if_null $P2, __label_2 9405 unless $P2 goto __label_2 9406 __ARG_1.'emitunless'($S1, __ARG_2) 9407 goto __label_3 9408 __label_2: # else 9409 __ARG_1.'emitif'($S1, __ARG_2) 9410 __label_3: # endif 9411 9412.end # emit_if 9413 9414 9415.sub 'emit_else' :method 9416 .param pmc __ARG_1 9417 .param string __ARG_2 9418 getattribute $P1, self, 'expr' 9419 $P2 = $P1.'emit_getint'(__ARG_1) 9420 null $S1 9421 if_null $P2, __label_1 9422 set $S1, $P2 9423 __label_1: 9424 self.'annotate'(__ARG_1) 9425 getattribute $P2, self, 'positive' 9426 if_null $P2, __label_2 9427 unless $P2 goto __label_2 9428 __ARG_1.'emitif'($S1, __ARG_2) 9429 goto __label_3 9430 __label_2: # else 9431 __ARG_1.'emitunless'($S1, __ARG_2) 9432 __label_3: # endif 9433 9434.end # emit_else 9435 9436.sub Winxed_class_init :anon :load :init 9437 newclass $P0, [ 'Winxed'; 'Compiler'; 'ZeroCheckerExpr' ] 9438 get_class $P1, [ 'Winxed'; 'Compiler'; 'CheckerExpr' ] 9439 addparent $P0, $P1 9440.end 9441.namespace [ 'Winxed'; 'Compiler'; 'OpEqualExpr' ] 9442 9443.sub 'OpEqualExpr' :method 9444 .param pmc __ARG_1 9445 .param pmc __ARG_2 9446 .param pmc __ARG_3 9447 .param pmc __ARG_4 9448 .param int __ARG_5 9449 self.'set'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 9450 self.'Negable'(__ARG_5) 9451 9452.end # OpEqualExpr 9453 9454 9455.sub 'clone' :method 9456 .param pmc __ARG_1 9457 new $P2, [ 'Winxed'; 'Compiler'; 'OpEqualExpr' ] 9458 $P1 = self.'clonebinary'($P2, __ARG_1) 9459 getattribute $P2, self, 'positive' 9460 $P1.'Negable'($P2) 9461 .return($P1) 9462 9463.end # clone 9464 9465 9466.sub 'isnegable' :method 9467 .return(1) 9468 9469.end # isnegable 9470 9471 9472.sub 'optimize' :method 9473.const 'Sub' integerValue = "integerValue" 9474 self.'optimizearg'() 9475 getattribute $P1, self, 'lexpr' 9476 getattribute $P2, self, 'rexpr' 9477 $P3 = $P1.'isnull'() 9478 set $I1, $P3 9479 $P3 = $P2.'isnull'() 9480 set $I2, $P3 9481 and $I8, $I1, $I2 9482 if $I8 goto __label_3 9483 if $I1 goto __label_4 9484 if $I2 goto __label_5 9485 goto __label_2 9486 __label_3: # case 9487 getattribute $P3, self, 'owner' 9488 getattribute $P4, self, 'start' 9489 getattribute $P5, self, 'positive' 9490 .tailcall integerValue($P3, $P4, $P5) 9491 __label_4: # case 9492 new $P7, [ 'Winxed'; 'Compiler'; 'NullCheckerExpr' ] 9493 getattribute $P8, self, 'positive' 9494 $P7.'NullCheckerExpr'(self, $P2, $P8) 9495 set $P6, $P7 9496 .return($P6) 9497 __label_5: # case 9498 new $P10, [ 'Winxed'; 'Compiler'; 'NullCheckerExpr' ] 9499 getattribute $P11, self, 'positive' 9500 $P10.'NullCheckerExpr'(self, $P1, $P11) 9501 set $P9, $P10 9502 .return($P9) 9503 __label_2: # default 9504 __label_1: # switch end 9505 $P3 = $P1.'isliteral'() 9506 unless $P3 goto __label_6 9507 $P4 = $P2.'isliteral'() 9508 unless $P4 goto __label_6 9509 $P5 = $P1.'checkresult'() 9510 null $S1 9511 if_null $P5, __label_7 9512 set $S1, $P5 9513 __label_7: 9514 $P3 = $P2.'checkresult'() 9515 null $S2 9516 if_null $P3, __label_8 9517 set $S2, $P3 9518 __label_8: 9519 iseq $I8, $S1, "I" 9520 unless $I8 goto __label_12 9521 iseq $I8, $S2, "I" 9522 __label_12: 9523 if $I8 goto __label_11 9524 iseq $I9, $S1, "N" 9525 unless $I9 goto __label_14 9526 iseq $I9, $S2, "N" 9527 __label_14: 9528 if $I9 goto __label_13 9529 iseq $I10, $S1, "N" 9530 unless $I10 goto __label_16 9531 iseq $I10, $S2, "I" 9532 __label_16: 9533 if $I10 goto __label_15 9534 iseq $I11, $S1, "I" 9535 unless $I11 goto __label_18 9536 iseq $I11, $S2, "N" 9537 __label_18: 9538 if $I11 goto __label_17 9539 iseq $I12, $S1, "S" 9540 unless $I12 goto __label_20 9541 iseq $I12, $S2, "S" 9542 __label_20: 9543 if $I12 goto __label_19 9544 goto __label_10 9545 __label_11: # case 9546 $P3 = $P1.'getIntegerValue'() 9547 set $I3, $P3 9548 $P4 = $P2.'getIntegerValue'() 9549 set $I4, $P4 9550 getattribute $P5, self, 'positive' 9551 if_null $P5, __label_22 9552 unless $P5 goto __label_22 9553 iseq $I5, $I3, $I4 9554 goto __label_21 9555 __label_22: 9556 isne $I5, $I3, $I4 9557 __label_21: 9558 getattribute $P6, self, 'owner' 9559 getattribute $P7, self, 'start' 9560 .tailcall integerValue($P6, $P7, $I5) 9561 __label_13: # case 9562 __label_15: # case 9563 __label_17: # case 9564 $P8 = $P1.'getFloatValue'() 9565 set $N1, $P8 9566 $P9 = $P2.'getFloatValue'() 9567 set $N2, $P9 9568 getattribute $P10, self, 'positive' 9569 if_null $P10, __label_24 9570 unless $P10 goto __label_24 9571 iseq $I6, $N1, $N2 9572 goto __label_23 9573 __label_24: 9574 isne $I6, $N1, $N2 9575 __label_23: 9576 getattribute $P11, self, 'owner' 9577 getattribute $P12, self, 'start' 9578 .tailcall integerValue($P11, $P12, $I6) 9579 __label_19: # case 9580 getattribute $P14, $P1, 'strval' 9581 getattribute $P13, $P14, 'str' 9582 null $S3 9583 if_null $P13, __label_25 9584 set $S3, $P13 9585 __label_25: 9586 getattribute $P16, $P2, 'strval' 9587 getattribute $P15, $P16, 'str' 9588 null $S4 9589 if_null $P15, __label_26 9590 set $S4, $P15 9591 __label_26: 9592 getattribute $P17, self, 'positive' 9593 if_null $P17, __label_28 9594 unless $P17 goto __label_28 9595 iseq $I7, $S3, $S4 9596 goto __label_27 9597 __label_28: 9598 isne $I7, $S3, $S4 9599 __label_27: 9600 getattribute $P18, self, 'owner' 9601 getattribute $P19, self, 'start' 9602 .tailcall integerValue($P18, $P19, $I7) 9603 __label_10: # default 9604 __label_9: # switch end 9605 __label_6: # endif 9606 $P3 = $P2.'isintegerzero'() 9607 if_null $P3, __label_29 9608 unless $P3 goto __label_29 9609 new $P5, [ 'Winxed'; 'Compiler'; 'ZeroCheckerExpr' ] 9610 getattribute $P6, self, 'positive' 9611 $P5.'ZeroCheckerExpr'(self, $P1, $P6) 9612 set $P4, $P5 9613 .return($P4) 9614 __label_29: # endif 9615 $P3 = $P1.'isintegerzero'() 9616 if_null $P3, __label_30 9617 unless $P3 goto __label_30 9618 new $P5, [ 'Winxed'; 'Compiler'; 'ZeroCheckerExpr' ] 9619 getattribute $P6, self, 'positive' 9620 $P5.'ZeroCheckerExpr'(self, $P2, $P6) 9621 set $P4, $P5 9622 .return($P4) 9623 __label_30: # endif 9624 .return(self) 9625 9626.end # optimize 9627 9628 9629.sub 'emitop' :method 9630 .param pmc __ARG_1 9631 .param string __ARG_2 9632 .param string __ARG_3 9633 .param string __ARG_4 9634 self.'annotate'(__ARG_1) 9635 getattribute $P1, self, 'positive' 9636 if_null $P1, __label_2 9637 unless $P1 goto __label_2 9638 set $S1, "iseq" 9639 goto __label_1 9640 __label_2: 9641 set $S1, "isne" 9642 __label_1: 9643 __ARG_1.'emitbinop'($S1, __ARG_2, __ARG_3, __ARG_4) 9644 9645.end # emitop 9646 9647 9648.sub 'emit' :method 9649 .param pmc __ARG_1 9650 .param string __ARG_2 9651 self.'annotate'(__ARG_1) 9652 self.'emit_comparator'(__ARG_1, __ARG_2) 9653 9654.end # emit 9655 9656 9657.sub 'emitop_if' :method 9658 .param pmc __ARG_1 9659 .param string __ARG_2 9660 .param string __ARG_3 9661 .param string __ARG_4 9662 self.'annotate'(__ARG_1) 9663 getattribute $P1, self, 'positive' 9664 if_null $P1, __label_2 9665 unless $P1 goto __label_2 9666 set $S1, "eq" 9667 goto __label_1 9668 __label_2: 9669 set $S1, "ne" 9670 __label_1: 9671 __ARG_1.'emitcompare'($S1, __ARG_3, __ARG_4, __ARG_2) 9672 9673.end # emitop_if 9674 9675 9676.sub 'emitop_else' :method 9677 .param pmc __ARG_1 9678 .param string __ARG_2 9679 .param string __ARG_3 9680 .param string __ARG_4 9681 self.'annotate'(__ARG_1) 9682 getattribute $P1, self, 'positive' 9683 if_null $P1, __label_2 9684 unless $P1 goto __label_2 9685 set $S1, "ne" 9686 goto __label_1 9687 __label_2: 9688 set $S1, "eq" 9689 __label_1: 9690 __ARG_1.'emitcompare'($S1, __ARG_3, __ARG_4, __ARG_2) 9691 9692.end # emitop_else 9693 9694.sub Winxed_class_init :anon :load :init 9695 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpEqualExpr' ] 9696 get_class $P1, [ 'Winxed'; 'Compiler'; 'ComparatorBaseExpr' ] 9697 addparent $P0, $P1 9698 get_class $P2, [ 'Winxed'; 'Compiler'; 'Negable' ] 9699 addparent $P0, $P2 9700.end 9701.namespace [ 'Winxed'; 'Compiler'; 'OpSameExpr' ] 9702 9703.sub 'OpSameExpr' :method 9704 .param pmc __ARG_1 9705 .param pmc __ARG_2 9706 .param pmc __ARG_3 9707 .param pmc __ARG_4 9708 .param int __ARG_5 9709 self.'initbinary'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 9710 self.'Negable'(__ARG_5) 9711 9712.end # OpSameExpr 9713 9714 9715.sub 'clone' :method 9716 .param pmc __ARG_1 9717 new $P2, [ 'Winxed'; 'Compiler'; 'OpSameExpr' ] 9718 $P1 = self.'clonebinary'($P2, __ARG_1) 9719 getattribute $P2, self, 'positive' 9720 $P1.'Negable'($P2) 9721 .return($P1) 9722 9723.end # clone 9724 9725 9726.sub 'isnegable' :method 9727 .return(1) 9728 9729.end # isnegable 9730 9731 9732.sub 'int_op' :method 9733 .param int __ARG_1 9734 .param int __ARG_2 9735 getattribute $P1, self, 'positive' 9736 if_null $P1, __label_2 9737 unless $P1 goto __label_2 9738 iseq $I1, __ARG_1, __ARG_2 9739 goto __label_1 9740 __label_2: 9741 isne $I1, __ARG_1, __ARG_2 9742 __label_1: 9743 .return($I1) 9744 9745.end # int_op 9746 9747 9748.sub 'emitop' :method 9749 .param pmc __ARG_1 9750 .param string __ARG_2 9751 .param string __ARG_3 9752 .param string __ARG_4 9753 self.'annotate'(__ARG_1) 9754 getattribute $P1, self, 'positive' 9755 set $I1, $P1 9756 unless $I1 goto __label_2 9757 set $S1, "issame" 9758 goto __label_1 9759 __label_2: 9760 set $S1, "isntsame" 9761 __label_1: 9762 __ARG_1.'emitbinop'($S1, __ARG_2, __ARG_3, __ARG_4) 9763 9764.end # emitop 9765 9766 9767.sub 'emit' :method 9768 .param pmc __ARG_1 9769 .param string __ARG_2 9770 self.'emit_comparator'(__ARG_1, __ARG_2) 9771 9772.end # emit 9773 9774 9775.sub 'emitop_if' :method 9776 .param pmc __ARG_1 9777 .param string __ARG_2 9778 .param string __ARG_3 9779 .param string __ARG_4 9780 self.'annotate'(__ARG_1) 9781 getattribute $P1, self, 'positive' 9782 set $I1, $P1 9783 unless $I1 goto __label_2 9784 set $S1, "eq_addr" 9785 goto __label_1 9786 __label_2: 9787 set $S1, "ne_addr" 9788 __label_1: 9789 __ARG_1.'emitcompare'($S1, __ARG_3, __ARG_4, __ARG_2) 9790 9791.end # emitop_if 9792 9793 9794.sub 'emitop_else' :method 9795 .param pmc __ARG_1 9796 .param string __ARG_2 9797 .param string __ARG_3 9798 .param string __ARG_4 9799 self.'annotate'(__ARG_1) 9800 getattribute $P1, self, 'positive' 9801 set $I1, $P1 9802 unless $I1 goto __label_2 9803 set $S1, "ne_addr" 9804 goto __label_1 9805 __label_2: 9806 set $S1, "eq_addr" 9807 __label_1: 9808 __ARG_1.'emitcompare'($S1, __ARG_3, __ARG_4, __ARG_2) 9809 9810.end # emitop_else 9811 9812.sub Winxed_class_init :anon :load :init 9813 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpSameExpr' ] 9814 get_class $P1, [ 'Winxed'; 'Compiler'; 'ComparatorBaseExpr' ] 9815 addparent $P0, $P1 9816 get_class $P2, [ 'Winxed'; 'Compiler'; 'Negable' ] 9817 addparent $P0, $P2 9818 addattribute $P0, 'positive' 9819.end 9820.namespace [ 'Winxed'; 'Compiler'; 'OpLessExpr' ] 9821 9822.sub 'clone' :method 9823 .param pmc __ARG_1 9824 new $P1, [ 'Winxed'; 'Compiler'; 'OpLessExpr' ] 9825 .tailcall self.'clonebinary'($P1, __ARG_1) 9826 9827.end # clone 9828 9829 9830.sub 'isnegable' :method 9831 .return(1) 9832 9833.end # isnegable 9834 9835 9836.sub 'negated' :method 9837 new $P1, [ 'Winxed'; 'Compiler'; 'OpGreaterEqualExpr' ] 9838 .tailcall $P1.'setfrom'(self) 9839 9840.end # negated 9841 9842 9843.sub 'int_op' :method 9844 .param int __ARG_1 9845 .param int __ARG_2 9846 islt $I1, __ARG_1, __ARG_2 9847 .return($I1) 9848 9849.end # int_op 9850 9851 9852.sub 'emitop' :method 9853 .param pmc __ARG_1 9854 .param string __ARG_2 9855 .param string __ARG_3 9856 .param string __ARG_4 9857 __ARG_1.'emitbinop'("islt", __ARG_2, __ARG_3, __ARG_4) 9858 9859.end # emitop 9860 9861 9862.sub 'emitop_if' :method 9863 .param pmc __ARG_1 9864 .param string __ARG_2 9865 .param string __ARG_3 9866 .param string __ARG_4 9867 __ARG_1.'emitcompare'("lt", __ARG_3, __ARG_4, __ARG_2) 9868 9869.end # emitop_if 9870 9871 9872.sub 'emitop_else' :method 9873 .param pmc __ARG_1 9874 .param string __ARG_2 9875 .param string __ARG_3 9876 .param string __ARG_4 9877 __ARG_1.'emitcompare'("ge", __ARG_3, __ARG_4, __ARG_2) 9878 9879.end # emitop_else 9880 9881.sub Winxed_class_init :anon :load :init 9882 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpLessExpr' ] 9883 get_class $P1, [ 'Winxed'; 'Compiler'; 'ComparatorBaseExpr' ] 9884 addparent $P0, $P1 9885.end 9886.namespace [ 'Winxed'; 'Compiler'; 'OpGreaterExpr' ] 9887 9888.sub 'clone' :method 9889 .param pmc __ARG_1 9890 new $P1, [ 'Winxed'; 'Compiler'; 'OpGreaterExpr' ] 9891 .tailcall self.'clonebinary'($P1, __ARG_1) 9892 9893.end # clone 9894 9895 9896.sub 'isnegable' :method 9897 .return(1) 9898 9899.end # isnegable 9900 9901 9902.sub 'negated' :method 9903 new $P1, [ 'Winxed'; 'Compiler'; 'OpLessEqualExpr' ] 9904 .tailcall $P1.'setfrom'(self) 9905 9906.end # negated 9907 9908 9909.sub 'int_op' :method 9910 .param int __ARG_1 9911 .param int __ARG_2 9912 isgt $I1, __ARG_1, __ARG_2 9913 .return($I1) 9914 9915.end # int_op 9916 9917 9918.sub 'emitop' :method 9919 .param pmc __ARG_1 9920 .param string __ARG_2 9921 .param string __ARG_3 9922 .param string __ARG_4 9923 __ARG_1.'emitbinop'("isgt", __ARG_2, __ARG_3, __ARG_4) 9924 9925.end # emitop 9926 9927 9928.sub 'emitop_if' :method 9929 .param pmc __ARG_1 9930 .param string __ARG_2 9931 .param string __ARG_3 9932 .param string __ARG_4 9933 __ARG_1.'emitcompare'("gt", __ARG_3, __ARG_4, __ARG_2) 9934 9935.end # emitop_if 9936 9937 9938.sub 'emitop_else' :method 9939 .param pmc __ARG_1 9940 .param string __ARG_2 9941 .param string __ARG_3 9942 .param string __ARG_4 9943 __ARG_1.'emitcompare'("le", __ARG_3, __ARG_4, __ARG_2) 9944 9945.end # emitop_else 9946 9947.sub Winxed_class_init :anon :load :init 9948 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpGreaterExpr' ] 9949 get_class $P1, [ 'Winxed'; 'Compiler'; 'ComparatorBaseExpr' ] 9950 addparent $P0, $P1 9951.end 9952.namespace [ 'Winxed'; 'Compiler'; 'OpLessEqualExpr' ] 9953 9954.sub 'clone' :method 9955 .param pmc __ARG_1 9956 new $P1, [ 'Winxed'; 'Compiler'; 'OpLessEqualExpr' ] 9957 .tailcall self.'clonebinary'($P1, __ARG_1) 9958 9959.end # clone 9960 9961 9962.sub 'isnegable' :method 9963 .return(1) 9964 9965.end # isnegable 9966 9967 9968.sub 'negated' :method 9969 new $P1, [ 'Winxed'; 'Compiler'; 'OpGreaterExpr' ] 9970 .tailcall $P1.'setfrom'(self) 9971 9972.end # negated 9973 9974 9975.sub 'int_op' :method 9976 .param int __ARG_1 9977 .param int __ARG_2 9978 isle $I1, __ARG_1, __ARG_2 9979 .return($I1) 9980 9981.end # int_op 9982 9983 9984.sub 'emitop' :method 9985 .param pmc __ARG_1 9986 .param string __ARG_2 9987 .param string __ARG_3 9988 .param string __ARG_4 9989 __ARG_1.'emitbinop'("isle", __ARG_2, __ARG_3, __ARG_4) 9990 9991.end # emitop 9992 9993 9994.sub 'emitop_if' :method 9995 .param pmc __ARG_1 9996 .param string __ARG_2 9997 .param string __ARG_3 9998 .param string __ARG_4 9999 __ARG_1.'emitcompare'("le", __ARG_3, __ARG_4, __ARG_2) 10000 10001.end # emitop_if 10002 10003 10004.sub 'emitop_else' :method 10005 .param pmc __ARG_1 10006 .param string __ARG_2 10007 .param string __ARG_3 10008 .param string __ARG_4 10009 __ARG_1.'emitcompare'("gt", __ARG_3, __ARG_4, __ARG_2) 10010 10011.end # emitop_else 10012 10013.sub Winxed_class_init :anon :load :init 10014 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpLessEqualExpr' ] 10015 get_class $P1, [ 'Winxed'; 'Compiler'; 'ComparatorBaseExpr' ] 10016 addparent $P0, $P1 10017.end 10018.namespace [ 'Winxed'; 'Compiler'; 'OpGreaterEqualExpr' ] 10019 10020.sub 'clone' :method 10021 .param pmc __ARG_1 10022 new $P1, [ 'Winxed'; 'Compiler'; 'OpGreaterEqualExpr' ] 10023 .tailcall self.'clonebinary'($P1, __ARG_1) 10024 10025.end # clone 10026 10027 10028.sub 'isnegable' :method 10029 .return(1) 10030 10031.end # isnegable 10032 10033 10034.sub 'negated' :method 10035 new $P1, [ 'Winxed'; 'Compiler'; 'OpLessExpr' ] 10036 .tailcall $P1.'setfrom'(self) 10037 10038.end # negated 10039 10040 10041.sub 'int_op' :method 10042 .param int __ARG_1 10043 .param int __ARG_2 10044 isge $I1, __ARG_1, __ARG_2 10045 .return($I1) 10046 10047.end # int_op 10048 10049 10050.sub 'emitop' :method 10051 .param pmc __ARG_1 10052 .param string __ARG_2 10053 .param string __ARG_3 10054 .param string __ARG_4 10055 __ARG_1.'emitbinop'("isge", __ARG_2, __ARG_3, __ARG_4) 10056 10057.end # emitop 10058 10059 10060.sub 'emitop_if' :method 10061 .param pmc __ARG_1 10062 .param string __ARG_2 10063 .param string __ARG_3 10064 .param string __ARG_4 10065 __ARG_1.'emitcompare'("ge", __ARG_3, __ARG_4, __ARG_2) 10066 10067.end # emitop_if 10068 10069 10070.sub 'emitop_else' :method 10071 .param pmc __ARG_1 10072 .param string __ARG_2 10073 .param string __ARG_3 10074 .param string __ARG_4 10075 __ARG_1.'emitcompare'("lt", __ARG_3, __ARG_4, __ARG_2) 10076 10077.end # emitop_else 10078 10079.sub Winxed_class_init :anon :load :init 10080 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpGreaterEqualExpr' ] 10081 get_class $P1, [ 'Winxed'; 'Compiler'; 'ComparatorBaseExpr' ] 10082 addparent $P0, $P1 10083.end 10084.namespace [ 'Winxed'; 'Compiler'; 'OpBaseBoolExpr' ] 10085 10086.sub 'checkresult' :method 10087 getattribute $P2, self, 'lexpr' 10088 $P1 = $P2.'checkresult'() 10089 set $S2, $P1 10090 ne $S2, "I", __label_2 10091 getattribute $P4, self, 'rexpr' 10092 $P3 = $P4.'checkresult'() 10093 set $S3, $P3 10094 ne $S3, "I", __label_2 10095 set $S1, "I" 10096 goto __label_1 10097 __label_2: 10098 set $S1, "P" 10099 __label_1: 10100 .return($S1) 10101 10102.end # checkresult 10103 10104.sub Winxed_class_init :anon :load :init 10105 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpBaseBoolExpr' ] 10106 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBinaryExpr' ] 10107 addparent $P0, $P1 10108.end 10109.namespace [ 'Winxed'; 'Compiler'; 'OpBoolAndExpr' ] 10110 10111.sub 'OpBoolAndExpr' :method 10112 .param pmc __ARG_1 10113 .param pmc __ARG_2 10114 .param pmc __ARG_3 10115 .param pmc __ARG_4 10116 self.'set'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 10117 10118.end # OpBoolAndExpr 10119 10120 10121.sub 'clone' :method 10122 .param pmc __ARG_1 10123 new $P1, [ 'Winxed'; 'Compiler'; 'OpBoolAndExpr' ] 10124 .tailcall self.'clonebinary'($P1, __ARG_1) 10125 10126.end # clone 10127 10128 10129.sub 'optimize' :method 10130.const 'Sub' integerValue = "integerValue" 10131 self.'optimizearg'() 10132 getattribute $P2, self, 'lexpr' 10133 $P1 = $P2.'isintegerliteral'() 10134 if_null $P1, __label_1 10135 unless $P1 goto __label_1 10136 getattribute $P4, self, 'lexpr' 10137 $P3 = $P4.'getIntegerValue'() 10138 set $I1, $P3 10139 unless $I1 goto __label_3 10140 getattribute $P1, self, 'rexpr' 10141 goto __label_2 10142 __label_3: 10143 getattribute $P3, self, 'owner' 10144 getattribute $P4, self, 'start' 10145 $P2 = integerValue($P3, $P4, $I1) 10146 set $P1, $P2 10147 __label_2: 10148 .return($P1) 10149 __label_1: # endif 10150 .return(self) 10151 10152.end # optimize 10153 10154 10155.sub 'emit' :method 10156 .param pmc __ARG_1 10157 .param string __ARG_2 10158 getattribute $P1, self, 'lexpr' 10159 getattribute $P2, self, 'rexpr' 10160 $P3 = self.'checkresult'() 10161 null $S1 10162 if_null $P3, __label_1 10163 set $S1, $P3 10164 __label_1: 10165 ne $S1, "I", __label_2 10166 $P3 = $P1.'issimple'() 10167 unless $P3 goto __label_2 10168 $P4 = $P2.'issimple'() 10169 unless $P4 goto __label_2 10170 $P5 = self.'emit_intleft'(__ARG_1) 10171 null $S2 10172 if_null $P5, __label_4 10173 set $S2, $P5 10174 __label_4: 10175 $P3 = self.'emit_intright'(__ARG_1) 10176 null $S3 10177 if_null $P3, __label_5 10178 set $S3, $P3 10179 __label_5: 10180 __ARG_1.'emitbinop'("and", __ARG_2, $S2, $S3) 10181 goto __label_3 10182 __label_2: # else 10183 $P3 = self.'genlabel'() 10184 null $S4 10185 if_null $P3, __label_6 10186 set $S4, $P3 10187 __label_6: 10188 ne $S1, "P", __label_7 10189 $P3 = $P1.'checkresult'() 10190 set $S7, $P3 10191 eq $S7, "P", __label_7 10192 $P4 = $P1.'emit_get'(__ARG_1) 10193 null $S5 10194 if_null $P4, __label_9 10195 set $S5, $P4 10196 __label_9: 10197 __ARG_1.'emitbox'(__ARG_2, $S5) 10198 goto __label_8 10199 __label_7: # else 10200 $P1.'emit'(__ARG_1, __ARG_2) 10201 __label_8: # endif 10202 __ARG_1.'emitunless'(__ARG_2, $S4) 10203 ne $S1, "P", __label_10 10204 $P3 = $P2.'checkresult'() 10205 set $S7, $P3 10206 eq $S7, "P", __label_10 10207 $P4 = $P2.'emit_get'(__ARG_1) 10208 null $S6 10209 if_null $P4, __label_12 10210 set $S6, $P4 10211 __label_12: 10212 __ARG_1.'emitbox'(__ARG_2, $S6) 10213 goto __label_11 10214 __label_10: # else 10215 $P2.'emit'(__ARG_1, __ARG_2) 10216 __label_11: # endif 10217 __ARG_1.'emitlabel'($S4) 10218 __label_3: # endif 10219 10220.end # emit 10221 10222 10223.sub 'emit_void' :method 10224 .param pmc __ARG_1 10225 getattribute $P1, self, 'lexpr' 10226 getattribute $P2, self, 'rexpr' 10227 $P3 = self.'checkresult'() 10228 null $S1 10229 if_null $P3, __label_1 10230 set $S1, $P3 10231 __label_1: 10232 ne $S1, "I", __label_2 10233 $P3 = $P1.'issimple'() 10234 unless $P3 goto __label_2 10235 $P4 = $P2.'issimple'() 10236 unless $P4 goto __label_2 10237 $P5 = self.'emit_intleft'(__ARG_1) 10238 null $S2 10239 if_null $P5, __label_4 10240 set $S2, $P5 10241 __label_4: 10242 $P3 = self.'emit_intright'(__ARG_1) 10243 null $S3 10244 if_null $P3, __label_5 10245 set $S3, $P3 10246 __label_5: 10247 __ARG_1.'emitbinop'("and", "$I0", $S2, $S3) 10248 goto __label_3 10249 __label_2: # else 10250 $P3 = self.'genlabel'() 10251 null $S4 10252 if_null $P3, __label_6 10253 set $S4, $P3 10254 __label_6: 10255 $P3 = $P1.'emit_get'(__ARG_1) 10256 null $S5 10257 if_null $P3, __label_7 10258 set $S5, $P3 10259 __label_7: 10260 __ARG_1.'emitunless'($S5, $S4) 10261 $P2.'emit_void'(__ARG_1) 10262 __ARG_1.'emitlabel'($S4) 10263 __label_3: # endif 10264 10265.end # emit_void 10266 10267 10268.sub 'emit_else' :method 10269 .param pmc __ARG_1 10270 .param string __ARG_2 10271 getattribute $P1, self, 'lexpr' 10272 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'ConditionFriendlyElse' ] 10273 unless $I1 goto __label_1 10274 $P1.'emit_else'(__ARG_1, __ARG_2) 10275 goto __label_2 10276 __label_1: # else 10277 $P3 = $P1.'emit_get'(__ARG_1) 10278 null $S1 10279 if_null $P3, __label_3 10280 set $S1, $P3 10281 __label_3: 10282 __ARG_1.'emitunless'($S1, __ARG_2) 10283 __label_2: # endif 10284 getattribute $P2, self, 'rexpr' 10285 isa $I1, $P2, [ 'Winxed'; 'Compiler'; 'ConditionFriendlyElse' ] 10286 unless $I1 goto __label_4 10287 $P2.'emit_else'(__ARG_1, __ARG_2) 10288 goto __label_5 10289 __label_4: # else 10290 $P3 = $P2.'emit_get'(__ARG_1) 10291 null $S2 10292 if_null $P3, __label_6 10293 set $S2, $P3 10294 __label_6: 10295 __ARG_1.'emitunless'($S2, __ARG_2) 10296 __label_5: # endif 10297 10298.end # emit_else 10299 10300.sub Winxed_class_init :anon :load :init 10301 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpBoolAndExpr' ] 10302 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBaseBoolExpr' ] 10303 addparent $P0, $P1 10304 get_class $P2, [ 'Winxed'; 'Compiler'; 'ConditionFriendlyElse' ] 10305 addparent $P0, $P2 10306.end 10307.namespace [ 'Winxed'; 'Compiler'; 'OpBoolOrExpr' ] 10308 10309.sub 'OpBoolOrExpr' :method 10310 .param pmc __ARG_1 10311 .param pmc __ARG_2 10312 .param pmc __ARG_3 10313 .param pmc __ARG_4 10314 self.'set'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 10315 10316.end # OpBoolOrExpr 10317 10318 10319.sub 'clone' :method 10320 .param pmc __ARG_1 10321 new $P1, [ 'Winxed'; 'Compiler'; 'OpBoolOrExpr' ] 10322 .tailcall self.'clonebinary'($P1, __ARG_1) 10323 10324.end # clone 10325 10326 10327.sub 'optimize' :method 10328.const 'Sub' integerValue = "integerValue" 10329 self.'optimizearg'() 10330 getattribute $P2, self, 'lexpr' 10331 $P1 = $P2.'isintegerliteral'() 10332 if_null $P1, __label_1 10333 unless $P1 goto __label_1 10334 getattribute $P4, self, 'lexpr' 10335 $P3 = $P4.'getIntegerValue'() 10336 set $I1, $P3 10337 if $I1 goto __label_3 10338 getattribute $P1, self, 'rexpr' 10339 goto __label_2 10340 __label_3: 10341 getattribute $P3, self, 'owner' 10342 getattribute $P4, self, 'start' 10343 $P2 = integerValue($P3, $P4, $I1) 10344 set $P1, $P2 10345 __label_2: 10346 .return($P1) 10347 __label_1: # endif 10348 .return(self) 10349 10350.end # optimize 10351 10352 10353.sub 'emit' :method 10354 .param pmc __ARG_1 10355 .param string __ARG_2 10356 getattribute $P1, self, 'lexpr' 10357 getattribute $P2, self, 'rexpr' 10358 $P3 = self.'checkresult'() 10359 null $S1 10360 if_null $P3, __label_1 10361 set $S1, $P3 10362 __label_1: 10363 ne $S1, "I", __label_2 10364 $P3 = $P1.'issimple'() 10365 unless $P3 goto __label_2 10366 $P4 = $P2.'issimple'() 10367 unless $P4 goto __label_2 10368 $P5 = self.'emit_intleft'(__ARG_1) 10369 null $S2 10370 if_null $P5, __label_4 10371 set $S2, $P5 10372 __label_4: 10373 $P3 = self.'emit_intright'(__ARG_1) 10374 null $S3 10375 if_null $P3, __label_5 10376 set $S3, $P3 10377 __label_5: 10378 __ARG_1.'emitbinop'("or", __ARG_2, $S2, $S3) 10379 goto __label_3 10380 __label_2: # else 10381 $P3 = self.'genlabel'() 10382 null $S4 10383 if_null $P3, __label_6 10384 set $S4, $P3 10385 __label_6: 10386 ne $S1, "P", __label_7 10387 $P3 = $P1.'checkresult'() 10388 set $S7, $P3 10389 eq $S7, "P", __label_7 10390 $P4 = $P1.'emit_get'(__ARG_1) 10391 null $S5 10392 if_null $P4, __label_9 10393 set $S5, $P4 10394 __label_9: 10395 __ARG_1.'emitbox'(__ARG_2, $S5) 10396 goto __label_8 10397 __label_7: # else 10398 $P1.'emit'(__ARG_1, __ARG_2) 10399 __label_8: # endif 10400 __ARG_1.'emitif'(__ARG_2, $S4) 10401 ne $S1, "P", __label_10 10402 $P3 = $P2.'checkresult'() 10403 set $S7, $P3 10404 eq $S7, "P", __label_10 10405 $P4 = $P2.'emit_get'(__ARG_1) 10406 null $S6 10407 if_null $P4, __label_12 10408 set $S6, $P4 10409 __label_12: 10410 __ARG_1.'emitbox'(__ARG_2, $S6) 10411 goto __label_11 10412 __label_10: # else 10413 $P2.'emit'(__ARG_1, __ARG_2) 10414 __label_11: # endif 10415 __ARG_1.'emitlabel'($S4) 10416 __label_3: # endif 10417 10418.end # emit 10419 10420 10421.sub 'emit_void' :method 10422 .param pmc __ARG_1 10423 getattribute $P1, self, 'lexpr' 10424 getattribute $P2, self, 'rexpr' 10425 $P3 = self.'checkresult'() 10426 null $S1 10427 if_null $P3, __label_1 10428 set $S1, $P3 10429 __label_1: 10430 ne $S1, "I", __label_2 10431 $P3 = $P1.'issimple'() 10432 unless $P3 goto __label_2 10433 $P4 = $P2.'issimple'() 10434 unless $P4 goto __label_2 10435 $P5 = self.'emit_intleft'(__ARG_1) 10436 null $S2 10437 if_null $P5, __label_4 10438 set $S2, $P5 10439 __label_4: 10440 $P3 = self.'emit_intright'(__ARG_1) 10441 null $S3 10442 if_null $P3, __label_5 10443 set $S3, $P3 10444 __label_5: 10445 __ARG_1.'emitbinop'("or", "$I0", $S2, $S3) 10446 goto __label_3 10447 __label_2: # else 10448 $P3 = self.'genlabel'() 10449 null $S4 10450 if_null $P3, __label_6 10451 set $S4, $P3 10452 __label_6: 10453 $P3 = $P1.'emit_get'(__ARG_1) 10454 null $S5 10455 if_null $P3, __label_7 10456 set $S5, $P3 10457 __label_7: 10458 __ARG_1.'emitif'($S5, $S4) 10459 $P2.'emit_void'(__ARG_1) 10460 __ARG_1.'emitlabel'($S4) 10461 __label_3: # endif 10462 10463.end # emit_void 10464 10465.sub Winxed_class_init :anon :load :init 10466 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpBoolOrExpr' ] 10467 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBaseBoolExpr' ] 10468 addparent $P0, $P1 10469.end 10470.namespace [ 'Winxed'; 'Compiler'; 'OpBaseBinExpr' ] 10471.sub Winxed_class_init :anon :load :init 10472 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpBaseBinExpr' ] 10473 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBinaryIntExpr' ] 10474 addparent $P0, $P1 10475.end 10476.namespace [ 'Winxed'; 'Compiler'; 'OpBinAndExpr' ] 10477 10478.sub 'OpBinAndExpr' :method 10479 .param pmc __ARG_1 10480 .param pmc __ARG_2 10481 .param pmc __ARG_3 10482 .param pmc __ARG_4 10483 self.'set'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 10484 10485.end # OpBinAndExpr 10486 10487 10488.sub 'clone' :method 10489 .param pmc __ARG_1 10490 new $P1, [ 'Winxed'; 'Compiler'; 'OpBinAndExpr' ] 10491 .tailcall self.'clonebinary'($P1, __ARG_1) 10492 10493.end # clone 10494 10495 10496.sub 'emit' :method 10497 .param pmc __ARG_1 10498 .param string __ARG_2 10499 $P1 = self.'emit_intleft'(__ARG_1) 10500 null $S1 10501 if_null $P1, __label_1 10502 set $S1, $P1 10503 __label_1: 10504 $P1 = self.'emit_intright'(__ARG_1) 10505 null $S2 10506 if_null $P1, __label_2 10507 set $S2, $P1 10508 __label_2: 10509 self.'annotate'(__ARG_1) 10510 __ARG_1.'emitbinop'("band", __ARG_2, $S1, $S2) 10511 10512.end # emit 10513 10514 10515.sub 'do_op' :method 10516 .param int __ARG_1 10517 .param int __ARG_2 10518 band $I1, __ARG_1, __ARG_2 10519 .return($I1) 10520 10521.end # do_op 10522 10523.sub Winxed_class_init :anon :load :init 10524 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpBinAndExpr' ] 10525 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBaseBinExpr' ] 10526 addparent $P0, $P1 10527.end 10528.namespace [ 'Winxed'; 'Compiler'; 'OpBinOrExpr' ] 10529 10530.sub 'OpBinOrExpr' :method 10531 .param pmc __ARG_1 10532 .param pmc __ARG_2 10533 .param pmc __ARG_3 10534 .param pmc __ARG_4 10535 self.'set'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 10536 10537.end # OpBinOrExpr 10538 10539 10540.sub 'clone' :method 10541 .param pmc __ARG_1 10542 new $P1, [ 'Winxed'; 'Compiler'; 'OpBinOrExpr' ] 10543 .tailcall self.'clonebinary'($P1, __ARG_1) 10544 10545.end # clone 10546 10547 10548.sub 'emit' :method 10549 .param pmc __ARG_1 10550 .param string __ARG_2 10551 $P1 = self.'emit_intleft'(__ARG_1) 10552 null $S1 10553 if_null $P1, __label_1 10554 set $S1, $P1 10555 __label_1: 10556 $P1 = self.'emit_intright'(__ARG_1) 10557 null $S2 10558 if_null $P1, __label_2 10559 set $S2, $P1 10560 __label_2: 10561 self.'annotate'(__ARG_1) 10562 __ARG_1.'emitbinop'("bor", __ARG_2, $S1, $S2) 10563 10564.end # emit 10565 10566 10567.sub 'do_op' :method 10568 .param int __ARG_1 10569 .param int __ARG_2 10570 bor $I1, __ARG_1, __ARG_2 10571 .return($I1) 10572 10573.end # do_op 10574 10575.sub Winxed_class_init :anon :load :init 10576 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpBinOrExpr' ] 10577 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBaseBinExpr' ] 10578 addparent $P0, $P1 10579.end 10580.namespace [ 'Winxed'; 'Compiler'; 'OpBinXorExpr' ] 10581 10582.sub 'OpBinXorExpr' :method 10583 .param pmc __ARG_1 10584 .param pmc __ARG_2 10585 .param pmc __ARG_3 10586 .param pmc __ARG_4 10587 self.'set'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 10588 10589.end # OpBinXorExpr 10590 10591 10592.sub 'clone' :method 10593 .param pmc __ARG_1 10594 new $P1, [ 'Winxed'; 'Compiler'; 'OpBinXorExpr' ] 10595 .tailcall self.'clonebinary'($P1, __ARG_1) 10596 10597.end # clone 10598 10599 10600.sub 'emit' :method 10601 .param pmc __ARG_1 10602 .param string __ARG_2 10603 $P1 = self.'emit_intleft'(__ARG_1) 10604 null $S1 10605 if_null $P1, __label_1 10606 set $S1, $P1 10607 __label_1: 10608 $P1 = self.'emit_intright'(__ARG_1) 10609 null $S2 10610 if_null $P1, __label_2 10611 set $S2, $P1 10612 __label_2: 10613 self.'annotate'(__ARG_1) 10614 __ARG_1.'emitbinop'("bxor", __ARG_2, $S1, $S2) 10615 10616.end # emit 10617 10618 10619.sub 'do_op' :method 10620 .param int __ARG_1 10621 .param int __ARG_2 10622 bxor $I1, __ARG_1, __ARG_2 10623 .return($I1) 10624 10625.end # do_op 10626 10627.sub Winxed_class_init :anon :load :init 10628 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpBinXorExpr' ] 10629 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBaseBinExpr' ] 10630 addparent $P0, $P1 10631.end 10632.namespace [ 'Winxed'; 'Compiler'; 'ConcatString' ] 10633 10634.sub 'ConcatString' :method 10635 .param pmc __ARG_1 10636 .param pmc __ARG_2 10637 .param pmc __ARG_3 10638 .param pmc __ARG_4 10639 self.'Expr'(__ARG_1, __ARG_2) 10640 isa $I1, __ARG_3, [ 'Winxed'; 'Compiler'; 'ConcatString' ] 10641 if $I1 goto __label_3 10642 isa $I2, __ARG_4, [ 'Winxed'; 'Compiler'; 'ConcatString' ] 10643 if $I2 goto __label_4 10644 goto __label_2 10645 __label_3: # case 10646 getattribute $P2, __ARG_3, 'values' 10647 setattribute self, 'values', $P2 10648 isa $I3, __ARG_4, [ 'Winxed'; 'Compiler'; 'ConcatString' ] 10649 unless $I3 goto __label_5 10650 getattribute $P3, __ARG_4, 'values' 10651 self.'append'($P3) 10652 goto __label_6 10653 __label_5: # else 10654 self.'pushexpr'(__ARG_4) 10655 __label_6: # endif 10656 goto __label_1 # break 10657 __label_4: # case 10658 getattribute $P5, __ARG_4, 'values' 10659 setattribute self, 'values', $P5 10660 self.'unshiftexpr'(__ARG_3) 10661 goto __label_1 # break 10662 __label_2: # default 10663 root_new $P7, ['parrot';'ResizablePMCArray'] 10664 assign $P7, 2 10665 $P7[0] = __ARG_3 10666 $P7[1] = __ARG_4 10667 setattribute self, 'values', $P7 10668 __label_1: # switch end 10669 10670.end # ConcatString 10671 10672 10673.sub 'pushexpr' :method 10674 .param pmc __ARG_1 10675.const 'Sub' WSubId_104 = "WSubId_104" 10676 getattribute $P1, self, 'values' 10677 $P2 = $P1[-1] 10678 $P3 = $P2.'isstringliteral'() 10679 unless $P3 goto __label_1 10680 $P4 = __ARG_1.'isstringliteral'() 10681 unless $P4 goto __label_1 10682 $P5 = WSubId_104($P2, __ARG_1) 10683 $P1[-1] = $P5 10684 goto __label_2 10685 __label_1: # else 10686 push $P1, __ARG_1 10687 __label_2: # endif 10688 10689.end # pushexpr 10690 10691 10692.sub 'unshiftexpr' :method 10693 .param pmc __ARG_1 10694.const 'Sub' WSubId_104 = "WSubId_104" 10695 getattribute $P1, self, 'values' 10696 $P2 = $P1[0] 10697 $P3 = $P2.'isstringliteral'() 10698 unless $P3 goto __label_1 10699 $P4 = __ARG_1.'isstringliteral'() 10700 unless $P4 goto __label_1 10701 $P5 = WSubId_104(__ARG_1, $P2) 10702 $P1[0] = $P5 10703 goto __label_2 10704 __label_1: # else 10705 unshift $P1, __ARG_1 10706 __label_2: # endif 10707 10708.end # unshiftexpr 10709 10710 10711.sub 'append' :method 10712 .param pmc __ARG_1 10713.const 'Sub' WSubId_104 = "WSubId_104" 10714 getattribute $P1, self, 'values' 10715 $P2 = $P1[-1] 10716 $P4 = $P2.'isstringliteral'() 10717 if_null $P4, __label_1 10718 unless $P4 goto __label_1 10719 $P3 = __ARG_1[0] 10720 $P4 = $P3.'isstringliteral'() 10721 if_null $P4, __label_2 10722 unless $P4 goto __label_2 10723 $P5 = WSubId_104($P2, $P3) 10724 $P1[-1] = $P5 10725 __ARG_1.'shift'() 10726 __label_2: # endif 10727 __label_1: # endif 10728 $P1.'append'(__ARG_1) 10729 10730.end # append 10731 10732 10733.sub 'checkresult' :method 10734 .return("S") 10735 10736.end # checkresult 10737 10738 10739.sub 'getregs' :method 10740 .param pmc __ARG_1 10741 getattribute $P1, self, 'values' 10742 elements $I1, $P1 10743 new $P2, ['FixedStringArray'], $I1 10744 null $I2 10745 __label_3: # for condition 10746 ge $I2, $I1, __label_2 10747 $P3 = $P1[$I2] 10748 $S1 = $P3.'emit_get'(__ARG_1) 10749 $P2[$I2] = $S1 10750 __label_1: # for iteration 10751 inc $I2 10752 goto __label_3 10753 __label_2: # for end 10754 .return($P2) 10755 10756.end # getregs 10757 10758 10759.sub 'emit' :method 10760 .param pmc __ARG_1 10761 .param string __ARG_2 10762 $P1 = self.'emit_get'(__ARG_1) 10763 null $S1 10764 if_null $P1, __label_1 10765 set $S1, $P1 10766 __label_1: 10767 __ARG_1.'emitset'(__ARG_2, $S1) 10768 10769.end # emit 10770 10771 10772.sub 'emit_get' :method 10773 .param pmc __ARG_1 10774 $P1 = self.'getregs'(__ARG_1) 10775 elements $I1, $P1 10776 $P2 = self.'tempreg'("S") 10777 null $S1 10778 if_null $P2, __label_1 10779 set $S1, $P2 10780 __label_1: 10781 self.'annotate'(__ARG_1) 10782 $P2 = $P1[0] 10783 $P3 = $P1[1] 10784 __ARG_1.'emitconcat'($S1, $P2, $P3) 10785 set $I2, 2 10786 __label_4: # for condition 10787 ge $I2, $I1, __label_3 10788 $P2 = $P1[$I2] 10789 __ARG_1.'emitconcat1'($S1, $P2) 10790 __label_2: # for iteration 10791 inc $I2 10792 goto __label_4 10793 __label_3: # for end 10794 .return($S1) 10795 10796.end # emit_get 10797 10798 10799.sub 'emit_init' :method 10800 .param pmc __ARG_1 10801 .param string __ARG_2 10802 $P1 = self.'getregs'(__ARG_1) 10803 elements $I1, $P1 10804 self.'annotate'(__ARG_1) 10805 $P2 = $P1[0] 10806 $P3 = $P1[1] 10807 __ARG_1.'emitconcat'(__ARG_2, $P2, $P3) 10808 set $I2, 2 10809 __label_3: # for condition 10810 ge $I2, $I1, __label_2 10811 $P2 = $P1[$I2] 10812 __ARG_1.'emitconcat1'(__ARG_2, $P2) 10813 __label_1: # for iteration 10814 inc $I2 10815 goto __label_3 10816 __label_2: # for end 10817 10818.end # emit_init 10819 10820 10821.sub 'emit_concat_to' :method 10822 .param pmc __ARG_1 10823 .param string __ARG_2 10824 $P1 = self.'getregs'(__ARG_1) 10825 elements $I1, $P1 10826 self.'annotate'(__ARG_1) 10827 null $I2 10828 __label_3: # for condition 10829 ge $I2, $I1, __label_2 10830 $P2 = $P1[$I2] 10831 __ARG_1.'emitconcat1'(__ARG_2, $P2) 10832 __label_1: # for iteration 10833 inc $I2 10834 goto __label_3 10835 __label_2: # for end 10836 10837.end # emit_concat_to 10838 10839.sub Winxed_class_init :anon :load :init 10840 newclass $P0, [ 'Winxed'; 'Compiler'; 'ConcatString' ] 10841 get_class $P1, [ 'Winxed'; 'Compiler'; 'FinalExpr' ] 10842 addparent $P0, $P1 10843 addattribute $P0, 'values' 10844.end 10845.namespace [ 'Winxed'; 'Compiler'; 'RepeatString' ] 10846 10847.sub 'RepeatString' :method 10848 .param pmc __ARG_1 10849 getattribute $P1, __ARG_1, 'owner' 10850 getattribute $P2, __ARG_1, 'start' 10851 getattribute $P3, __ARG_1, 'lexpr' 10852 getattribute $P4, __ARG_1, 'rexpr' 10853 self.'set'($P1, $P2, $P3, $P4) 10854 10855.end # RepeatString 10856 10857 10858.sub 'checkresult' :method 10859 .return("S") 10860 10861.end # checkresult 10862 10863 10864.sub 'emit' :method 10865 .param pmc __ARG_1 10866 .param string __ARG_2 10867 getattribute $P1, self, 'rexpr' 10868 getattribute $P3, self, 'lexpr' 10869 $P2 = $P3.'emit_get'(__ARG_1) 10870 null $S1 10871 if_null $P2, __label_1 10872 set $S1, $P2 10873 __label_1: 10874 $P2 = $P1.'emit_getint'(__ARG_1) 10875 null $S2 10876 if_null $P2, __label_2 10877 set $S2, $P2 10878 __label_2: 10879 self.'annotate'(__ARG_1) 10880 __ARG_1.'emitrepeat'(__ARG_2, $S1, $S2) 10881 10882.end # emit 10883 10884.sub Winxed_class_init :anon :load :init 10885 newclass $P0, [ 'Winxed'; 'Compiler'; 'RepeatString' ] 10886 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBinaryExpr' ] 10887 addparent $P0, $P1 10888.end 10889.namespace [ 'Winxed'; 'Compiler'; 'OpAddExpr' ] 10890 10891.sub 'OpAddExpr' :method 10892 .param pmc __ARG_1 10893 .param pmc __ARG_2 10894 .param pmc __ARG_3 10895 .param pmc __ARG_4 10896 self.'set'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 10897 10898.end # OpAddExpr 10899 10900 10901.sub 'clone' :method 10902 .param pmc __ARG_1 10903 new $P1, [ 'Winxed'; 'Compiler'; 'OpAddExpr' ] 10904 .tailcall self.'clonebinary'($P1, __ARG_1) 10905 10906.end # clone 10907 10908 10909.sub 'optimize' :method 10910.const 'Sub' WSubId_104 = "WSubId_104" 10911.const 'Sub' integerValue = "integerValue" 10912.const 'Sub' WSubId_105 = "WSubId_105" 10913.const 'Sub' WSubId_100 = "WSubId_100" 10914 self.'optimizearg'() 10915 getattribute $P1, self, 'lexpr' 10916 getattribute $P2, self, 'rexpr' 10917 $P3 = $P1.'checkresult'() 10918 null $S1 10919 if_null $P3, __label_1 10920 set $S1, $P3 10921 __label_1: 10922 $P3 = $P2.'checkresult'() 10923 null $S2 10924 if_null $P3, __label_2 10925 set $S2, $P3 10926 __label_2: 10927 $P3 = $P1.'isliteral'() 10928 unless $P3 goto __label_3 10929 $P4 = $P2.'isliteral'() 10930 unless $P4 goto __label_3 10931 ne $S1, "S", __label_4 10932 ne $S2, "S", __label_4 10933 .tailcall WSubId_104($P1, $P2) 10934 __label_4: # endif 10935 ne $S1, "I", __label_5 10936 ne $S2, "I", __label_5 10937 $P3 = $P1.'getIntegerValue'() 10938 set $I1, $P3 10939 $P3 = $P2.'getIntegerValue'() 10940 set $I2, $P3 10941 getattribute $P3, self, 'owner' 10942 getattribute $P4, self, 'start' 10943 add $I3, $I1, $I2 10944 .tailcall integerValue($P3, $P4, $I3) 10945 __label_5: # endif 10946 $P3 = WSubId_105($S1, $S2) 10947 if_null $P3, __label_6 10948 unless $P3 goto __label_6 10949 $P4 = $P1.'getFloatValue'() 10950 set $N1, $P4 10951 $P3 = $P2.'getFloatValue'() 10952 set $N2, $P3 10953 getattribute $P3, self, 'owner' 10954 getattribute $P4, self, 'start' 10955 add $N3, $N1, $N2 10956 .tailcall WSubId_100($P3, $P4, $N3) 10957 __label_6: # endif 10958 __label_3: # endif 10959 ne $S1, "S", __label_7 10960 ne $S2, "S", __label_7 10961 new $P4, [ 'Winxed'; 'Compiler'; 'ConcatString' ] 10962 getattribute $P5, self, 'owner' 10963 getattribute $P6, self, 'start' 10964 $P4.'ConcatString'($P5, $P6, $P1, $P2) 10965 set $P3, $P4 10966 .return($P3) 10967 __label_7: # endif 10968 .return(self) 10969 10970.end # optimize 10971 10972 10973.sub 'checkresult' :method 10974.const 'Sub' WSubId_105 = "WSubId_105" 10975 getattribute $P2, self, 'lexpr' 10976 $P1 = $P2.'checkresult'() 10977 null $S1 10978 if_null $P1, __label_1 10979 set $S1, $P1 10980 __label_1: 10981 getattribute $P2, self, 'rexpr' 10982 $P1 = $P2.'checkresult'() 10983 null $S2 10984 if_null $P1, __label_2 10985 set $S2, $P1 10986 __label_2: 10987 ne $S1, $S2, __label_3 10988 .return($S1) 10989 __label_3: # endif 10990 ne $S1, "I", __label_4 10991 ne $S2, "S", __label_4 10992 .return("S") 10993 __label_4: # endif 10994 ne $S1, "S", __label_5 10995 ne $S2, "I", __label_5 10996 .return("S") 10997 __label_5: # endif 10998 $P1 = WSubId_105($S1, $S2) 10999 if_null $P1, __label_6 11000 unless $P1 goto __label_6 11001 .return("N") 11002 __label_6: # endif 11003 .return("I") 11004 11005.end # checkresult 11006 11007 11008.sub 'emit' :method 11009 .param pmc __ARG_1 11010 .param string __ARG_2 11011 getattribute $P1, self, 'lexpr' 11012 getattribute $P2, self, 'rexpr' 11013 $P3 = self.'checkresult'() 11014 null $S1 11015 if_null $P3, __label_1 11016 set $S1, $P3 11017 __label_1: 11018 $P3 = $P1.'checkresult'() 11019 null $S2 11020 if_null $P3, __label_2 11021 set $S2, $P3 11022 __label_2: 11023 $P3 = $P2.'checkresult'() 11024 null $S3 11025 if_null $P3, __label_3 11026 set $S3, $P3 11027 __label_3: 11028 $P3 = $P1.'emit_get'(__ARG_1) 11029 null $S4 11030 if_null $P3, __label_4 11031 set $S4, $P3 11032 __label_4: 11033 $P3 = $P2.'emit_get'(__ARG_1) 11034 null $S5 11035 if_null $P3, __label_5 11036 set $S5, $P3 11037 __label_5: 11038 ne $S1, "S", __label_6 11039 isne $I1, $S2, "S" 11040 if $I1 goto __label_9 11041 isne $I1, $S3, "S" 11042 __label_9: 11043 unless $I1 goto __label_8 11044 $P3 = self.'tempreg'("S") 11045 null $S6 11046 if_null $P3, __label_10 11047 set $S6, $P3 11048 __label_10: 11049 eq $S2, "S", __label_11 11050 __ARG_1.'emitset'($S6, $S4) 11051 set $S4, $S6 11052 goto __label_12 11053 __label_11: # else 11054 __ARG_1.'emitset'($S6, $S5) 11055 set $S5, $S6 11056 __label_12: # endif 11057 __label_8: # endif 11058 __ARG_1.'emitconcat'(__ARG_2, $S4, $S5) 11059 goto __label_7 11060 __label_6: # else 11061 ne $S1, "I", __label_13 11062 isne $I1, $S2, "I" 11063 if $I1 goto __label_15 11064 isne $I1, $S3, "I" 11065 __label_15: 11066 unless $I1 goto __label_13 11067 null $S7 11068 ne $S2, "I", __label_16 11069 set $S7, $S4 11070 goto __label_17 11071 __label_16: # else 11072 $P3 = self.'tempreg'("I") 11073 set $S7, $P3 11074 __ARG_1.'emitset'($S7, $S4) 11075 __label_17: # endif 11076 null $S8 11077 ne $S3, "I", __label_18 11078 set $S8, $S5 11079 goto __label_19 11080 __label_18: # else 11081 $P3 = self.'tempreg'("I") 11082 set $S8, $P3 11083 __ARG_1.'emitset'($S8, $S5) 11084 __label_19: # endif 11085 __ARG_1.'emitadd'(__ARG_2, $S7, $S8) 11086 goto __label_14 11087 __label_13: # else 11088 __ARG_1.'emitadd'(__ARG_2, $S4, $S5) 11089 __label_14: # endif 11090 __label_7: # endif 11091 11092.end # emit 11093 11094.sub Winxed_class_init :anon :load :init 11095 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpAddExpr' ] 11096 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBinaryExpr' ] 11097 addparent $P0, $P1 11098.end 11099.namespace [ 'Winxed'; 'Compiler'; 'OpSubExpr' ] 11100 11101.sub 'OpSubExpr' :method 11102 .param pmc __ARG_1 11103 .param pmc __ARG_2 11104 .param pmc __ARG_3 11105 .param pmc __ARG_4 11106 self.'set'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 11107 11108.end # OpSubExpr 11109 11110 11111.sub 'clone' :method 11112 .param pmc __ARG_1 11113 new $P1, [ 'Winxed'; 'Compiler'; 'OpSubExpr' ] 11114 .tailcall self.'clonebinary'($P1, __ARG_1) 11115 11116.end # clone 11117 11118 11119.sub 'optimize' :method 11120.const 'Sub' integerValue = "integerValue" 11121 self.'optimizearg'() 11122 getattribute $P1, self, 'lexpr' 11123 getattribute $P2, self, 'rexpr' 11124 $P3 = $P1.'isliteral'() 11125 unless $P3 goto __label_1 11126 $P4 = $P2.'isliteral'() 11127 unless $P4 goto __label_1 11128 $P5 = $P1.'checkresult'() 11129 null $S1 11130 if_null $P5, __label_2 11131 set $S1, $P5 11132 __label_2: 11133 $P3 = $P2.'checkresult'() 11134 null $S2 11135 if_null $P3, __label_3 11136 set $S2, $P3 11137 __label_3: 11138 ne $S1, "I", __label_4 11139 ne $S2, "I", __label_4 11140 $P3 = $P1.'getIntegerValue'() 11141 set $I1, $P3 11142 $P3 = $P2.'getIntegerValue'() 11143 set $I2, $P3 11144 getattribute $P3, self, 'owner' 11145 getattribute $P4, self, 'start' 11146 sub $I3, $I1, $I2 11147 .tailcall integerValue($P3, $P4, $I3) 11148 __label_4: # endif 11149 __label_1: # endif 11150 .return(self) 11151 11152.end # optimize 11153 11154 11155.sub 'checkresult' :method 11156 getattribute $P2, self, 'lexpr' 11157 $P1 = $P2.'checkresult'() 11158 null $S1 11159 if_null $P1, __label_1 11160 set $S1, $P1 11161 __label_1: 11162 getattribute $P2, self, 'rexpr' 11163 $P1 = $P2.'checkresult'() 11164 null $S2 11165 if_null $P1, __label_2 11166 set $S2, $P1 11167 __label_2: 11168 eq $S1, $S2, __label_5 11169 iseq $I1, $S1, "P" 11170 if $I1 goto __label_7 11171 iseq $I1, $S2, "P" 11172 __label_7: 11173 if $I1 goto __label_6 11174 iseq $I2, $S1, "I" 11175 unless $I2 goto __label_9 11176 iseq $I2, $S2, "N" 11177 __label_9: 11178 if $I2 goto __label_8 11179 iseq $I3, $S1, "N" 11180 unless $I3 goto __label_11 11181 iseq $I3, $S2, "I" 11182 __label_11: 11183 if $I3 goto __label_10 11184 goto __label_4 11185 __label_5: # case 11186 .return($S1) 11187 __label_6: # case 11188 .return("P") 11189 __label_8: # case 11190 .return("N") 11191 __label_10: # case 11192 .return("N") 11193 __label_4: # default 11194 .return("I") 11195 __label_3: # switch end 11196 11197.end # checkresult 11198 11199 11200.sub 'emit' :method 11201 .param pmc __ARG_1 11202 .param string __ARG_2 11203 $P3 = self.'checkresult'() 11204 null $S1 11205 if_null $P3, __label_1 11206 set $S1, $P3 11207 __label_1: 11208 getattribute $P1, self, 'lexpr' 11209 getattribute $P2, self, 'rexpr' 11210 $P3 = $P1.'checkresult'() 11211 null $S2 11212 if_null $P3, __label_2 11213 set $S2, $P3 11214 __label_2: 11215 $P3 = $P2.'checkresult'() 11216 null $S3 11217 if_null $P3, __label_3 11218 set $S3, $P3 11219 __label_3: 11220 $P3 = $P1.'emit_get'(__ARG_1) 11221 null $S4 11222 if_null $P3, __label_4 11223 set $S4, $P3 11224 __label_4: 11225 $P3 = $P2.'emit_get'(__ARG_1) 11226 null $S5 11227 if_null $P3, __label_5 11228 set $S5, $P3 11229 __label_5: 11230 null $S6 11231 eq $S2, $S1, __label_6 11232 $P3 = self.'tempreg'($S1) 11233 set $S6, $P3 11234 ne $S1, "P", __label_7 11235 __ARG_1.'emitbox'($S6, $S4) 11236 goto __label_8 11237 __label_7: # else 11238 __ARG_1.'emitset'($S6, $S4) 11239 __label_8: # endif 11240 set $S4, $S6 11241 __label_6: # endif 11242 eq $S3, $S1, __label_9 11243 $P3 = self.'tempreg'($S1) 11244 set $S6, $P3 11245 ne $S1, "P", __label_10 11246 __ARG_1.'emitbox'($S6, $S5) 11247 goto __label_11 11248 __label_10: # else 11249 __ARG_1.'emitset'($S6, $S5) 11250 __label_11: # endif 11251 set $S5, $S6 11252 __label_9: # endif 11253 __ARG_1.'emitsub'(__ARG_2, $S4, $S5) 11254 11255.end # emit 11256 11257.sub Winxed_class_init :anon :load :init 11258 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpSubExpr' ] 11259 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBinaryExpr' ] 11260 addparent $P0, $P1 11261.end 11262.namespace [ 'Winxed'; 'Compiler'; 'OpMulExpr' ] 11263 11264.sub 'OpMulExpr' :method 11265 .param pmc __ARG_1 11266 .param pmc __ARG_2 11267 .param pmc __ARG_3 11268 .param pmc __ARG_4 11269 self.'set'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 11270 11271.end # OpMulExpr 11272 11273 11274.sub 'clone' :method 11275 .param pmc __ARG_1 11276 new $P1, [ 'Winxed'; 'Compiler'; 'OpMulExpr' ] 11277 .tailcall self.'clonebinary'($P1, __ARG_1) 11278 11279.end # clone 11280 11281 11282.sub 'optimize' :method 11283.const 'Sub' integerValue = "integerValue" 11284.const 'Sub' WSubId_105 = "WSubId_105" 11285.const 'Sub' WSubId_100 = "WSubId_100" 11286 self.'optimizearg'() 11287 getattribute $P1, self, 'lexpr' 11288 getattribute $P2, self, 'rexpr' 11289 $P3 = $P1.'checkresult'() 11290 null $S1 11291 if_null $P3, __label_1 11292 set $S1, $P3 11293 __label_1: 11294 $P3 = $P2.'checkresult'() 11295 null $S2 11296 if_null $P3, __label_2 11297 set $S2, $P3 11298 __label_2: 11299 $P3 = $P1.'isliteral'() 11300 unless $P3 goto __label_3 11301 $P4 = $P2.'isliteral'() 11302 unless $P4 goto __label_3 11303 ne $S1, "I", __label_4 11304 ne $S2, "I", __label_4 11305 $P5 = $P1.'getIntegerValue'() 11306 set $I1, $P5 11307 $P3 = $P2.'getIntegerValue'() 11308 set $I2, $P3 11309 getattribute $P3, self, 'owner' 11310 getattribute $P4, self, 'start' 11311 mul $I3, $I1, $I2 11312 .tailcall integerValue($P3, $P4, $I3) 11313 __label_4: # endif 11314 $P3 = WSubId_105($S1, $S2) 11315 if_null $P3, __label_5 11316 unless $P3 goto __label_5 11317 $P4 = $P1.'getFloatValue'() 11318 set $N1, $P4 11319 $P3 = $P2.'getFloatValue'() 11320 set $N2, $P3 11321 getattribute $P3, self, 'owner' 11322 getattribute $P4, self, 'start' 11323 mul $N3, $N1, $N2 11324 .tailcall WSubId_100($P3, $P4, $N3) 11325 __label_5: # endif 11326 __label_3: # endif 11327 ne $S1, "S", __label_6 11328 new $P4, [ 'Winxed'; 'Compiler'; 'RepeatString' ] 11329 $P4.'RepeatString'(self) 11330 set $P3, $P4 11331 .return($P3) 11332 __label_6: # endif 11333 .return(self) 11334 11335.end # optimize 11336 11337 11338.sub 'checkresult' :method 11339 getattribute $P1, self, 'lexpr' 11340 getattribute $P3, self, 'lexpr' 11341 $P2 = $P3.'checkresult'() 11342 null $S1 11343 if_null $P2, __label_1 11344 set $S1, $P2 11345 __label_1: 11346 getattribute $P3, self, 'rexpr' 11347 $P2 = $P3.'checkresult'() 11348 null $S2 11349 if_null $P2, __label_2 11350 set $S2, $P2 11351 __label_2: 11352 ne $S1, $S2, __label_3 11353 .return($S1) 11354 __label_3: # endif 11355 ne $S1, "S", __label_4 11356 .return("S") 11357 goto __label_5 11358 __label_4: # else 11359 .return("N") 11360 __label_5: # endif 11361 11362.end # checkresult 11363 11364 11365.sub 'emit' :method 11366 .param pmc __ARG_1 11367 .param string __ARG_2 11368 getattribute $P1, self, 'lexpr' 11369 getattribute $P2, self, 'rexpr' 11370 $P3 = $P1.'checkresult'() 11371 null $S1 11372 if_null $P3, __label_1 11373 set $S1, $P3 11374 __label_1: 11375 $P3 = $P2.'checkresult'() 11376 null $S2 11377 if_null $P3, __label_2 11378 set $S2, $P3 11379 __label_2: 11380 null $S3 11381 null $S4 11382 ne $S1, $S2, __label_3 11383 iseq $I3, $S1, "I" 11384 if $I3 goto __label_5 11385 iseq $I3, $S1, "N" 11386 __label_5: 11387 if $I3 goto __label_4 11388 iseq $I3, $S1, "P" 11389 __label_4: 11390 unless $I3 goto __label_3 11391 $P3 = $P1.'emit_get'(__ARG_1) 11392 set $S3, $P3 11393 $P3 = $P2.'emit_get'(__ARG_1) 11394 set $S4, $P3 11395 __ARG_1.'emitmul'(__ARG_2, $S3, $S4) 11396 .return() 11397 __label_3: # endif 11398 ne $S1, "N", __label_6 11399 $P3 = $P1.'emit_get'(__ARG_1) 11400 set $S3, $P3 11401 $P3 = $P2.'emit_get'(__ARG_1) 11402 set $S4, $P3 11403 null $S5 11404 if_null $S2, __label_7 11405 length $I3, $S2 11406 ne $I3, 1, __label_7 11407 ord $I3, $S2 11408 if $I3 == 73 goto __label_9 11409 if $I3 == 78 goto __label_10 11410 goto __label_7 11411 __label_9: # case 11412 $P3 = self.'tempreg'("N") 11413 set $S5, $P3 11414 __ARG_1.'emitset'($S5, $S4) 11415 set $S5, $S4 11416 goto __label_8 # break 11417 __label_10: # case 11418 set $S5, $S4 11419 goto __label_8 # break 11420 __label_7: # default 11421 $P4 = self.'tempreg'("N") 11422 set $S5, $P4 11423 __ARG_1.'emitset'($S5, $S4) 11424 __label_8: # switch end 11425 self.'annotate'(__ARG_1) 11426 __ARG_1.'emitmul'(__ARG_2, $S3, $S5) 11427 .return() 11428 __label_6: # endif 11429 null $I1 11430 null $I2 11431 $P4 = $P1.'issimple'() 11432 isfalse $I3, $P4 11433 box $P3, $I3 11434 if $P3 goto __label_13 11435 $P3 = $P1.'isidentifier'() 11436 __label_13: 11437 if_null $P3, __label_11 11438 unless $P3 goto __label_11 11439 $P6 = self.'checkresult'() 11440 $P5 = self.'tempreg'($P6) 11441 set $S3, $P5 11442 $P1.'emit'(__ARG_1, $S3) 11443 goto __label_12 11444 __label_11: # else 11445 $P3 = $P1.'getIntegerValue'() 11446 set $I1, $P3 11447 set $S3, $I1 11448 __label_12: # endif 11449 $P4 = $P2.'issimple'() 11450 isfalse $I3, $P4 11451 box $P3, $I3 11452 if $P3 goto __label_16 11453 $P3 = $P2.'isidentifier'() 11454 __label_16: 11455 if_null $P3, __label_14 11456 unless $P3 goto __label_14 11457 $P6 = self.'checkresult'() 11458 $P5 = self.'tempreg'($P6) 11459 set $S4, $P5 11460 $P2.'emit'(__ARG_1, $S4) 11461 goto __label_15 11462 __label_14: # else 11463 if_null $S2, __label_17 11464 length $I3, $S2 11465 ne $I3, 1, __label_17 11466 ord $I3, $S2 11467 if $I3 == 83 goto __label_19 11468 if $I3 == 78 goto __label_20 11469 if $I3 == 73 goto __label_21 11470 goto __label_17 11471 __label_19: # case 11472 $P4 = self.'checkresult'() 11473 $P3 = self.'tempreg'($P4) 11474 set $S4, $P3 11475 $P2.'emit'(__ARG_1, $S4) 11476 goto __label_18 # break 11477 __label_20: # case 11478 $P5 = $P2.'emit_get'(__ARG_1) 11479 set $S4, $P5 11480 goto __label_18 # break 11481 __label_21: # case 11482 __label_17: # default 11483 $P6 = $P2.'getIntegerValue'() 11484 set $I2, $P6 11485 set $S4, $I2 11486 goto __label_18 # break 11487 __label_18: # switch end 11488 __label_15: # endif 11489 self.'annotate'(__ARG_1) 11490 __ARG_1.'emitmul'(__ARG_2, $S3, $S4) 11491 11492.end # emit 11493 11494.sub Winxed_class_init :anon :load :init 11495 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpMulExpr' ] 11496 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBinaryExpr' ] 11497 addparent $P0, $P1 11498.end 11499.namespace [ 'Winxed'; 'Compiler'; 'OpDivExpr' ] 11500 11501.sub 'OpDivExpr' :method 11502 .param pmc __ARG_1 11503 .param pmc __ARG_2 11504 .param pmc __ARG_3 11505 .param pmc __ARG_4 11506 self.'set'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 11507 11508.end # OpDivExpr 11509 11510 11511.sub 'clone' :method 11512 .param pmc __ARG_1 11513 new $P1, [ 'Winxed'; 'Compiler'; 'OpDivExpr' ] 11514 .tailcall self.'clonebinary'($P1, __ARG_1) 11515 11516.end # clone 11517 11518 11519.sub 'optimize' :method 11520.const 'Sub' WSubId_100 = "WSubId_100" 11521.const 'Sub' WSubId_105 = "WSubId_105" 11522 self.'optimizearg'() 11523 getattribute $P1, self, 'lexpr' 11524 getattribute $P2, self, 'rexpr' 11525 $P5 = $P1.'isliteral'() 11526 unless $P5 goto __label_1 11527 $P6 = $P2.'isliteral'() 11528 unless $P6 goto __label_1 11529 $P7 = $P1.'checkresult'() 11530 null $S1 11531 if_null $P7, __label_2 11532 set $S1, $P7 11533 __label_2: 11534 $P5 = $P2.'checkresult'() 11535 null $S2 11536 if_null $P5, __label_3 11537 set $S2, $P5 11538 __label_3: 11539 null $P3 11540 null $P4 11541 ne $S1, "I", __label_4 11542 ne $S2, "I", __label_4 11543 $P5 = $P1.'getIntegerValue'() 11544 set $I1, $P5 11545 $P5 = $P2.'getIntegerValue'() 11546 set $I2, $P5 11547 unless $I2 goto __label_5 11548 getattribute $P5, self, 'owner' 11549 getattribute $P6, self, 'start' 11550 set $N4, $I1 11551 set $N5, $I2 11552 div $N3, $N4, $N5 11553 .tailcall WSubId_100($P5, $P6, $N3) 11554 __label_5: # endif 11555 __label_4: # endif 11556 $P5 = WSubId_105($S1, $S2) 11557 if_null $P5, __label_6 11558 unless $P5 goto __label_6 11559 $P6 = $P1.'getFloatValue'() 11560 set $N1, $P6 11561 $P5 = $P2.'getFloatValue'() 11562 set $N2, $P5 11563 set $I3, $N2 11564 unless $I3 goto __label_7 11565 getattribute $P5, self, 'owner' 11566 getattribute $P6, self, 'start' 11567 div $N3, $N1, $N2 11568 .tailcall WSubId_100($P5, $P6, $N3) 11569 __label_7: # endif 11570 __label_6: # endif 11571 __label_1: # endif 11572 .return(self) 11573 11574.end # optimize 11575 11576 11577.sub 'checkresult' :method 11578 .return("N") 11579 11580.end # checkresult 11581 11582 11583.sub 'emit' :method 11584 .param pmc __ARG_1 11585 .param string __ARG_2 11586 getattribute $P1, self, 'lexpr' 11587 null $P2 11588 $P3 = $P1.'emit_get'(__ARG_1) 11589 $P6 = $P1.'checkresult'() 11590 set $S1, $P6 11591 eq $S1, "N", __label_1 11592 $P2 = self.'tempreg'("N") 11593 __ARG_1.'emitset'($P2, $P3) 11594 set $P3, $P2 11595 __label_1: # endif 11596 getattribute $P4, self, 'rexpr' 11597 $P5 = $P4.'emit_get'(__ARG_1) 11598 $P6 = $P4.'checkresult'() 11599 set $S1, $P6 11600 eq $S1, "N", __label_2 11601 $P2 = self.'tempreg'("N") 11602 __ARG_1.'emitset'($P2, $P5) 11603 set $P5, $P2 11604 __label_2: # endif 11605 self.'annotate'(__ARG_1) 11606 __ARG_1.'emitdiv'(__ARG_2, $P3, $P5) 11607 11608.end # emit 11609 11610.sub Winxed_class_init :anon :load :init 11611 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpDivExpr' ] 11612 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBinaryExpr' ] 11613 addparent $P0, $P1 11614.end 11615.namespace [ 'Winxed'; 'Compiler'; 'OpModExpr' ] 11616 11617.sub 'OpModExpr' :method 11618 .param pmc __ARG_1 11619 .param pmc __ARG_2 11620 .param pmc __ARG_3 11621 .param pmc __ARG_4 11622 self.'set'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 11623 11624.end # OpModExpr 11625 11626 11627.sub 'clone' :method 11628 .param pmc __ARG_1 11629 new $P1, [ 'Winxed'; 'Compiler'; 'OpModExpr' ] 11630 .tailcall self.'clonebinary'($P1, __ARG_1) 11631 11632.end # clone 11633 11634 11635.sub 'emit' :method 11636 .param pmc __ARG_1 11637 .param string __ARG_2 11638 $P1 = self.'emit_intleft'(__ARG_1) 11639 null $S1 11640 if_null $P1, __label_1 11641 set $S1, $P1 11642 __label_1: 11643 $P1 = self.'emit_intright'(__ARG_1) 11644 null $S2 11645 if_null $P1, __label_2 11646 set $S2, $P1 11647 __label_2: 11648 self.'annotate'(__ARG_1) 11649 __ARG_1.'emitbinop'("mod", __ARG_2, $S1, $S2) 11650 11651.end # emit 11652 11653 11654.sub 'do_op' :method 11655 .param int __ARG_1 11656 .param int __ARG_2 11657 mod $I1, __ARG_1, __ARG_2 11658 .return($I1) 11659 11660.end # do_op 11661 11662.sub Winxed_class_init :anon :load :init 11663 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpModExpr' ] 11664 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBinaryIntExpr' ] 11665 addparent $P0, $P1 11666.end 11667.namespace [ 'Winxed'; 'Compiler'; 'OpCModExpr' ] 11668 11669.sub 'OpCModExpr' :method 11670 .param pmc __ARG_1 11671 .param pmc __ARG_2 11672 .param pmc __ARG_3 11673 .param pmc __ARG_4 11674 self.'set'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 11675 11676.end # OpCModExpr 11677 11678 11679.sub 'clone' :method 11680 .param pmc __ARG_1 11681 new $P1, [ 'Winxed'; 'Compiler'; 'OpCModExpr' ] 11682 .tailcall self.'clonebinary'($P1, __ARG_1) 11683 11684.end # clone 11685 11686 11687.sub 'checkresult' :method 11688 .return("I") 11689 11690.end # checkresult 11691 11692 11693.sub 'emit' :method 11694 .param pmc __ARG_1 11695 .param string __ARG_2 11696 $P1 = self.'emit_intleft'(__ARG_1) 11697 null $S1 11698 if_null $P1, __label_1 11699 set $S1, $P1 11700 __label_1: 11701 $P1 = self.'emit_intright'(__ARG_1) 11702 null $S2 11703 if_null $P1, __label_2 11704 set $S2, $P1 11705 __label_2: 11706 self.'annotate'(__ARG_1) 11707 __ARG_1.'emitbinop'("mod", __ARG_2, $S1, $S2) 11708 11709.end # emit 11710 11711.sub Winxed_class_init :anon :load :init 11712 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpCModExpr' ] 11713 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBinaryExpr' ] 11714 addparent $P0, $P1 11715.end 11716.namespace [ 'Winxed'; 'Compiler'; 'OpShiftleftExpr' ] 11717 11718.sub 'OpShiftleftExpr' :method 11719 .param pmc __ARG_1 11720 .param pmc __ARG_2 11721 .param pmc __ARG_3 11722 .param pmc __ARG_4 11723 self.'set'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 11724 11725.end # OpShiftleftExpr 11726 11727 11728.sub 'clone' :method 11729 .param pmc __ARG_1 11730 new $P1, [ 'Winxed'; 'Compiler'; 'OpShiftleftExpr' ] 11731 .tailcall self.'clonebinary'($P1, __ARG_1) 11732 11733.end # clone 11734 11735 11736.sub 'emit' :method 11737 .param pmc __ARG_1 11738 .param string __ARG_2 11739 $P1 = self.'emit_intleft'(__ARG_1) 11740 null $S1 11741 if_null $P1, __label_1 11742 set $S1, $P1 11743 __label_1: 11744 $P1 = self.'emit_intright'(__ARG_1) 11745 null $S2 11746 if_null $P1, __label_2 11747 set $S2, $P1 11748 __label_2: 11749 self.'annotate'(__ARG_1) 11750 __ARG_1.'emitbinop'("shl", __ARG_2, $S1, $S2) 11751 11752.end # emit 11753 11754 11755.sub 'do_op' :method 11756 .param int __ARG_1 11757 .param int __ARG_2 11758 shl $I1, __ARG_1, __ARG_2 11759 .return($I1) 11760 11761.end # do_op 11762 11763.sub Winxed_class_init :anon :load :init 11764 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpShiftleftExpr' ] 11765 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBinaryIntExpr' ] 11766 addparent $P0, $P1 11767.end 11768.namespace [ 'Winxed'; 'Compiler'; 'OpShiftrightExpr' ] 11769 11770.sub 'OpShiftrightExpr' :method 11771 .param pmc __ARG_1 11772 .param pmc __ARG_2 11773 .param pmc __ARG_3 11774 .param pmc __ARG_4 11775 self.'set'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 11776 11777.end # OpShiftrightExpr 11778 11779 11780.sub 'clone' :method 11781 .param pmc __ARG_1 11782 new $P1, [ 'Winxed'; 'Compiler'; 'OpShiftrightExpr' ] 11783 .tailcall self.'clonebinary'($P1, __ARG_1) 11784 11785.end # clone 11786 11787 11788.sub 'emit' :method 11789 .param pmc __ARG_1 11790 .param string __ARG_2 11791 $P1 = self.'emit_intleft'(__ARG_1) 11792 null $S1 11793 if_null $P1, __label_1 11794 set $S1, $P1 11795 __label_1: 11796 $P1 = self.'emit_intright'(__ARG_1) 11797 null $S2 11798 if_null $P1, __label_2 11799 set $S2, $P1 11800 __label_2: 11801 self.'annotate'(__ARG_1) 11802 __ARG_1.'emitbinop'("shr", __ARG_2, $S1, $S2) 11803 11804.end # emit 11805 11806 11807.sub 'do_op' :method 11808 .param int __ARG_1 11809 .param int __ARG_2 11810 shr $I1, __ARG_1, __ARG_2 11811 .return($I1) 11812 11813.end # do_op 11814 11815.sub Winxed_class_init :anon :load :init 11816 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpShiftrightExpr' ] 11817 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBinaryIntExpr' ] 11818 addparent $P0, $P1 11819.end 11820.namespace [ 'Winxed'; 'Compiler'; 'OpShiftlrightExpr' ] 11821 11822.sub 'OpShiftlrightExpr' :method 11823 .param pmc __ARG_1 11824 .param pmc __ARG_2 11825 .param pmc __ARG_3 11826 .param pmc __ARG_4 11827 self.'set'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 11828 11829.end # OpShiftlrightExpr 11830 11831 11832.sub 'clone' :method 11833 .param pmc __ARG_1 11834 new $P1, [ 'Winxed'; 'Compiler'; 'OpShiftlrightExpr' ] 11835 .tailcall self.'clonebinary'($P1, __ARG_1) 11836 11837.end # clone 11838 11839 11840.sub 'emit' :method 11841 .param pmc __ARG_1 11842 .param string __ARG_2 11843 $P1 = self.'emit_intleft'(__ARG_1) 11844 null $S1 11845 if_null $P1, __label_1 11846 set $S1, $P1 11847 __label_1: 11848 $P1 = self.'emit_intright'(__ARG_1) 11849 null $S2 11850 if_null $P1, __label_2 11851 set $S2, $P1 11852 __label_2: 11853 self.'annotate'(__ARG_1) 11854 __ARG_1.'emitbinop'("lsr", __ARG_2, $S1, $S2) 11855 11856.end # emit 11857 11858 11859.sub 'do_op' :method 11860 .param int __ARG_1 11861 .param int __ARG_2 11862 lsr $I1, __ARG_1, __ARG_2 11863 .return($I1) 11864 11865.end # do_op 11866 11867.sub Winxed_class_init :anon :load :init 11868 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpShiftlrightExpr' ] 11869 get_class $P1, [ 'Winxed'; 'Compiler'; 'OpBinaryIntExpr' ] 11870 addparent $P0, $P1 11871.end 11872.namespace [ 'Winxed'; 'Compiler'; 'ArgumentModifierList' ] 11873 11874.sub 'ArgumentModifierList' :method 11875 .param pmc __ARG_1 11876 .param pmc __ARG_2 11877 self.'ModifierList'(__ARG_1, __ARG_2) 11878 11879.end # ArgumentModifierList 11880 11881 11882.sub 'clone' :method 11883 .param pmc __ARG_1 11884 new $P1, [ 'Winxed'; 'Compiler'; 'ArgumentModifierList' ] 11885 $P3 = self.'clonemodifiers'(__ARG_1) 11886 setattribute $P1, 'list', $P3 11887 .return($P1) 11888 11889.end # clone 11890 11891 11892.sub 'emitmodifiers' :method 11893 .param pmc __ARG_1 11894.const 'Sub' SyntaxError = "SyntaxError" 11895 null $I1 11896 null $I2 11897 set $S1, "" 11898 $P3 = self.'getlist'() 11899 if_null $P3, __label_2 11900 iter $P4, $P3 11901 set $P4, 0 11902 __label_1: # for iteration 11903 unless $P4 goto __label_2 11904 shift $P1, $P4 11905 $P5 = $P1.'getname'() 11906 set $S2, $P5 11907 if $S2 == "flat" goto __label_5 11908 if $S2 == "named" goto __label_6 11909 goto __label_3 11910 __label_5: # case 11911 set $I1, 1 11912 goto __label_4 # break 11913 __label_6: # case 11914 set $I2, 1 11915 $P6 = $P1.'numargs'() 11916 set $I3, $P6 11917 if $I3 == 0 goto __label_9 11918 if $I3 == 1 goto __label_10 11919 goto __label_7 11920 __label_9: # case 11921 goto __label_8 # break 11922 __label_10: # case 11923 $P2 = $P1.'getarg'(0) 11924 $P7 = $P2.'isstringliteral'() 11925 if $P7 goto __label_11 11926 SyntaxError("Invalid modifier", $P2) 11927 __label_11: # endif 11928 $P8 = $P2.'getPirString'() 11929 set $S1, $P8 11930 goto __label_8 # break 11931 __label_7: # default 11932 SyntaxError("Invalid modifier", $P2) 11933 __label_8: # switch end 11934 __label_3: # default 11935 __label_4: # switch end 11936 goto __label_1 11937 __label_2: # endfor 11938 and $I3, $I1, $I2 11939 if $I3 goto __label_14 11940 if $I1 goto __label_15 11941 if $I2 goto __label_16 11942 goto __label_13 11943 __label_14: # case 11944 __ARG_1.'print'(" :flat :named") 11945 goto __label_12 # break 11946 __label_15: # case 11947 __ARG_1.'print'(" :flat") 11948 goto __label_12 # break 11949 __label_16: # case 11950 __ARG_1.'print'(" :named") 11951 eq $S1, "", __label_17 11952 __ARG_1.'print'("(", $S1, ")") 11953 __label_17: # endif 11954 goto __label_12 # break 11955 __label_13: # default 11956 __label_12: # switch end 11957 11958.end # emitmodifiers 11959 11960.sub Winxed_class_init :anon :load :init 11961 newclass $P0, [ 'Winxed'; 'Compiler'; 'ArgumentModifierList' ] 11962 get_class $P1, [ 'Winxed'; 'Compiler'; 'ModifierList' ] 11963 addparent $P0, $P1 11964.end 11965.namespace [ 'Winxed'; 'Compiler'; 'Argument' ] 11966 11967.sub 'Argument' :method 11968 .param pmc __ARG_1 11969 .param pmc __ARG_2 11970 setattribute self, 'arg', __ARG_1 11971 setattribute self, 'modifiers', __ARG_2 11972 11973.end # Argument 11974 11975 11976.sub 'clone' :method 11977 .param pmc __ARG_1 11978 new $P1, [ 'Winxed'; 'Compiler'; 'Argument' ] 11979 getattribute $P4, self, 'arg' 11980 $P3 = $P4.'clone'(__ARG_1) 11981 setattribute $P1, 'arg', $P3 11982 getattribute $P2, self, 'modifiers' 11983 if_null $P2, __label_1 11984 getattribute $P5, self, 'modifiers' 11985 $P4 = $P5.'clone'(__ARG_1) 11986 setattribute $P1, 'modifiers', $P4 11987 __label_1: # endif 11988 .return($P1) 11989 11990.end # clone 11991 11992 11993.sub 'optimize' :method 11994 getattribute $P3, self, 'arg' 11995 $P2 = $P3.'optimize'() 11996 setattribute self, 'arg', $P2 11997 getattribute $P1, self, 'modifiers' 11998 if_null $P1, __label_1 11999 getattribute $P2, self, 'modifiers' 12000 $P2.'optimize'() 12001 __label_1: # endif 12002 .return(self) 12003 12004.end # optimize 12005 12006 12007.sub 'hascompilevalue' :method 12008 getattribute $P1, self, 'arg' 12009 .tailcall $P1.'hascompilevalue'() 12010 12011.end # hascompilevalue 12012 12013.sub Winxed_class_init :anon :load :init 12014 newclass $P0, [ 'Winxed'; 'Compiler'; 'Argument' ] 12015 addattribute $P0, 'arg' 12016 addattribute $P0, 'modifiers' 12017.end 12018.namespace [ 'Winxed'; 'Compiler' ] 12019 12020.sub 'parseArgument' :subid('parseArgument') 12021 .param pmc __ARG_1 12022 .param pmc __ARG_2 12023.const 'Sub' WSubId_75 = "WSubId_75" 12024.const 'Sub' Expected = "Expected" 12025 null $P1 12026 $P2 = WSubId_75(__ARG_1, __ARG_2) 12027 $P3 = __ARG_1.'get'() 12028 $P4 = $P3.'isop'(":") 12029 if_null $P4, __label_1 12030 unless $P4 goto __label_1 12031 $P3 = __ARG_1.'get'() 12032 $P4 = $P3.'isop'("[") 12033 if_null $P4, __label_3 12034 unless $P4 goto __label_3 12035 new $P5, [ 'Winxed'; 'Compiler'; 'ArgumentModifierList' ] 12036 $P5.'ArgumentModifierList'(__ARG_1, __ARG_2) 12037 set $P1, $P5 12038 goto __label_4 12039 __label_3: # else 12040 Expected("modifier list", $P3) 12041 __label_4: # endif 12042 goto __label_2 12043 __label_1: # else 12044 __ARG_1.'unget'($P3) 12045 __label_2: # endif 12046 new $P5, [ 'Winxed'; 'Compiler'; 'Argument' ] 12047 $P5.'Argument'($P2, $P1) 12048 set $P4, $P5 12049 .return($P4) 12050 12051.end # parseArgument 12052 12053.namespace [ 'Winxed'; 'Compiler'; 'ArgumentList' ] 12054 12055.sub 'ArgumentList' :method 12056 .param pmc __ARG_1 12057 .param pmc __ARG_2 12058 .param pmc __ARG_3 12059 .param string __ARG_4 12060.const 'Sub' parseListOrEmpty = "parseListOrEmpty" 12061.const 'Sub' parseArgument = "parseArgument" 12062 setattribute self, 'owner', __ARG_1 12063 setattribute self, 'start', __ARG_2 12064 $P2 = parseListOrEmpty(__ARG_3, __ARG_1, parseArgument, __ARG_4) 12065 setattribute self, 'args', $P2 12066 12067.end # ArgumentList 12068 12069 12070.sub 'clone' :method 12071 .param pmc __ARG_1 12072 new $P1, [ 'Winxed'; 'Compiler'; 'ArgumentList' ] 12073 setattribute $P1, 'owner', __ARG_1 12074 getattribute $P10, self, 'start' 12075 setattribute $P1, 'start', $P10 12076 getattribute $P2, self, 'args' 12077 if_null $P2, __label_1 12078 set $P3, $P2 12079 set $P4, __ARG_1 12080.const 'Sub' bindlast = "bindlast" 12081.const 'Sub' bindmethod = "bindmethod" 12082 set $P5, $P3 12083 root_new $P6, ['parrot';'ResizablePMCArray'] 12084 $P10 = bindmethod("clone") 12085 $P7 = bindlast($P10, $P4) 12086 if_null $P5, __label_3 12087 iter $P12, $P5 12088 set $P12, 0 12089 __label_2: # for iteration 12090 unless $P12 goto __label_3 12091 shift $P8, $P12 12092 $P13 = $P7($P8) 12093 push $P6, $P13 12094 goto __label_2 12095 __label_3: # endfor 12096 set $P11, $P6 12097 set $P9, $P11 12098 setattribute $P1, 'args', $P9 12099 __label_1: # endif 12100 .return($P1) 12101 12102.end # clone 12103 12104 12105.sub 'numargs' :method 12106 getattribute $P1, self, 'args' 12107 unless_null $P1, __label_2 12108 null $I1 12109 goto __label_1 12110 __label_2: 12111 elements $I1, $P1 12112 __label_1: 12113 .return($I1) 12114 12115.end # numargs 12116 12117 12118.sub 'getrawargs' :method 12119 getattribute $P1, self, 'args' 12120 .return($P1) 12121 12122.end # getrawargs 12123 12124 12125.sub 'getarg' :method 12126 .param int __ARG_1 12127 getattribute $P1, self, 'args' 12128 $P2 = $P1[__ARG_1] 12129 .return($P2) 12130 12131.end # getarg 12132 12133 12134.sub 'getfreearg' :method 12135 .param int __ARG_1 12136 getattribute $P1, self, 'args' 12137 $P3 = $P1[__ARG_1] 12138 getattribute $P2, $P3, 'arg' 12139 .return($P2) 12140 12141.end # getfreearg 12142 12143 12144.sub 'optimize' :method 12145 getattribute $P1, self, 'args' 12146 if_null $P1, __label_2 12147 elements $I1, $P1 12148 goto __label_1 12149 __label_2: 12150 null $I1 12151 __label_1: 12152 null $I2 12153 __label_5: # for condition 12154 ge $I2, $I1, __label_4 12155 $P3 = $P1[$I2] 12156 $P2 = $P3.'optimize'() 12157 $P1[$I2] = $P2 12158 __label_3: # for iteration 12159 inc $I2 12160 goto __label_5 12161 __label_4: # for end 12162 .return(self) 12163 12164.end # optimize 12165 12166 12167.sub 'getargvalues' :method 12168 .param pmc __ARG_1 12169 getattribute $P1, self, 'argregs' 12170 unless_null $P1, __label_1 12171 new $P2, ['ResizableStringArray'] 12172 new $P5, [ 'Winxed'; 'Compiler'; 'CollectValues' ] 12173 getattribute $P6, self, 'owner' 12174 $P5.'CollectValues'($P6, __ARG_1) 12175 set $P3, $P5 12176 getattribute $P5, self, 'args' 12177 if_null $P5, __label_3 12178 iter $P7, $P5 12179 set $P7, 0 12180 __label_2: # for iteration 12181 unless $P7 goto __label_3 12182 shift $P4, $P7 12183 getattribute $P8, $P4, 'arg' 12184 $P6 = $P3.'add'($P8) 12185 null $S1 12186 if_null $P6, __label_4 12187 set $S1, $P6 12188 __label_4: 12189 push $P2, $S1 12190 goto __label_2 12191 __label_3: # endfor 12192 setattribute self, 'argregs', $P2 12193 __label_1: # endif 12194 .return($P1) 12195 12196.end # getargvalues 12197 12198 12199.sub 'emitargs' :method 12200 .param pmc __ARG_1 12201 getattribute $P1, self, 'args' 12202 $P2 = self.'getargvalues'(__ARG_1) 12203 set $S1, "" 12204 $P4 = self.'numargs'() 12205 set $I1, $P4 12206 null $I2 12207 __label_3: # for condition 12208 ge $I2, $I1, __label_2 12209 $P4 = $P2[$I2] 12210 __ARG_1.'print'($S1, $P4) 12211 $P4 = $P1[$I2] 12212 getattribute $P3, $P4, 'modifiers' 12213 if_null $P3, __label_4 12214 $P3.'emitmodifiers'(__ARG_1) 12215 __label_4: # endif 12216 set $S1, ", " 12217 __label_1: # for iteration 12218 inc $I2 12219 goto __label_3 12220 __label_2: # for end 12221 12222.end # emitargs 12223 12224.sub Winxed_class_init :anon :load :init 12225 newclass $P0, [ 'Winxed'; 'Compiler'; 'ArgumentList' ] 12226 addattribute $P0, 'owner' 12227 addattribute $P0, 'start' 12228 addattribute $P0, 'args' 12229 addattribute $P0, 'argregs' 12230.end 12231.namespace [ 'Winxed'; 'Compiler' ] 12232 12233.sub 'arglist_hascompilevalue' :subid('WSubId_107') 12234 .param pmc __ARG_1 12235 if_null __ARG_1, __label_2 12236 iter $P2, __ARG_1 12237 set $P2, 0 12238 __label_1: # for iteration 12239 unless $P2 goto __label_2 12240 shift $P1, $P2 12241 $P3 = $P1.'hascompilevalue'() 12242 if $P3 goto __label_3 12243 .return(0) 12244 __label_3: # endif 12245 goto __label_1 12246 __label_2: # endfor 12247 .return(1) 12248 12249.end # arglist_hascompilevalue 12250 12251.namespace [ 'Winxed'; 'Compiler'; 'CastExpr' ] 12252 12253.sub 'CastExpr' :method 12254 .param pmc __ARG_1 12255 .param pmc __ARG_2 12256 .param pmc __ARG_3 12257 .param string __ARG_4 12258 self.'Expr'(__ARG_1, __ARG_2) 12259 setattribute self, 'arg', __ARG_3 12260 box $P1, __ARG_4 12261 setattribute self, 'type', $P1 12262 12263.end # CastExpr 12264 12265 12266.sub 'emit' :method 12267 .param pmc __ARG_1 12268 .param string __ARG_2 12269 getattribute $P1, self, 'arg' 12270 getattribute $P2, self, 'type' 12271 null $S1 12272 if_null $P2, __label_1 12273 set $S1, $P2 12274 __label_1: 12275 $P2 = $P1.'checkresult'() 12276 null $S2 12277 if_null $P2, __label_2 12278 set $S2, $P2 12279 __label_2: 12280 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'IndexExpr' ] 12281 if $I1 goto __label_5 12282 isa $I2, $P1, [ 'Winxed'; 'Compiler'; 'CallExpr' ] 12283 if $I2 goto __label_6 12284 eq $S2, $S1, __label_7 12285 $P2 = $P1.'isnull'() 12286 set $I3, $P2 12287 if $I3 goto __label_8 12288 goto __label_4 12289 __label_5: # case 12290 __label_6: # case 12291 __label_7: # case 12292 $P1.'emit'(__ARG_1, __ARG_2) 12293 goto __label_3 # break 12294 __label_8: # case 12295 __ARG_1.'emitnull'(__ARG_2) 12296 goto __label_3 # break 12297 __label_4: # default 12298 $P3 = $P1.'emit_get'(__ARG_1) 12299 null $S3 12300 if_null $P3, __label_9 12301 set $S3, $P3 12302 __label_9: 12303 __ARG_1.'emitset'(__ARG_2, $S3) 12304 __label_3: # switch end 12305 12306.end # emit 12307 12308.sub Winxed_class_init :anon :load :init 12309 newclass $P0, [ 'Winxed'; 'Compiler'; 'CastExpr' ] 12310 get_class $P1, [ 'Winxed'; 'Compiler'; 'FinalExpr' ] 12311 addparent $P0, $P1 12312 addattribute $P0, 'arg' 12313 addattribute $P0, 'type' 12314.end 12315.namespace [ 'Winxed'; 'Compiler'; 'IntCastExpr' ] 12316 12317.sub 'IntCastExpr' :method 12318 .param pmc __ARG_1 12319 .param pmc __ARG_2 12320 .param pmc __ARG_3 12321 self.'CastExpr'(__ARG_1, __ARG_2, __ARG_3, "I") 12322 12323.end # IntCastExpr 12324 12325 12326.sub 'checkresult' :method 12327 .return("I") 12328 12329.end # checkresult 12330 12331.sub Winxed_class_init :anon :load :init 12332 newclass $P0, [ 'Winxed'; 'Compiler'; 'IntCastExpr' ] 12333 get_class $P1, [ 'Winxed'; 'Compiler'; 'CastExpr' ] 12334 addparent $P0, $P1 12335.end 12336.namespace [ 'Winxed'; 'Compiler'; 'FloatCastExpr' ] 12337 12338.sub 'FloatCastExpr' :method 12339 .param pmc __ARG_1 12340 .param pmc __ARG_2 12341 .param pmc __ARG_3 12342 self.'CastExpr'(__ARG_1, __ARG_2, __ARG_3, "N") 12343 12344.end # FloatCastExpr 12345 12346 12347.sub 'checkresult' :method 12348 .return("N") 12349 12350.end # checkresult 12351 12352.sub Winxed_class_init :anon :load :init 12353 newclass $P0, [ 'Winxed'; 'Compiler'; 'FloatCastExpr' ] 12354 get_class $P1, [ 'Winxed'; 'Compiler'; 'CastExpr' ] 12355 addparent $P0, $P1 12356.end 12357.namespace [ 'Winxed'; 'Compiler'; 'StringCastExpr' ] 12358 12359.sub 'StringCastExpr' :method 12360 .param pmc __ARG_1 12361 .param pmc __ARG_2 12362 .param pmc __ARG_3 12363 self.'CastExpr'(__ARG_1, __ARG_2, __ARG_3, "S") 12364 12365.end # StringCastExpr 12366 12367 12368.sub 'checkresult' :method 12369 .return("S") 12370 12371.end # checkresult 12372 12373.sub Winxed_class_init :anon :load :init 12374 newclass $P0, [ 'Winxed'; 'Compiler'; 'StringCastExpr' ] 12375 get_class $P1, [ 'Winxed'; 'Compiler'; 'CastExpr' ] 12376 addparent $P0, $P1 12377.end 12378.namespace [ 'Winxed'; 'Compiler'; 'BoxExpr' ] 12379 12380.sub 'BoxExpr' :method 12381 .param pmc __ARG_1 12382 .param pmc __ARG_2 12383 .param pmc __ARG_3 12384 self.'Expr'(__ARG_1, __ARG_2) 12385 setattribute self, 'arg', __ARG_3 12386 12387.end # BoxExpr 12388 12389 12390.sub 'checkresult' :method 12391 .return("P") 12392 12393.end # checkresult 12394 12395 12396.sub 'emit' :method 12397 .param pmc __ARG_1 12398 .param string __ARG_2 12399 getattribute $P1, self, 'arg' 12400 $P2 = $P1.'emit_get'(__ARG_1) 12401 null $S1 12402 if_null $P2, __label_1 12403 set $S1, $P2 12404 __label_1: 12405 self.'annotate'(__ARG_1) 12406 __ARG_1.'emitbox'(__ARG_2, $S1) 12407 12408.end # emit 12409 12410.sub Winxed_class_init :anon :load :init 12411 newclass $P0, [ 'Winxed'; 'Compiler'; 'BoxExpr' ] 12412 get_class $P1, [ 'Winxed'; 'Compiler'; 'FinalExpr' ] 12413 addparent $P0, $P1 12414 addattribute $P0, 'arg' 12415.end 12416.namespace [ 'Winxed'; 'Compiler'; 'VarCastExpr' ] 12417 12418.sub 'VarCastExpr' :method 12419 .param pmc __ARG_1 12420 .param pmc __ARG_2 12421 .param pmc __ARG_3 12422 self.'Expr'(__ARG_1, __ARG_2) 12423 setattribute self, 'arg', __ARG_3 12424 12425.end # VarCastExpr 12426 12427 12428.sub 'checkresult' :method 12429 .return("P") 12430 12431.end # checkresult 12432 12433 12434.sub 'emit' :method 12435 .param pmc __ARG_1 12436 .param string __ARG_2 12437 getattribute $P1, self, 'arg' 12438 $P9 = $P1.'checkresult'() 12439 null $S1 12440 if_null $P9, __label_1 12441 set $S1, $P9 12442 __label_1: 12443 null $P2 12444 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'FunctionId' ] 12445 if $I1 goto __label_4 12446 isa $I2, $P1, [ 'Winxed'; 'Compiler'; 'IdentifierExpr' ] 12447 if $I2 goto __label_5 12448 isa $I3, $P1, [ 'Winxed'; 'Compiler'; 'MemberExpr' ] 12449 if $I3 goto __label_6 12450 goto __label_3 12451 __label_4: # case 12452 $P1.'emitvar'(__ARG_1, __ARG_2) 12453 goto __label_2 # break 12454 __label_5: # case 12455 $P9 = $P1.'getName'() 12456 null $S2 12457 if_null $P9, __label_7 12458 set $S2, $P9 12459 __label_7: 12460 $P10 = $P1.'checkIdentifier'() 12461 null $S3 12462 if_null $P10, __label_8 12463 set $S3, $P10 12464 __label_8: 12465 $P3 = $P1.'checkVar'() 12466 eq $S3, "", __label_9 12467 if_null $P3, __label_9 12468 $P11 = $P3.'issubid'() 12469 if $P11 goto __label_9 12470 $P1.'emit'(__ARG_1, __ARG_2) 12471 goto __label_10 12472 __label_9: # else 12473 root_new $P9, ['parrot';'ResizablePMCArray'] 12474 assign $P9, 1 12475 $P9[0] = $S2 12476 $P2 = $P1.'scopesearch'($P9, 0) 12477 if_null $P2, __label_11 12478 isa $I1, $P2, [ 'Winxed'; 'Compiler'; 'FunctionStatement' ] 12479 unless $I1 goto __label_11 12480 getattribute $P9, $P2, 'owner' 12481 $P4 = $P9.'getpath'() 12482 self.'annotate'(__ARG_1) 12483 set $P5, $P4 12484 null $S4 12485 elements $I1, $P5 12486 unless $I1 goto __label_12 12487 join $S9, "'; '", $P5 12488 concat $S10, "[ '", $S9 12489 concat $S10, $S10, "' ]" 12490 set $S4, $S10 12491 __label_12: # endif 12492 set $S8, $S4 12493 __ARG_1.'emitget_hll_global'(__ARG_2, $S2, $S8) 12494 __label_11: # endif 12495 __label_10: # endif 12496 goto __label_2 # break 12497 __label_6: # case 12498 new $P6, ['ResizableStringArray'] 12499 $P1.'buildkey'($P6) 12500 getattribute $P9, self, 'owner' 12501 $P2 = $P9.'scopesearch'($P6, 0) 12502 if_null $P2, __label_13 12503 isa $I1, $P2, [ 'Winxed'; 'Compiler'; 'FunctionStatement' ] 12504 unless $I1 goto __label_13 12505 getattribute $P10, $P2, 'owner' 12506 $P7 = $P10.'getpath'() 12507 getattribute $P10, $P2, 'name' 12508 $P9 = $P10.'getidentifier'() 12509 null $S5 12510 if_null $P9, __label_15 12511 set $S5, $P9 12512 __label_15: 12513 self.'annotate'(__ARG_1) 12514 $P9 = $P7.'getparrotkey'() 12515 __ARG_1.'emitget_hll_global'(__ARG_2, $S5, $P9) 12516 goto __label_14 12517 __label_13: # else 12518 $P9 = $P6[0] 12519 set $S9, $P9 12520 ne $S9, "self", __label_16 12521 getattribute $P12, self, 'owner' 12522 $P11 = $P12.'getouter'() 12523 $P10 = $P11.'ismethod'() 12524 unless $P10 goto __label_16 12525 $P1.'emit'(__ARG_1, __ARG_2) 12526 goto __label_17 12527 __label_16: # else 12528 $P9 = $P6.'pop'() 12529 null $S6 12530 if_null $P9, __label_18 12531 set $S6, $P9 12532 __label_18: 12533 self.'annotate'(__ARG_1) 12534 set $P8, $P6 12535 null $S7 12536 elements $I1, $P8 12537 unless $I1 goto __label_19 12538 join $S9, "'; '", $P8 12539 concat $S10, "[ '", $S9 12540 concat $S10, $S10, "' ]" 12541 set $S7, $S10 12542 __label_19: # endif 12543 set $S11, $S7 12544 __ARG_1.'emitget_hll_global'(__ARG_2, $S6, $S11) 12545 __label_17: # endif 12546 __label_14: # endif 12547 goto __label_2 # break 12548 __label_3: # default 12549 self.'annotate'(__ARG_1) 12550 $P1.'emit'(__ARG_1, __ARG_2) 12551 __label_2: # switch end 12552 12553.end # emit 12554 12555.sub Winxed_class_init :anon :load :init 12556 newclass $P0, [ 'Winxed'; 'Compiler'; 'VarCastExpr' ] 12557 get_class $P1, [ 'Winxed'; 'Compiler'; 'FinalExpr' ] 12558 addparent $P0, $P1 12559 addattribute $P0, 'arg' 12560.end 12561.namespace [ 'Winxed'; 'Compiler' ] 12562 12563.sub 'builtinexpr_intcast' :subid('bindmethod2') 12564 .param pmc __ARG_1 12565 .param pmc __ARG_2 12566 .param pmc __ARG_3 12567.const 'Sub' integerValue = "integerValue" 12568 $P3 = __ARG_3.'getarg'(0) 12569 getattribute $P1, $P3, 'arg' 12570 $P3 = $P1.'hascompilevalue'() 12571 if_null $P3, __label_1 12572 unless $P3 goto __label_1 12573 set $P2, $P1 12574 $P3 = $P2.'getIntegerValue'() 12575 set $I1, $P3 12576 set $I2, $I1 12577 .tailcall integerValue(__ARG_1, __ARG_2, $I2) 12578 goto __label_2 12579 __label_1: # else 12580 new $P4, [ 'Winxed'; 'Compiler'; 'IntCastExpr' ] 12581 $P4.'IntCastExpr'(__ARG_1, __ARG_2, $P1) 12582 set $P3, $P4 12583 .return($P3) 12584 __label_2: # endif 12585 12586.end # builtinexpr_intcast 12587 12588 12589.sub 'builtinexpr_floatcast' :subid('bindmethod3') 12590 .param pmc __ARG_1 12591 .param pmc __ARG_2 12592 .param pmc __ARG_3 12593.const 'Sub' WSubId_100 = "WSubId_100" 12594 $P3 = __ARG_3.'getarg'(0) 12595 getattribute $P1, $P3, 'arg' 12596 $P3 = $P1.'hascompilevalue'() 12597 if_null $P3, __label_1 12598 unless $P3 goto __label_1 12599 set $P2, $P1 12600 $P3 = $P2.'getFloatValue'() 12601 set $N1, $P3 12602 set $N2, $N1 12603 .tailcall WSubId_100(__ARG_1, __ARG_2, $N2) 12604 goto __label_2 12605 __label_1: # else 12606 new $P4, [ 'Winxed'; 'Compiler'; 'FloatCastExpr' ] 12607 $P4.'FloatCastExpr'(__ARG_1, __ARG_2, $P1) 12608 set $P3, $P4 12609 .return($P3) 12610 __label_2: # endif 12611 12612.end # builtinexpr_floatcast 12613 12614 12615.sub 'builtinexpr_stringcast' :subid('bindmethod4') 12616 .param pmc __ARG_1 12617 .param pmc __ARG_2 12618 .param pmc __ARG_3 12619.const 'Sub' bindmethod0 = "bindmethod0" 12620 $P3 = __ARG_3.'getarg'(0) 12621 getattribute $P1, $P3, 'arg' 12622 $P3 = $P1.'hascompilevalue'() 12623 if_null $P3, __label_1 12624 unless $P3 goto __label_1 12625 set $P2, $P1 12626 $P3 = $P2.'getStringValue'() 12627 null $S1 12628 if_null $P3, __label_3 12629 set $S1, $P3 12630 __label_3: 12631 set $S2, $S1 12632 .tailcall bindmethod0(__ARG_1, __ARG_2, $S2) 12633 goto __label_2 12634 __label_1: # else 12635 new $P4, [ 'Winxed'; 'Compiler'; 'StringCastExpr' ] 12636 $P4.'StringCastExpr'(__ARG_1, __ARG_2, $P1) 12637 set $P3, $P4 12638 .return($P3) 12639 __label_2: # endif 12640 12641.end # builtinexpr_stringcast 12642 12643 12644.sub 'builtinexpr_varcast' :subid('bindmethod5') 12645 .param pmc __ARG_1 12646 .param pmc __ARG_2 12647 .param pmc __ARG_3 12648 $P2 = __ARG_3.'getarg'(0) 12649 getattribute $P1, $P2, 'arg' 12650 $P2 = $P1.'checkresult'() 12651 null $S1 12652 if_null $P2, __label_1 12653 set $S1, $P2 12654 __label_1: 12655 if_null $S1, __label_2 12656 length $I1, $S1 12657 ne $I1, 1, __label_2 12658 ord $I1, $S1 12659 if $I1 == 73 goto __label_4 12660 if $I1 == 78 goto __label_5 12661 if $I1 == 83 goto __label_6 12662 goto __label_2 12663 __label_4: # case 12664 __label_5: # case 12665 __label_6: # case 12666 new $P3, [ 'Winxed'; 'Compiler'; 'BoxExpr' ] 12667 $P3.'BoxExpr'(__ARG_1, __ARG_2, $P1) 12668 set $P2, $P3 12669 .return($P2) 12670 __label_2: # default 12671 new $P5, [ 'Winxed'; 'Compiler'; 'VarCastExpr' ] 12672 $P5.'VarCastExpr'(__ARG_1, __ARG_2, $P1) 12673 set $P4, $P5 12674 .return($P4) 12675 __label_3: # switch end 12676 12677.end # builtinexpr_varcast 12678 12679.namespace [ 'Winxed'; 'Compiler'; 'CallBuiltinExpr' ] 12680 12681.sub 'CallBuiltinExpr' :method 12682 .param pmc __ARG_1 12683 .param pmc __ARG_2 12684 .param pmc __ARG_3 12685 .param pmc __ARG_4 12686 self.'Expr'(__ARG_1, __ARG_2) 12687 setattribute self, 'builtin', __ARG_3 12688 setattribute self, 'args', __ARG_4 12689 12690.end # CallBuiltinExpr 12691 12692 12693.sub 'checkresult' :method 12694 getattribute $P2, self, 'builtin' 12695 $P1 = $P2.'result'() 12696 null $S1 12697 if_null $P1, __label_1 12698 set $S1, $P1 12699 __label_1: 12700 ne $S1, ":", __label_2 12701 getattribute $P4, self, 'args' 12702 $P3 = $P4[0] 12703 getattribute $P2, $P3, 'arg' 12704 $P1 = $P2.'checkresult'() 12705 set $S1, $P1 12706 __label_2: # endif 12707 .return($S1) 12708 12709.end # checkresult 12710 12711 12712.sub 'emit_void' :method 12713 .param pmc __ARG_1 12714 self.'emit'(__ARG_1, "") 12715 12716.end # emit_void 12717 12718 12719.sub 'emit_get' :method 12720 .param pmc __ARG_1 12721.const 'Sub' SyntaxError = "SyntaxError" 12722.const 'Sub' InternalError = "InternalError" 12723 $P1 = self.'checkresult'() 12724 null $S1 12725 if_null $P1, __label_1 12726 set $S1, $P1 12727 __label_1: 12728 if_null $S1, __label_2 12729 length $I1, $S1 12730 ne $I1, 1, __label_2 12731 ord $I1, $S1 12732 if $I1 == 73 goto __label_4 12733 if $I1 == 78 goto __label_5 12734 if $I1 == 83 goto __label_6 12735 if $I1 == 80 goto __label_7 12736 if $I1 == 118 goto __label_8 12737 goto __label_2 12738 __label_4: # case 12739 __label_5: # case 12740 __label_6: # case 12741 __label_7: # case 12742 goto __label_3 # break 12743 __label_8: # case 12744 SyntaxError("Can't use result of a void builtin", self) 12745 __label_2: # default 12746 concat $S3, "Unexpected result type '", $S1 12747 concat $S3, $S3, "'" 12748 InternalError($S3, self) 12749 __label_3: # switch end 12750 $P1 = self.'tempreg'($S1) 12751 null $S2 12752 if_null $P1, __label_9 12753 set $S2, $P1 12754 __label_9: 12755 self.'emit'(__ARG_1, $S2) 12756 .return($S2) 12757 12758.end # emit_get 12759 12760 12761.sub 'emit' :method 12762 .param pmc __ARG_1 12763 .param string __ARG_2 12764 getattribute $P1, self, 'owner' 12765 getattribute $P2, self, 'start' 12766 getattribute $P3, self, 'builtin' 12767 getattribute $P4, self, 'args' 12768 new $P5, ['ResizableStringArray'] 12769 null $P6 12770 $P10 = $P3.'params'() 12771 set $I3, $P10 12772 if $I3 == -1 goto __label_3 12773 if $I3 == -2 goto __label_4 12774 goto __label_1 12775 __label_3: # case 12776 new $P11, [ 'Winxed'; 'Compiler'; 'CollectValues' ] 12777 $P11.'CollectValues'($P1, __ARG_1) 12778 set $P7, $P11 12779 if_null $P4, __label_6 12780 iter $P12, $P4 12781 set $P12, 0 12782 __label_5: # for iteration 12783 unless $P12 goto __label_6 12784 shift $P6, $P12 12785 getattribute $P14, $P6, 'arg' 12786 $P13 = $P7.'add'($P14) 12787 push $P5, $P13 12788 goto __label_5 12789 __label_6: # endfor 12790 goto __label_2 # break 12791 __label_4: # case 12792 root_new $P8, ['parrot';'ResizablePMCArray'] 12793 if_null $P4, __label_8 12794 iter $P15, $P4 12795 set $P15, 0 12796 __label_7: # for iteration 12797 unless $P15 goto __label_8 12798 shift $P6, $P15 12799 getattribute $P16, $P6, 'arg' 12800 push $P8, $P16 12801 goto __label_7 12802 __label_8: # endfor 12803 $P3.'expand'(__ARG_1, $P1, $P2, __ARG_2, $P8) 12804 .return() 12805 __label_1: # default 12806 elements $I1, $P4 12807 new $P17, [ 'Winxed'; 'Compiler'; 'CollectValues' ] 12808 $P17.'CollectValues'($P1, __ARG_1) 12809 set $P9, $P17 12810 null $I2 12811 __label_11: # for condition 12812 ge $I2, $I1, __label_10 12813 $P18 = $P4[$I2] 12814 getattribute $P6, $P18, 'arg' 12815 $P10 = $P6.'checkresult'() 12816 null $S1 12817 if_null $P10, __label_12 12818 set $S1, $P10 12819 __label_12: 12820 $P10 = $P3.'paramtype'($I2) 12821 null $S2 12822 if_null $P10, __label_13 12823 set $S2, $P10 12824 __label_13: 12825 null $S3 12826 $P10 = $P6.'isnull'() 12827 if_null $P10, __label_14 12828 unless $P10 goto __label_14 12829 if_null $S2, __label_16 12830 length $I3, $S2 12831 ne $I3, 1, __label_16 12832 ord $I3, $S2 12833 if $I3 == 73 goto __label_18 12834 if $I3 == 78 goto __label_19 12835 if $I3 == 83 goto __label_20 12836 goto __label_16 12837 __label_18: # case 12838 __label_19: # case 12839 __label_20: # case 12840 $P11 = self.'tempreg'($S2) 12841 set $S3, $P11 12842 __ARG_1.'emitnull'($S3) 12843 goto __label_17 # break 12844 __label_16: # default 12845 $P13 = $P9.'add'($P6) 12846 set $S3, $P13 12847 __label_17: # switch end 12848 goto __label_15 12849 __label_14: # else 12850 iseq $I3, $S1, $S2 12851 if $I3 goto __label_24 12852 iseq $I3, $S2, "?" 12853 __label_24: 12854 if $I3 goto __label_23 12855 iseq $I3, $S2, "p" 12856 unless $I3 goto __label_25 12857 iseq $I3, $S1, "S" 12858 if $I3 goto __label_26 12859 iseq $I3, $S1, "P" 12860 __label_26: 12861 __label_25: 12862 __label_23: 12863 unless $I3 goto __label_21 12864 $P10 = $P6.'emit_get'(__ARG_1) 12865 set $S3, $P10 12866 goto __label_22 12867 __label_21: # else 12868 ne $S2, "p", __label_27 12869 set $S2, "P" 12870 __label_27: # endif 12871 $P10 = $P6.'emit_get'(__ARG_1) 12872 null $S4 12873 if_null $P10, __label_28 12874 set $S4, $P10 12875 __label_28: 12876 if_null $S2, __label_29 12877 length $I3, $S2 12878 ne $I3, 1, __label_29 12879 ord $I3, $S2 12880 if $I3 == 80 goto __label_31 12881 if $I3 == 73 goto __label_32 12882 if $I3 == 78 goto __label_33 12883 if $I3 == 83 goto __label_34 12884 goto __label_29 12885 __label_31: # case 12886 if_null $S1, __label_35 12887 length $I4, $S1 12888 ne $I4, 1, __label_35 12889 ord $I4, $S1 12890 if $I4 == 73 goto __label_37 12891 if $I4 == 78 goto __label_38 12892 if $I4 == 83 goto __label_39 12893 goto __label_35 12894 __label_37: # case 12895 __label_38: # case 12896 __label_39: # case 12897 $P10 = self.'tempreg'($S2) 12898 set $S3, $P10 12899 __ARG_1.'emitbox'($S3, $S4) 12900 goto __label_36 # break 12901 __label_35: # default 12902 set $S3, $S4 12903 __label_36: # switch end 12904 goto __label_30 # break 12905 __label_32: # case 12906 __label_33: # case 12907 __label_34: # case 12908 $P11 = self.'tempreg'($S2) 12909 set $S3, $P11 12910 __ARG_1.'emitset'($S3, $S4) 12911 goto __label_30 # break 12912 __label_29: # default 12913 set $S3, $S4 12914 __label_30: # switch end 12915 __label_22: # endif 12916 __label_15: # endif 12917 push $P5, $S3 12918 __label_9: # for iteration 12919 inc $I2 12920 goto __label_11 12921 __label_10: # for end 12922 __label_2: # switch end 12923 $P3.'expand'(__ARG_1, $P1, $P2, __ARG_2, $P5) 12924 12925.end # emit 12926 12927.sub Winxed_class_init :anon :load :init 12928 newclass $P0, [ 'Winxed'; 'Compiler'; 'CallBuiltinExpr' ] 12929 get_class $P1, [ 'Winxed'; 'Compiler'; 'FinalExpr' ] 12930 addparent $P0, $P1 12931 addattribute $P0, 'builtin' 12932 addattribute $P0, 'args' 12933.end 12934.namespace [ 'Winxed'; 'Compiler' ] 12935 12936.sub 'gencallbuiltin' :subid('WSubId_108') 12937 .param pmc __ARG_1 12938 .param pmc __ARG_2 12939 .param pmc __ARG_3 12940 .param pmc __ARG_4 12941.const 'Sub' SyntaxError = "SyntaxError" 12942.const 'Sub' WSubId_107 = "WSubId_107" 12943 $P1 = __ARG_3.'getname'() 12944 $P8 = $P1.'getidentifier'() 12945 null $S1 12946 if_null $P8, __label_1 12947 set $S1, $P8 12948 __label_1: 12949 __ARG_1.'use_builtin'($S1) 12950 unless_null __ARG_4, __label_3 12951 null $I1 12952 goto __label_2 12953 __label_3: 12954 $P8 = __ARG_4.'numargs'() 12955 set $I1, $P8 12956 __label_2: 12957 if $I1 goto __label_5 12958 root_new $P8, ['parrot';'ResizablePMCArray'] 12959 set $P2, $P8 12960 goto __label_4 12961 __label_5: 12962 $P9 = __ARG_4.'getrawargs'() 12963 set $P2, $P9 12964 __label_4: 12965 getattribute $P3, __ARG_3, 'variants' 12966 null $P4 12967 if_null $P3, __label_7 12968 iter $P10, $P3 12969 set $P10, 0 12970 __label_6: # for iteration 12971 unless $P10 goto __label_7 12972 shift $P5, $P10 12973 getattribute $P8, $P5, 'nparams' 12974 set $I2, $P8 12975 iseq $I3, $I2, $I1 12976 if $I3 goto __label_10 12977 iseq $I3, $I2, -1 12978 __label_10: 12979 if $I3 goto __label_9 12980 iseq $I3, $I2, -2 12981 unless $I3 goto __label_11 12982 iseq $I3, $I1, 1 12983 __label_11: 12984 __label_9: 12985 unless $I3 goto __label_8 12986 set $P4, $P5 12987 __label_8: # endif 12988 goto __label_6 12989 __label_7: # endfor 12990 unless_null $P4, __label_12 12991 SyntaxError("Wrong arguments for builtin", __ARG_2) 12992 __label_12: # endif 12993 $P8 = $P4.'isreplaceexpr'() 12994 if_null $P8, __label_13 12995 unless $P8 goto __label_13 12996 .tailcall $P4.'replaceexpr'(__ARG_1, __ARG_2, __ARG_4) 12997 __label_13: # endif 12998 $P8 = $P4.'iscompileevaluable'() 12999 if_null $P8, __label_14 13000 unless $P8 goto __label_14 13001 $P9 = WSubId_107($P2) 13002 if_null $P9, __label_15 13003 unless $P9 goto __label_15 13004 getattribute $P6, $P4, 'evalfun' 13005 new $P8, 'ExceptionHandler' 13006 set_label $P8, __label_16 13007 push_eh $P8 13008 getattribute $P11, __ARG_1, 'owner' 13009 getattribute $P12, __ARG_1, 'start' 13010 $P9 = $P6($P11, $P12, $P2) 13011 .return($P9) 13012 pop_eh 13013 goto __label_17 13014 __label_16: 13015 .get_results($P7) 13016 finalize $P7 13017 pop_eh 13018 $S2 = $P7["message"] 13019 concat $S3, "Compile time evaluation of builtin ", $S1 13020 concat $S3, $S3, " failed: '" 13021 concat $S3, $S3, $S2 13022 concat $S3, $S3, "'" 13023 SyntaxError($S3, __ARG_2) 13024 __label_17: 13025 __label_15: # endif 13026 __label_14: # endif 13027 new $P9, [ 'Winxed'; 'Compiler'; 'CallBuiltinExpr' ] 13028 $P9.'CallBuiltinExpr'(__ARG_1, __ARG_2, $P4, $P2) 13029 set $P8, $P9 13030 .return($P8) 13031 13032.end # gencallbuiltin 13033 13034.namespace [ 'Winxed'; 'Compiler'; 'CallExpr' ] 13035 13036.sub 'CallExpr' :method 13037 .param pmc __ARG_1 13038 .param pmc __ARG_2 13039 .param pmc __ARG_3 13040 .param pmc __ARG_4 13041 self.'Expr'(__ARG_2, __ARG_3) 13042 setattribute self, 'funref', __ARG_4 13043 $P1 = __ARG_1.'get'() 13044 $P2 = $P1.'isop'(")") 13045 if $P2 goto __label_1 13046 __ARG_1.'unget'($P1) 13047 new $P4, [ 'Winxed'; 'Compiler'; 'ArgumentList' ] 13048 $P4.'ArgumentList'(__ARG_2, __ARG_3, __ARG_1, ")") 13049 set $P3, $P4 13050 setattribute self, 'args', $P3 13051 __label_1: # endif 13052 13053.end # CallExpr 13054 13055 13056.sub 'clone' :method 13057 .param pmc __ARG_1 13058 new $P1, [ 'Winxed'; 'Compiler'; 'CallExpr' ] 13059 getattribute $P3, self, 'start' 13060 $P1.'Expr'(__ARG_1, $P3) 13061 getattribute $P5, self, 'funref' 13062 $P4 = $P5.'clone'(__ARG_1) 13063 setattribute $P1, 'funref', $P4 13064 getattribute $P2, self, 'args' 13065 if_null $P2, __label_1 13066 $P4 = $P2.'clone'(__ARG_1) 13067 setattribute $P1, 'args', $P4 13068 __label_1: # endif 13069 .return($P1) 13070 13071.end # clone 13072 13073 13074.sub 'checkresult' :method 13075 .return("P") 13076 13077.end # checkresult 13078 13079 13080.sub 'optimize' :method 13081.const 'Sub' WSubId_108 = "WSubId_108" 13082.const 'Sub' InternalError = "InternalError" 13083 getattribute $P7, self, 'funref' 13084 $P1 = $P7.'optimize'() 13085 setattribute self, 'funref', $P1 13086 getattribute $P2, self, 'args' 13087 if_null $P2, __label_1 13088 $P2 = $P2.'optimize'() 13089 setattribute self, 'args', $P2 13090 __label_1: # endif 13091 getattribute $P3, self, 'owner' 13092 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'MemberExpr' ] 13093 unless $I1 goto __label_2 13094 $P4 = $P1.'search_nonmember'() 13095 getattribute $P5, self, 'start' 13096 if_null $P4, __label_5 13097 isa $I1, $P4, [ 'Winxed'; 'Compiler'; 'FunctionStatement' ] 13098 if $I1 goto __label_6 13099 isa $I2, $P4, [ 'Winxed'; 'Compiler'; 'FunctionExtern' ] 13100 if $I2 goto __label_7 13101 isa $I3, $P4, [ 'Winxed'; 'Compiler'; 'Builtin' ] 13102 if $I3 goto __label_8 13103 goto __label_4 13104 __label_5: # case 13105 new $P8, [ 'Winxed'; 'Compiler'; 'CallMemberExpr' ] 13106 $P8.'CallMemberExpr'(self, $P1, $P2) 13107 set $P7, $P8 13108 .return($P7) 13109 __label_6: # case 13110 $P9 = $P4.'ismulti'() 13111 if $P9 goto __label_9 13112 $P10 = $P4.'makesubid'() 13113 null $S1 13114 if_null $P10, __label_11 13115 set $S1, $P10 13116 __label_11: 13117 self.'usesubid'($S1) 13118 new $P8, [ 'Winxed'; 'Compiler'; 'CallSubid' ] 13119 $P8.'CallSubid'(self, $P1, $P2, $S1) 13120 set $P7, $P8 13121 .return($P7) 13122 goto __label_10 13123 __label_9: # else 13124 new $P9, [ 'Winxed'; 'Compiler'; 'FunctionRef' ] 13125 $P9.'FunctionRef'($P3, $P5, $P4) 13126 set $P8, $P9 13127 setattribute self, 'funref', $P8 13128 .return(self) 13129 __label_10: # endif 13130 goto __label_3 # break 13131 __label_7: # case 13132 new $P9, [ 'Winxed'; 'Compiler'; 'FunctionRef' ] 13133 $P9.'FunctionRef'($P3, $P5, $P4) 13134 set $P8, $P9 13135 setattribute self, 'funref', $P8 13136 .return(self) 13137 __label_8: # case 13138 getattribute $P10, $P1, 'start' 13139 .tailcall WSubId_108($P3, $P10, $P4, $P2) 13140 goto __label_3 # break 13141 __label_4: # default 13142 InternalError("unexpected type found in scope", $P5) 13143 __label_3: # switch end 13144 __label_2: # endif 13145 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'MemberRefExpr' ] 13146 unless $I1 goto __label_12 13147 new $P8, [ 'Winxed'; 'Compiler'; 'CallMemberRefExpr' ] 13148 $P8.'CallMemberRefExpr'(self, $P1, $P2) 13149 set $P7, $P8 13150 .return($P7) 13151 __label_12: # endif 13152 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'InlineRef' ] 13153 unless $I1 goto __label_13 13154 new $P8, [ 'Winxed'; 'Compiler'; 'CallInlineExpr' ] 13155 $P8.'CallInlineExpr'($P3, $P1, $P2) 13156 set $P7, $P8 13157 .return($P7) 13158 __label_13: # endif 13159 $P7 = $P1.'isidentifier'() 13160 if_null $P7, __label_14 13161 unless $P7 goto __label_14 13162 $P8 = $P1.'checkIdentifier'() 13163 set $S2, $P8 13164 ne $S2, "", __label_15 13165 root_new $P9, ['parrot';'ResizablePMCArray'] 13166 assign $P9, 1 13167 $P10 = $P1.'getName'() 13168 $P9[0] = $P10 13169 $P6 = self.'scopesearch'($P9, 0) 13170 if_null $P6, __label_16 13171 isa $I1, $P6, [ 'Winxed'; 'Compiler'; 'Builtin' ] 13172 unless $I1 goto __label_16 13173 getattribute $P7, $P1, 'start' 13174 .tailcall WSubId_108($P3, $P7, $P6, $P2) 13175 __label_16: # endif 13176 __label_15: # endif 13177 __label_14: # endif 13178 .return(self) 13179 13180.end # optimize 13181 13182 13183.sub 'cantailcall' :method 13184 .return(1) 13185 13186.end # cantailcall 13187 13188 13189.sub 'emitcall' :method 13190 .param pmc __ARG_1 13191.const 'Sub' InternalError = "InternalError" 13192 getattribute $P1, self, 'funref' 13193 null $S1 13194 $P3 = $P1.'isidentifier'() 13195 if_null $P3, __label_1 13196 unless $P3 goto __label_1 13197 $P4 = $P1.'checkIdentifier'() 13198 set $S1, $P4 13199 ne $S1, "", __label_3 13200 root_new $P3, ['parrot';'ResizablePMCArray'] 13201 assign $P3, 1 13202 $P4 = $P1.'getName'() 13203 $P3[0] = $P4 13204 $P2 = self.'scopesearch'($P3, 0) 13205 if_null $P2, __label_6 13206 isa $I1, $P2, [ 'Winxed'; 'Compiler'; 'FunctionExtern' ] 13207 if $I1 goto __label_7 13208 isa $I2, $P2, [ 'Winxed'; 'Compiler'; 'Builtin' ] 13209 if $I2 goto __label_8 13210 goto __label_5 13211 __label_6: # case 13212 root_new $P3, ['parrot';'ResizablePMCArray'] 13213 assign $P3, 3 13214 $P3[0] = "'" 13215 $P4 = $P1.'getName'() 13216 $P3[1] = $P4 13217 $P3[2] = "'" 13218 join $S1, "", $P3 13219 goto __label_4 # break 13220 __label_7: # case 13221 $P5 = $P2.'emit_get'(__ARG_1, self) 13222 set $S1, $P5 13223 goto __label_4 # break 13224 __label_8: # case 13225 InternalError("Builtin unexpected here", self) 13226 __label_5: # default 13227 root_new $P6, ['parrot';'ResizablePMCArray'] 13228 assign $P6, 3 13229 $P6[0] = "'" 13230 $P7 = $P1.'getName'() 13231 $P6[1] = $P7 13232 $P6[2] = "'" 13233 join $S1, "", $P6 13234 __label_4: # switch end 13235 __label_3: # endif 13236 goto __label_2 13237 __label_1: # else 13238 $P3 = $P1.'emit_get'(__ARG_1) 13239 set $S1, $P3 13240 __label_2: # endif 13241 .return($S1) 13242 13243.end # emitcall 13244 13245 13246.sub 'prepareargs' :method 13247 .param pmc __ARG_1 13248 getattribute $P1, self, 'args' 13249 if_null $P1, __label_1 13250 $P1.'getargvalues'(__ARG_1) 13251 __label_1: # endif 13252 13253.end # prepareargs 13254 13255 13256.sub 'emitargs' :method 13257 .param pmc __ARG_1 13258 __ARG_1.'print'("(") 13259 getattribute $P1, self, 'args' 13260 if_null $P1, __label_1 13261 $P1.'emitargs'(__ARG_1) 13262 __label_1: # endif 13263 __ARG_1.'say'(")") 13264 13265.end # emitargs 13266 13267 13268.sub 'emit' :method 13269 .param pmc __ARG_1 13270 .param string __ARG_2 13271 $P1 = self.'emitcall'(__ARG_1) 13272 null $S1 13273 if_null $P1, __label_1 13274 set $S1, $P1 13275 __label_1: 13276 self.'prepareargs'(__ARG_1) 13277 self.'annotate'(__ARG_1) 13278 __ARG_1.'print'(" ") 13279 ne __ARG_2, ".tailcall", __label_2 13280 __ARG_1.'print'(".tailcall ") 13281 goto __label_3 13282 __label_2: # else 13283 __ARG_1.'print'(__ARG_2, " = ") 13284 __label_3: # endif 13285 __ARG_1.'print'($S1) 13286 self.'emitargs'(__ARG_1) 13287 13288.end # emit 13289 13290 13291.sub 'emit_void' :method 13292 .param pmc __ARG_1 13293 $P1 = self.'emitcall'(__ARG_1) 13294 null $S1 13295 if_null $P1, __label_1 13296 set $S1, $P1 13297 __label_1: 13298 self.'prepareargs'(__ARG_1) 13299 self.'annotate'(__ARG_1) 13300 __ARG_1.'print'(" ") 13301 __ARG_1.'print'($S1) 13302 self.'emitargs'(__ARG_1) 13303 13304.end # emit_void 13305 13306.sub Winxed_class_init :anon :load :init 13307 newclass $P0, [ 'Winxed'; 'Compiler'; 'CallExpr' ] 13308 get_class $P1, [ 'Winxed'; 'Compiler'; 'Expr' ] 13309 addparent $P0, $P1 13310 addattribute $P0, 'funref' 13311 addattribute $P0, 'args' 13312.end 13313.namespace [ 'Winxed'; 'Compiler'; 'CallSubid' ] 13314 13315.sub 'CallSubid' :method 13316 .param pmc __ARG_1 13317 .param pmc __ARG_2 13318 .param pmc __ARG_3 13319 .param string __ARG_4 13320 getattribute $P1, __ARG_1, 'owner' 13321 getattribute $P2, __ARG_1, 'start' 13322 self.'Expr'($P1, $P2) 13323 setattribute self, 'funref', __ARG_2 13324 setattribute self, 'args', __ARG_3 13325 box $P1, __ARG_4 13326 setattribute self, 'subid', $P1 13327 13328.end # CallSubid 13329 13330 13331.sub 'emitcall' :method 13332 .param pmc __ARG_1 13333 getattribute $P1, self, 'subid' 13334 .return($P1) 13335 13336.end # emitcall 13337 13338.sub Winxed_class_init :anon :load :init 13339 newclass $P0, [ 'Winxed'; 'Compiler'; 'CallSubid' ] 13340 get_class $P1, [ 'Winxed'; 'Compiler'; 'CallExpr' ] 13341 addparent $P0, $P1 13342 addattribute $P0, 'subid' 13343.end 13344.namespace [ 'Winxed'; 'Compiler'; 'CallMemberExpr' ] 13345 13346.sub 'CallMemberExpr' :method 13347 .param pmc __ARG_1 13348 .param pmc __ARG_2 13349 .param pmc __ARG_3 13350 getattribute $P1, __ARG_1, 'owner' 13351 getattribute $P2, __ARG_1, 'start' 13352 self.'Expr'($P1, $P2) 13353 setattribute self, 'funref', __ARG_2 13354 setattribute self, 'args', __ARG_3 13355 13356.end # CallMemberExpr 13357 13358 13359.sub 'emitcall' :method 13360 .param pmc __ARG_1 13361 getattribute $P1, self, 'funref' 13362 getattribute $P2, $P1, 'left' 13363 __label_2: # while 13364 isa $I1, $P2, [ 'Winxed'; 'Compiler'; 'MemberExpr' ] 13365 unless $I1 goto __label_1 13366 getattribute $P2, $P2, 'left' 13367 goto __label_2 13368 __label_1: # endwhile 13369 $P6 = $P2.'isidentifier'() 13370 if_null $P6, __label_3 13371 unless $P6 goto __label_3 13372 $P7 = $P2.'checkIdentifier'() 13373 null $S1 13374 if_null $P7, __label_4 13375 set $S1, $P7 13376 __label_4: 13377 isnull $I1, $S1 13378 if $I1 goto __label_6 13379 iseq $I1, $S1, "" 13380 __label_6: 13381 unless $I1 goto __label_5 13382 new $P3, ['ResizableStringArray'] 13383 $P1.'buildkey'($P3) 13384 $P6 = $P3.'pop'() 13385 null $S2 13386 if_null $P6, __label_7 13387 set $S2, $P6 13388 __label_7: 13389 $P4 = self.'tempreg'("P") 13390 self.'annotate'(__ARG_1) 13391 set $P5, $P3 13392 null $S3 13393 elements $I1, $P5 13394 unless $I1 goto __label_8 13395 join $S5, "'; '", $P5 13396 concat $S6, "[ '", $S5 13397 concat $S6, $S6, "' ]" 13398 set $S3, $S6 13399 __label_8: # endif 13400 set $S4, $S3 13401 __ARG_1.'emitget_hll_global'($P4, $S2, $S4) 13402 .return($P4) 13403 __label_5: # endif 13404 __label_3: # endif 13405 root_new $P6, ['parrot';'ResizablePMCArray'] 13406 assign $P6, 4 13407 $P7 = $P1.'emit_left_get'(__ARG_1) 13408 $P6[0] = $P7 13409 $P6[1] = ".'" 13410 $P8 = $P1.'get_member'() 13411 $P6[2] = $P8 13412 $P6[3] = "'" 13413 join $S5, "", $P6 13414 .return($S5) 13415 13416.end # emitcall 13417 13418.sub Winxed_class_init :anon :load :init 13419 newclass $P0, [ 'Winxed'; 'Compiler'; 'CallMemberExpr' ] 13420 get_class $P1, [ 'Winxed'; 'Compiler'; 'CallExpr' ] 13421 addparent $P0, $P1 13422.end 13423.namespace [ 'Winxed'; 'Compiler'; 'CallMemberRefExpr' ] 13424 13425.sub 'CallMemberRefExpr' :method 13426 .param pmc __ARG_1 13427 .param pmc __ARG_2 13428 .param pmc __ARG_3 13429 getattribute $P1, __ARG_1, 'owner' 13430 getattribute $P2, __ARG_1, 'start' 13431 self.'Expr'($P1, $P2) 13432 setattribute self, 'funref', __ARG_2 13433 setattribute self, 'args', __ARG_3 13434 13435.end # CallMemberRefExpr 13436 13437 13438.sub 'emitcall' :method 13439 .param pmc __ARG_1 13440.const 'Sub' SyntaxError = "SyntaxError" 13441 getattribute $P1, self, 'funref' 13442 getattribute $P2, $P1, 'right' 13443 $P3 = $P2.'checkresult'() 13444 set $S3, $P3 13445 eq $S3, "P", __label_1 13446 set $S4, $P3 13447 eq $S4, "S", __label_1 13448 SyntaxError("Invalid expression type in '.*'", $P1) 13449 __label_1: # endif 13450 $P4 = $P1.'emit_left_get'(__ARG_1) 13451 null $S1 13452 if_null $P4, __label_2 13453 set $S1, $P4 13454 __label_2: 13455 $P4 = $P2.'emit_get'(__ARG_1) 13456 null $S2 13457 if_null $P4, __label_3 13458 set $S2, $P4 13459 __label_3: 13460 concat $S3, $S1, "." 13461 concat $S3, $S3, $S2 13462 .return($S3) 13463 13464.end # emitcall 13465 13466.sub Winxed_class_init :anon :load :init 13467 newclass $P0, [ 'Winxed'; 'Compiler'; 'CallMemberRefExpr' ] 13468 get_class $P1, [ 'Winxed'; 'Compiler'; 'CallExpr' ] 13469 addparent $P0, $P1 13470.end 13471.namespace [ 'Winxed'; 'Compiler'; 'MemberExprBase' ] 13472 13473.sub 'MemberExprBase' :method 13474 .param pmc __ARG_1 13475 .param pmc __ARG_2 13476 .param pmc __ARG_3 13477 self.'Expr'(__ARG_1, __ARG_2) 13478 setattribute self, 'left', __ARG_3 13479 13480.end # MemberExprBase 13481 13482 13483.sub 'emit_left_get' :method 13484 .param pmc __ARG_1 13485 getattribute $P1, self, 'left' 13486 .tailcall $P1.'emit_getvar'(__ARG_1) 13487 13488.end # emit_left_get 13489 13490.sub Winxed_class_init :anon :load :init 13491 newclass $P0, [ 'Winxed'; 'Compiler'; 'MemberExprBase' ] 13492 get_class $P1, [ 'Winxed'; 'Compiler'; 'Expr' ] 13493 addparent $P0, $P1 13494 addattribute $P0, 'left' 13495.end 13496.namespace [ 'Winxed'; 'Compiler'; 'MemberExpr' ] 13497 13498.sub 'MemberExpr' :method 13499 .param pmc __ARG_1 13500 .param pmc __ARG_2 13501 .param pmc __ARG_3 13502 .param pmc __ARG_4 13503 self.'MemberExprBase'(__ARG_1, __ARG_2, __ARG_3) 13504 setattribute self, 'right', __ARG_4 13505 13506.end # MemberExpr 13507 13508 13509.sub 'clone' :method 13510 .param pmc __ARG_1 13511 new $P1, [ 'Winxed'; 'Compiler'; 'MemberExpr' ] 13512 getattribute $P2, self, 'start' 13513 getattribute $P4, self, 'left' 13514 $P3 = $P4.'clone'(__ARG_1) 13515 $P1.'MemberExprBase'(__ARG_1, $P2, $P3) 13516 getattribute $P3, self, 'right' 13517 setattribute $P1, 'right', $P3 13518 .return($P1) 13519 13520.end # clone 13521 13522 13523.sub 'checkresult' :method 13524 .return("P") 13525 13526.end # checkresult 13527 13528 13529.sub 'search_nonmember' :method 13530 null $P1 13531 getattribute $P2, self, 'left' 13532 __label_2: # while 13533 isa $I1, $P2, [ 'Winxed'; 'Compiler'; 'MemberExpr' ] 13534 unless $I1 goto __label_1 13535 getattribute $P2, $P2, 'left' 13536 goto __label_2 13537 __label_1: # endwhile 13538 isa $I1, $P2, [ 'Winxed'; 'Compiler'; 'IdentifierExpr' ] 13539 unless $I1 goto __label_3 13540 $P3 = $P2.'checkIdentifier'() 13541 isnull $I1, $P3 13542 if $I1 goto __label_5 13543 set $S1, $P3 13544 iseq $I1, $S1, "" 13545 __label_5: 13546 unless $I1 goto __label_4 13547 root_new $P4, ['parrot';'ResizablePMCArray'] 13548 self.'buildkey'($P4) 13549 .tailcall self.'scopesearch'($P4, 0) 13550 __label_4: # endif 13551 __label_3: # endif 13552 null $P5 13553 .return($P5) 13554 13555.end # search_nonmember 13556 13557 13558.sub 'optimize' :method 13559 getattribute $P4, self, 'left' 13560 $P3 = $P4.'optimize'() 13561 setattribute self, 'left', $P3 13562 $P1 = self.'search_nonmember'() 13563 if_null $P1, __label_3 13564 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'FunctionStatement' ] 13565 if $I1 goto __label_4 13566 isa $I2, $P1, [ 'Winxed'; 'Compiler'; 'FunctionExtern' ] 13567 if $I2 goto __label_5 13568 isa $I3, $P1, [ 'Winxed'; 'Compiler'; 'VarData' ] 13569 box $P2, $I3 13570 unless $P2 goto __label_7 13571 $P2 = $P1.'isconst'() 13572 __label_7: 13573 set $I4, $P2 13574 if $I4 goto __label_6 13575 goto __label_2 13576 __label_3: # case 13577 goto __label_1 # break 13578 __label_4: # case 13579 $P3 = $P1.'ismulti'() 13580 if_null $P3, __label_8 13581 unless $P3 goto __label_8 13582 new $P5, [ 'Winxed'; 'Compiler'; 'FunctionRef' ] 13583 getattribute $P6, self, 'owner' 13584 getattribute $P7, self, 'start' 13585 $P5.'FunctionRef'($P6, $P7, $P1) 13586 set $P4, $P5 13587 .return($P4) 13588 __label_8: # endif 13589 goto __label_1 # break 13590 __label_5: # case 13591 new $P9, [ 'Winxed'; 'Compiler'; 'FunctionRef' ] 13592 getattribute $P10, self, 'owner' 13593 getattribute $P11, self, 'start' 13594 $P9.'FunctionRef'($P10, $P11, $P1) 13595 set $P8, $P9 13596 .return($P8) 13597 __label_6: # case 13598 .tailcall $P1.'getvalue'() 13599 __label_2: # default 13600 __label_1: # switch end 13601 .return(self) 13602 13603.end # optimize 13604 13605 13606.sub 'buildkey' :method 13607 .param pmc __ARG_1 13608 getattribute $P1, self, 'left' 13609 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'IdentifierExpr' ] 13610 unless $I1 goto __label_1 13611 $P2 = $P1.'getName'() 13612 push __ARG_1, $P2 13613 goto __label_2 13614 __label_1: # else 13615 $P1.'buildkey'(__ARG_1) 13616 __label_2: # endif 13617 getattribute $P3, self, 'right' 13618 $P2 = $P3.'getidentifier'() 13619 push __ARG_1, $P2 13620 13621.end # buildkey 13622 13623 13624.sub 'get_member' :method 13625 getattribute $P1, self, 'right' 13626 .return($P1) 13627 13628.end # get_member 13629 13630 13631.sub '__emit_get_left' :method 13632 .param pmc __ARG_1 13633.const 'Sub' SyntaxError = "SyntaxError" 13634 getattribute $P1, self, 'left' 13635 $P2 = $P1.'checkresult'() 13636 set $S1, $P2 13637 eq $S1, "P", __label_1 13638 SyntaxError("non-var at left of '.'", self) 13639 __label_1: # endif 13640 .tailcall $P1.'emit_get_nonull'(__ARG_1) 13641 13642.end # __emit_get_left 13643 13644 13645.sub 'emit_get' :method 13646 .param pmc __ARG_1 13647 $P1 = self.'tempreg'("P") 13648 null $S1 13649 if_null $P1, __label_1 13650 set $S1, $P1 13651 __label_1: 13652 self.'emit'(__ARG_1, $S1) 13653 .return($S1) 13654 13655.end # emit_get 13656 13657 13658.sub 'emit' :method 13659 .param pmc __ARG_1 13660 .param string __ARG_2 13661 $P1 = self.'__emit_get_left'(__ARG_1) 13662 null $S1 13663 if_null $P1, __label_1 13664 set $S1, $P1 13665 __label_1: 13666 getattribute $P2, self, 'right' 13667 $P1 = $P2.'getidentifier'() 13668 null $S2 13669 if_null $P1, __label_2 13670 set $S2, $P1 13671 __label_2: 13672 self.'annotate'(__ARG_1) 13673 __ARG_1.'say'(" ", "getattribute ", __ARG_2, ", ", $S1, ", '", $S2, "'") 13674 13675.end # emit 13676 13677 13678.sub 'emit_assign_get' :method 13679 .param pmc __ARG_1 13680 .param pmc __ARG_2 13681 $P1 = self.'__emit_get_left'(__ARG_1) 13682 null $S1 13683 if_null $P1, __label_1 13684 set $S1, $P1 13685 __label_1: 13686 $P1 = self.'tempreg'("P") 13687 null $S2 13688 if_null $P1, __label_2 13689 set $S2, $P1 13690 __label_2: 13691 $P1 = __ARG_2.'isnull'() 13692 if_null $P1, __label_3 13693 unless $P1 goto __label_3 13694 __ARG_1.'emitnull'($S2) 13695 goto __label_4 13696 __label_3: # else 13697 $P2 = __ARG_2.'emit_get'(__ARG_1) 13698 null $S3 13699 if_null $P2, __label_5 13700 set $S3, $P2 13701 __label_5: 13702 $P1 = __ARG_2.'checkresult'() 13703 set $S5, $P1 13704 eq $S5, "P", __label_6 13705 __ARG_1.'emitbox'($S2, $S3) 13706 goto __label_7 13707 __label_6: # else 13708 set $S2, $S3 13709 __label_7: # endif 13710 __label_4: # endif 13711 getattribute $P2, self, 'right' 13712 $P1 = $P2.'getidentifier'() 13713 null $S4 13714 if_null $P1, __label_8 13715 set $S4, $P1 13716 __label_8: 13717 self.'annotate'(__ARG_1) 13718 __ARG_1.'say'(" ", "setattribute ", $S1, ", '", $S4, "', ", $S2) 13719 .return($S2) 13720 13721.end # emit_assign_get 13722 13723.sub Winxed_class_init :anon :load :init 13724 newclass $P0, [ 'Winxed'; 'Compiler'; 'MemberExpr' ] 13725 get_class $P1, [ 'Winxed'; 'Compiler'; 'MemberExprBase' ] 13726 addparent $P0, $P1 13727 addattribute $P0, 'right' 13728.end 13729.namespace [ 'Winxed'; 'Compiler'; 'MemberRefExpr' ] 13730 13731.sub 'MemberRefExpr' :method 13732 .param pmc __ARG_1 13733 .param pmc __ARG_2 13734 .param pmc __ARG_3 13735 .param pmc __ARG_4 13736 self.'MemberExprBase'(__ARG_1, __ARG_2, __ARG_3) 13737 setattribute self, 'right', __ARG_4 13738 13739.end # MemberRefExpr 13740 13741 13742.sub 'clone' :method 13743 .param pmc __ARG_1 13744 new $P2, [ 'Winxed'; 'Compiler'; 'MemberRefExpr' ] 13745 getattribute $P3, self, 'start' 13746 getattribute $P5, self, 'left' 13747 $P4 = $P5.'clone'(__ARG_1) 13748 getattribute $P7, self, 'right' 13749 $P6 = $P7.'clone'(__ARG_1) 13750 $P2.'MemberRefExpr'(__ARG_1, $P3, $P4, $P6) 13751 set $P1, $P2 13752 .return($P1) 13753 13754.end # clone 13755 13756 13757.sub 'checkresult' :method 13758 .return("P") 13759 13760.end # checkresult 13761 13762 13763.sub 'optimize' :method 13764 getattribute $P3, self, 'left' 13765 $P2 = $P3.'optimize'() 13766 setattribute self, 'left', $P2 13767 getattribute $P3, self, 'right' 13768 $P2 = $P3.'optimize'() 13769 setattribute self, 'right', $P2 13770 .return(self) 13771 13772.end # optimize 13773 13774 13775.sub 'emit' :method 13776 .param pmc __ARG_1 13777 .param string __ARG_2 13778.const 'Sub' Expected = "Expected" 13779 getattribute $P1, self, 'left' 13780 getattribute $P2, self, 'right' 13781 $P3 = $P2.'checkresult'() 13782 set $S3, $P3 13783 eq $S3, "S", __label_1 13784 Expected("string expression", $P2) 13785 __label_1: # endif 13786 $P3 = $P1.'emit_get_nonull'(__ARG_1) 13787 null $S1 13788 if_null $P3, __label_2 13789 set $S1, $P3 13790 __label_2: 13791 $P3 = $P2.'emit_get'(__ARG_1) 13792 null $S2 13793 if_null $P3, __label_3 13794 set $S2, $P3 13795 __label_3: 13796 self.'annotate'(__ARG_1) 13797 __ARG_1.'say'(" ", "getattribute ", __ARG_2, ", ", $S1, ", ", $S2) 13798 13799.end # emit 13800 13801 13802.sub 'emit_assign_get' :method 13803 .param pmc __ARG_1 13804 .param pmc __ARG_2 13805.const 'Sub' Expected = "Expected" 13806 getattribute $P1, self, 'left' 13807 getattribute $P2, self, 'right' 13808 $P3 = $P2.'checkresult'() 13809 set $S5, $P3 13810 eq $S5, "S", __label_1 13811 Expected("string expression", $P2) 13812 __label_1: # endif 13813 $P3 = $P1.'emit_get_nonull'(__ARG_1) 13814 null $S1 13815 if_null $P3, __label_2 13816 set $S1, $P3 13817 __label_2: 13818 $P3 = $P2.'emit_get'(__ARG_1) 13819 null $S2 13820 if_null $P3, __label_3 13821 set $S2, $P3 13822 __label_3: 13823 null $S3 13824 $P3 = __ARG_2.'isnull'() 13825 set $I1, $P3 13826 if $I1 goto __label_6 13827 $P4 = __ARG_2.'checkresult'() 13828 set $S5, $P4 13829 eq $S5, "P", __label_7 13830 goto __label_5 13831 __label_6: # case 13832 $P5 = self.'tempreg'("P") 13833 set $S3, $P5 13834 self.'annotate'(__ARG_1) 13835 __ARG_1.'emitnull'($S3) 13836 goto __label_4 # break 13837 __label_7: # case 13838 $P6 = __ARG_2.'emit_get'(__ARG_1) 13839 set $S3, $P6 13840 goto __label_4 # break 13841 __label_5: # default 13842 $P7 = self.'tempreg'("P") 13843 set $S3, $P7 13844 $P8 = __ARG_2.'emit_get'(__ARG_1) 13845 null $S4 13846 if_null $P8, __label_8 13847 set $S4, $P8 13848 __label_8: 13849 self.'annotate'(__ARG_1) 13850 __ARG_1.'emitbox'($S3, $S4) 13851 __label_4: # switch end 13852 self.'annotate'(__ARG_1) 13853 __ARG_1.'say'(" ", "setattribute ", $S1, ", ", $S2, ", ", $S3) 13854 .return($S3) 13855 13856.end # emit_assign_get 13857 13858.sub Winxed_class_init :anon :load :init 13859 newclass $P0, [ 'Winxed'; 'Compiler'; 'MemberRefExpr' ] 13860 get_class $P1, [ 'Winxed'; 'Compiler'; 'MemberExprBase' ] 13861 addparent $P0, $P1 13862 addattribute $P0, 'right' 13863.end 13864.namespace [ 'Winxed'; 'Compiler'; 'StringIndexExpr' ] 13865 13866.sub 'StringIndexExpr' :method 13867 .param pmc __ARG_1 13868 .param pmc __ARG_2 13869 .param pmc __ARG_3 13870 .param pmc __ARG_4 13871 self.'Expr'(__ARG_1, __ARG_2) 13872 setattribute self, 'left', __ARG_3 13873 setattribute self, 'arg', __ARG_4 13874 13875.end # StringIndexExpr 13876 13877 13878.sub 'checkresult' :method 13879 .return("S") 13880 13881.end # checkresult 13882 13883 13884.sub 'emit' :method 13885 .param pmc __ARG_1 13886 .param string __ARG_2 13887.const 'Sub' sformat = "sformat" 13888 getattribute $P2, self, 'left' 13889 $P1 = $P2.'emit_get'(__ARG_1) 13890 null $S1 13891 if_null $P1, __label_1 13892 set $S1, $P1 13893 __label_1: 13894 getattribute $P2, self, 'arg' 13895 $P1 = $P2.'emit_getint'(__ARG_1) 13896 null $S2 13897 if_null $P1, __label_2 13898 set $S2, $P1 13899 __label_2: 13900 self.'annotate'(__ARG_1) 13901 $P1 = sformat(" substr %0, %1, %2, 1", __ARG_2, $S1, $S2) 13902 __ARG_1.'say'($P1) 13903 13904.end # emit 13905 13906.sub Winxed_class_init :anon :load :init 13907 newclass $P0, [ 'Winxed'; 'Compiler'; 'StringIndexExpr' ] 13908 get_class $P1, [ 'Winxed'; 'Compiler'; 'Expr' ] 13909 addparent $P0, $P1 13910 addattribute $P0, 'left' 13911 addattribute $P0, 'arg' 13912.end 13913.namespace [ 'Winxed'; 'Compiler'; 'IndexExpr' ] 13914 13915.sub 'IndexExpr' :method 13916 .param pmc __ARG_1 13917 .param pmc __ARG_2 13918 .param pmc __ARG_3 13919 .param pmc __ARG_4 13920 self.'Expr'(__ARG_2, __ARG_3) 13921 setattribute self, 'left', __ARG_4 13922 new $P3, [ 'Winxed'; 'Compiler'; 'SimpleArgList' ] 13923 $P3.'SimpleArgList'(__ARG_1, __ARG_2, "]") 13924 set $P2, $P3 13925 setattribute self, 'args', $P2 13926 13927.end # IndexExpr 13928 13929 13930.sub 'clone' :method 13931 .param pmc __ARG_1 13932 new $P1, [ 'Winxed'; 'Compiler'; 'IndexExpr' ] 13933 getattribute $P2, self, 'start' 13934 $P1.'Expr'(__ARG_1, $P2) 13935 getattribute $P4, self, 'left' 13936 $P3 = $P4.'clone'(__ARG_1) 13937 setattribute $P1, 'left', $P3 13938 getattribute $P4, self, 'args' 13939 $P3 = $P4.'clone'(__ARG_1) 13940 setattribute $P1, 'args', $P3 13941 .return($P1) 13942 13943.end # clone 13944 13945 13946.sub 'checkresult' :method 13947 .return("P") 13948 13949.end # checkresult 13950 13951 13952.sub 'optimize' :method 13953.const 'Sub' SyntaxError = "SyntaxError" 13954.const 'Sub' bindmethod0 = "bindmethod0" 13955 getattribute $P4, self, 'left' 13956 $P1 = $P4.'optimize'() 13957 setattribute self, 'left', $P1 13958 getattribute $P2, self, 'args' 13959 $P2.'optimizeargs'() 13960 $P4 = $P1.'checkresult'() 13961 set $S2, $P4 13962 if_null $S2, __label_1 13963 length $I2, $S2 13964 ne $I2, 1, __label_1 13965 ord $I2, $S2 13966 if $I2 == 83 goto __label_3 13967 if $I2 == 80 goto __label_4 13968 goto __label_1 13969 __label_3: # case 13970 $P5 = $P2.'numargs'() 13971 set $I3, $P5 13972 eq $I3, 1, __label_5 13973 SyntaxError("Bad string index", self) 13974 __label_5: # endif 13975 $P3 = $P2.'getarg'(0) 13976 $P6 = $P1.'isstringliteral'() 13977 unless $P6 goto __label_6 13978 $P7 = $P3.'isintegerliteral'() 13979 unless $P7 goto __label_6 13980 $P8 = $P3.'getIntegerValue'() 13981 set $I1, $P8 13982 $P4 = $P1.'getStringValue'() 13983 null $S1 13984 if_null $P4, __label_7 13985 set $S1, $P4 13986 __label_7: 13987 getattribute $P4, self, 'owner' 13988 getattribute $P5, self, 'start' 13989 substr $S2, $S1, $I1, 1 13990 .tailcall bindmethod0($P4, $P5, $S2) 13991 __label_6: # endif 13992 new $P5, [ 'Winxed'; 'Compiler'; 'StringIndexExpr' ] 13993 getattribute $P6, self, 'owner' 13994 getattribute $P7, self, 'start' 13995 $P5.'StringIndexExpr'($P6, $P7, $P1, $P3) 13996 set $P4, $P5 13997 .return($P4) 13998 __label_4: # case 13999 goto __label_2 # break 14000 __label_1: # default 14001 SyntaxError("Type not valid for indexing", $P1) 14002 __label_2: # switch end 14003 .return(self) 14004 14005.end # optimize 14006 14007 14008.sub 'emit_prep' :method 14009 .param pmc __ARG_1 14010.const 'Sub' InternalError = "InternalError" 14011 getattribute $P2, self, 'regleft' 14012 isnull $I1, $P2 14013 not $I1 14014 if $I1 goto __label_2 14015 getattribute $P3, self, 'argregs' 14016 isnull $I1, $P3 14017 not $I1 14018 __label_2: 14019 unless $I1 goto __label_1 14020 getattribute $P4, self, 'start' 14021 InternalError("wrong call to IndexExpr.emit_args", $P4) 14022 __label_1: # endif 14023 getattribute $P1, self, 'left' 14024 $P4 = $P1.'isidentifier'() 14025 if_null $P4, __label_4 14026 unless $P4 goto __label_4 14027 $P3 = $P1.'getIdentifier'() 14028 goto __label_3 14029 __label_4: 14030 $P5 = $P1.'emit_get'(__ARG_1) 14031 set $P3, $P5 14032 __label_3: 14033 setattribute self, 'regleft', $P3 14034 getattribute $P4, self, 'args' 14035 $P3 = $P4.'getargvalues'(__ARG_1) 14036 setattribute self, 'argregs', $P3 14037 14038.end # emit_prep 14039 14040 14041.sub 'emit_aux' :method 14042 .param pmc __ARG_1 14043.const 'Sub' InternalError = "InternalError" 14044 getattribute $P1, self, 'regleft' 14045 getattribute $P2, self, 'argregs' 14046 isnull $I1, $P1 14047 if $I1 goto __label_2 14048 isnull $I1, $P2 14049 __label_2: 14050 unless $I1 goto __label_1 14051 getattribute $P3, self, 'start' 14052 InternalError("wrong call to IndexExpr.emit_aux", $P3) 14053 __label_1: # endif 14054 getattribute $P3, self, 'regleft' 14055 __ARG_1.'print'($P3, "[") 14056 join $S1, "; ", $P2 14057 __ARG_1.'print'($S1) 14058 __ARG_1.'print'("]") 14059 14060.end # emit_aux 14061 14062 14063.sub 'emit' :method 14064 .param pmc __ARG_1 14065 .param string __ARG_2 14066 self.'emit_prep'(__ARG_1) 14067 self.'annotate'(__ARG_1) 14068 __ARG_1.'print'(" ", __ARG_2, " = ") 14069 self.'emit_aux'(__ARG_1) 14070 __ARG_1.'say'("") 14071 14072.end # emit 14073 14074 14075.sub 'emit_getint' :method 14076 .param pmc __ARG_1 14077 $P1 = self.'tempreg'("I") 14078 null $S1 14079 if_null $P1, __label_1 14080 set $S1, $P1 14081 __label_1: 14082 self.'emit'(__ARG_1, $S1) 14083 .return($S1) 14084 14085.end # emit_getint 14086 14087 14088.sub 'emit_assign_get' :method 14089 .param pmc __ARG_1 14090 .param pmc __ARG_2 14091 self.'emit_prep'(__ARG_1) 14092 null $S1 14093 $P1 = __ARG_2.'isnull'() 14094 if_null $P1, __label_1 14095 unless $P1 goto __label_1 14096 $P2 = self.'tempreg'("P") 14097 set $S1, $P2 14098 __ARG_1.'emitnull'($S1) 14099 goto __label_2 14100 __label_1: # else 14101 $P1 = __ARG_2.'emit_get'(__ARG_1) 14102 set $S1, $P1 14103 __label_2: # endif 14104 self.'annotate'(__ARG_1) 14105 __ARG_1.'print'(" ") 14106 self.'emit_aux'(__ARG_1) 14107 __ARG_1.'say'(" = ", $S1) 14108 .return($S1) 14109 14110.end # emit_assign_get 14111 14112.sub Winxed_class_init :anon :load :init 14113 newclass $P0, [ 'Winxed'; 'Compiler'; 'IndexExpr' ] 14114 get_class $P1, [ 'Winxed'; 'Compiler'; 'Expr' ] 14115 addparent $P0, $P1 14116 addattribute $P0, 'left' 14117 addattribute $P0, 'regleft' 14118 addattribute $P0, 'args' 14119 addattribute $P0, 'argregs' 14120.end 14121.namespace [ 'Winxed'; 'Compiler'; 'ArrayExpr' ] 14122 14123.sub 'ArrayExpr' :method 14124 .param pmc __ARG_1 14125 .param pmc __ARG_2 14126 .param pmc __ARG_3 14127.const 'Sub' parseListOrEmpty = "parseListOrEmpty" 14128.const 'Sub' WSubId_75 = "WSubId_75" 14129 self.'Expr'(__ARG_2, __ARG_3) 14130 $P2 = parseListOrEmpty(__ARG_1, __ARG_2, WSubId_75, "]") 14131 setattribute self, 'values', $P2 14132 14133.end # ArrayExpr 14134 14135 14136.sub 'clone' :method 14137 .param pmc __ARG_1 14138 new $P1, [ 'Winxed'; 'Compiler'; 'ArrayExpr' ] 14139 getattribute $P8, self, 'start' 14140 $P1.'Expr'(__ARG_1, $P8) 14141 getattribute $P8, self, 'values' 14142 if_null $P8, __label_1 14143 getattribute $P2, self, 'values' 14144 set $P3, __ARG_1 14145.const 'Sub' bindlast = "bindlast" 14146.const 'Sub' bindmethod = "bindmethod" 14147 set $P4, $P2 14148 root_new $P5, ['parrot';'ResizablePMCArray'] 14149 $P11 = bindmethod("clone") 14150 $P6 = bindlast($P11, $P3) 14151 if_null $P4, __label_3 14152 iter $P12, $P4 14153 set $P12, 0 14154 __label_2: # for iteration 14155 unless $P12 goto __label_3 14156 shift $P7, $P12 14157 $P13 = $P6($P7) 14158 push $P5, $P13 14159 goto __label_2 14160 __label_3: # endfor 14161 set $P10, $P5 14162 set $P8, $P10 14163 setattribute $P1, 'values', $P8 14164 __label_1: # endif 14165 .return($P1) 14166 14167.end # clone 14168 14169 14170.sub 'checkresult' :method 14171 .return("P") 14172 14173.end # checkresult 14174 14175 14176.sub 'optimize' :method 14177 getattribute $P1, self, 'values' 14178 if_null $P1, __label_2 14179 elements $I1, $P1 14180 goto __label_1 14181 __label_2: 14182 null $I1 14183 __label_1: 14184 null $I2 14185 __label_5: # for condition 14186 ge $I2, $I1, __label_4 14187 $P3 = $P1[$I2] 14188 $P2 = $P3.'optimize'() 14189 $P1[$I2] = $P2 14190 __label_3: # for iteration 14191 inc $I2 14192 goto __label_5 14193 __label_4: # for end 14194 .return(self) 14195 14196.end # optimize 14197 14198 14199.sub 'emit' :method 14200 .param pmc __ARG_1 14201 .param string __ARG_2 14202 $P1 = self.'emit_get'(__ARG_1) 14203 null $S1 14204 if_null $P1, __label_1 14205 set $S1, $P1 14206 __label_1: 14207 __ARG_1.'emitset'(__ARG_2, $S1) 14208 14209.end # emit 14210 14211 14212.sub 'emit_void' :method 14213 .param pmc __ARG_1 14214 self.'emit_init'(__ARG_1, "") 14215 14216.end # emit_void 14217 14218 14219.sub 'emit_get' :method 14220 .param pmc __ARG_1 14221 $P1 = self.'tempreg'("P") 14222 null $S1 14223 if_null $P1, __label_1 14224 set $S1, $P1 14225 __label_1: 14226 self.'emit_init'(__ARG_1, $S1) 14227 .return($S1) 14228 14229.end # emit_get 14230 14231 14232.sub 'emit_init' :method 14233 .param pmc __ARG_1 14234 .param string __ARG_2 14235.const 'Sub' sformat = "sformat" 14236 self.'annotate'(__ARG_1) 14237 getattribute $P1, self, 'values' 14238 unless_null $P1, __label_2 14239 null $I1 14240 goto __label_1 14241 __label_2: 14242 elements $I1, $P1 14243 __label_1: 14244 eq __ARG_2, "", __label_3 14245 __ARG_1.'say'(" ", "root_new ", __ARG_2, ", ['parrot';'ResizablePMCArray']") 14246 le $I1, 0, __label_4 14247 __ARG_1.'emitassign'(__ARG_2, $I1) 14248 __label_4: # endif 14249 __label_3: # endif 14250 new $P4, [ 'Winxed'; 'Compiler'; 'CollectValues' ] 14251 getattribute $P5, self, 'owner' 14252 $P4.'CollectValues'($P5, __ARG_1) 14253 set $P2, $P4 14254 null $I2 14255 if_null $P1, __label_6 14256 iter $P6, $P1 14257 set $P6, 0 14258 __label_5: # for iteration 14259 unless $P6 goto __label_6 14260 shift $P3, $P6 14261 $P4 = $P2.'add'($P3) 14262 null $S1 14263 if_null $P4, __label_7 14264 set $S1, $P4 14265 __label_7: 14266 eq __ARG_2, "", __label_8 14267 self.'annotate'(__ARG_1) 14268 $P4 = sformat(" %0[%1] = %2", __ARG_2, $I2, $S1) 14269 __ARG_1.'say'($P4) 14270 inc $I2 14271 __label_8: # endif 14272 goto __label_5 14273 __label_6: # endfor 14274 14275.end # emit_init 14276 14277.sub Winxed_class_init :anon :load :init 14278 newclass $P0, [ 'Winxed'; 'Compiler'; 'ArrayExpr' ] 14279 get_class $P1, [ 'Winxed'; 'Compiler'; 'Expr' ] 14280 addparent $P0, $P1 14281 addattribute $P0, 'values' 14282.end 14283.namespace [ 'Winxed'; 'Compiler'; 'HashExpr' ] 14284 14285.sub 'HashExpr' :method 14286 .param pmc __ARG_1 14287 .param pmc __ARG_2 14288 .param pmc __ARG_3 14289.const 'Sub' WSubId_75 = "WSubId_75" 14290.const 'Sub' ExpectOp = "ExpectOp" 14291.const 'Sub' Expected = "Expected" 14292 self.'Expr'(__ARG_2, __ARG_3) 14293 $P1 = __ARG_1.'get'() 14294 root_new $P2, ['parrot';'ResizablePMCArray'] 14295 root_new $P3, ['parrot';'ResizablePMCArray'] 14296 $P6 = $P1.'isop'("}") 14297 if $P6 goto __label_1 14298 __ARG_1.'unget'($P1) 14299 __label_2: # do 14300 $P4 = WSubId_75(__ARG_1, __ARG_2) 14301 ExpectOp(":", __ARG_1) 14302 $P5 = WSubId_75(__ARG_1, __ARG_2) 14303 push $P2, $P4 14304 push $P3, $P5 14305 __label_4: # continue 14306 $P1 = __ARG_1.'get'() 14307 $P6 = $P1.'isop'(",") 14308 if_null $P6, __label_3 14309 if $P6 goto __label_2 14310 __label_3: # enddo 14311 $P6 = $P1.'isop'("}") 14312 if $P6 goto __label_5 14313 Expected("',' or '}'", $P1) 14314 __label_5: # endif 14315 __label_1: # endif 14316 setattribute self, 'keys', $P2 14317 setattribute self, 'values', $P3 14318 14319.end # HashExpr 14320 14321 14322.sub 'clone' :method 14323 .param pmc __ARG_1 14324 new $P1, [ 'Winxed'; 'Compiler'; 'HashExpr' ] 14325 getattribute $P14, self, 'start' 14326 $P1.'Expr'(__ARG_1, $P14) 14327 getattribute $P2, self, 'keys' 14328 set $P3, __ARG_1 14329.const 'Sub' bindlast = "bindlast" 14330.const 'Sub' bindmethod = "bindmethod" 14331 set $P4, $P2 14332 root_new $P5, ['parrot';'ResizablePMCArray'] 14333 $P16 = bindmethod("clone") 14334 $P6 = bindlast($P16, $P3) 14335 if_null $P4, __label_2 14336 iter $P17, $P4 14337 set $P17, 0 14338 __label_1: # for iteration 14339 unless $P17 goto __label_2 14340 shift $P7, $P17 14341 $P18 = $P6($P7) 14342 push $P5, $P18 14343 goto __label_1 14344 __label_2: # endfor 14345 set $P15, $P5 14346 set $P14, $P15 14347 setattribute $P1, 'keys', $P14 14348 getattribute $P8, self, 'values' 14349 set $P9, __ARG_1 14350.const 'Sub' bindlast = "bindlast" 14351.const 'Sub' bindmethod = "bindmethod" 14352 set $P10, $P8 14353 root_new $P11, ['parrot';'ResizablePMCArray'] 14354 $P16 = bindmethod("clone") 14355 $P12 = bindlast($P16, $P9) 14356 if_null $P10, __label_4 14357 iter $P20, $P10 14358 set $P20, 0 14359 __label_3: # for iteration 14360 unless $P20 goto __label_4 14361 shift $P13, $P20 14362 $P18 = $P12($P13) 14363 push $P11, $P18 14364 goto __label_3 14365 __label_4: # endfor 14366 set $P19, $P11 14367 set $P14, $P19 14368 setattribute $P1, 'values', $P14 14369 .return($P1) 14370 14371.end # clone 14372 14373 14374.sub 'checkresult' :method 14375 .return("P") 14376 14377.end # checkresult 14378 14379 14380.sub 'optimize' :method 14381 getattribute $P1, self, 'keys' 14382 if_null $P1, __label_2 14383 elements $I1, $P1 14384 goto __label_1 14385 __label_2: 14386 null $I1 14387 __label_1: 14388 null $I2 14389 __label_5: # for condition 14390 ge $I2, $I1, __label_4 14391 $P4 = $P1[$I2] 14392 $P3 = $P4.'optimize'() 14393 $P1[$I2] = $P3 14394 __label_3: # for iteration 14395 inc $I2 14396 goto __label_5 14397 __label_4: # for end 14398 getattribute $P2, self, 'values' 14399 if_null $P2, __label_7 14400 elements $I3, $P2 14401 goto __label_6 14402 __label_7: 14403 null $I3 14404 __label_6: 14405 null $I4 14406 __label_10: # for condition 14407 ge $I4, $I3, __label_9 14408 $P4 = $P2[$I4] 14409 $P3 = $P4.'optimize'() 14410 $P2[$I4] = $P3 14411 __label_8: # for iteration 14412 inc $I4 14413 goto __label_10 14414 __label_9: # for end 14415 .return(self) 14416 14417.end # optimize 14418 14419 14420.sub 'emit' :method 14421 .param pmc __ARG_1 14422 .param string __ARG_2 14423 self.'annotate'(__ARG_1) 14424 eq __ARG_2, "", __label_1 14425 __ARG_1.'say'(" ", "root_new ", __ARG_2, ", ['parrot';'Hash']") 14426 __label_1: # endif 14427 getattribute $P1, self, 'keys' 14428 getattribute $P2, self, 'values' 14429 new $P5, [ 'Winxed'; 'Compiler'; 'CollectValues' ] 14430 getattribute $P6, self, 'owner' 14431 $P5.'CollectValues'($P6, __ARG_1) 14432 set $P3, $P5 14433 set $I1, $P1 14434 null $I2 14435 __label_4: # for condition 14436 ge $I2, $I1, __label_3 14437 $P4 = $P1[$I2] 14438 null $S1 14439 $P5 = $P4.'isidentifier'() 14440 unless $P5 goto __label_5 14441 $P6 = $P4.'checkIdentifier'() 14442 set $S4, $P6 14443 ne $S4, "", __label_5 14444 $P7 = $P4.'getName'() 14445 null $S2 14446 if_null $P7, __label_7 14447 set $S2, $P7 14448 __label_7: 14449 $P5 = self.'tempreg'("P") 14450 set $S1, $P5 14451 __ARG_1.'emitget_hll_global'($S1, $S2) 14452 goto __label_6 14453 __label_5: # else 14454 $P5 = $P4.'emit_get'(__ARG_1) 14455 set $S1, $P5 14456 __label_6: # endif 14457 $P6 = $P2[$I2] 14458 $P5 = $P3.'add'($P6) 14459 null $S3 14460 if_null $P5, __label_8 14461 set $S3, $P5 14462 __label_8: 14463 eq __ARG_2, "", __label_9 14464 __ARG_1.'say'(" ", __ARG_2, "[", $S1, "] = ", $S3) 14465 __label_9: # endif 14466 __label_2: # for iteration 14467 inc $I2 14468 goto __label_4 14469 __label_3: # for end 14470 14471.end # emit 14472 14473 14474.sub 'emit_void' :method 14475 .param pmc __ARG_1 14476 self.'emit'(__ARG_1, "") 14477 14478.end # emit_void 14479 14480 14481.sub 'emit_get' :method 14482 .param pmc __ARG_1 14483 $P1 = self.'tempreg'("P") 14484 null $S1 14485 if_null $P1, __label_1 14486 set $S1, $P1 14487 __label_1: 14488 self.'emit'(__ARG_1, $S1) 14489 .return($S1) 14490 14491.end # emit_get 14492 14493.sub Winxed_class_init :anon :load :init 14494 newclass $P0, [ 'Winxed'; 'Compiler'; 'HashExpr' ] 14495 get_class $P1, [ 'Winxed'; 'Compiler'; 'Expr' ] 14496 addparent $P0, $P1 14497 addattribute $P0, 'keys' 14498 addattribute $P0, 'values' 14499.end 14500.namespace [ 'Winxed'; 'Compiler'; 'NewBaseExpr' ] 14501 14502.sub 'checkresult' :method 14503 .return("P") 14504 14505.end # checkresult 14506 14507 14508.sub 'parseinitializer' :method 14509 .param pmc __ARG_1 14510 new $P3, [ 'Winxed'; 'Compiler'; 'ArgumentList' ] 14511 getattribute $P4, self, 'owner' 14512 getattribute $P5, self, 'start' 14513 $P3.'ArgumentList'($P4, $P5, __ARG_1, ")") 14514 set $P2, $P3 14515 setattribute self, 'initializer', $P2 14516 14517.end # parseinitializer 14518 14519 14520.sub 'numargs' :method 14521 getattribute $P1, self, 'initializer' 14522 unless_null $P1, __label_2 14523 set $I1, -1 14524 goto __label_1 14525 __label_2: 14526 $I1 = $P1.'numargs'() 14527 __label_1: 14528 .return($I1) 14529 14530.end # numargs 14531 14532 14533.sub 'optimize_initializer' :method 14534 getattribute $P1, self, 'initializer' 14535 if_null $P1, __label_1 14536 $P3 = $P1.'optimize'() 14537 setattribute self, 'initializer', $P3 14538 __label_1: # endif 14539 14540.end # optimize_initializer 14541 14542 14543.sub 'optimize' :method 14544 self.'optimize_initializer'() 14545 .return(self) 14546 14547.end # optimize 14548 14549 14550.sub 'emit_constructor' :method 14551 .param pmc __ARG_1 14552 .param string __ARG_2 14553 .param string __ARG_3 14554 getattribute $P1, self, 'initializer' 14555 if_null $P1, __label_1 14556 $P1.'getargvalues'(__ARG_1) 14557 __label_1: # endif 14558 __ARG_1.'print'(" ", __ARG_2, ".'", __ARG_3, "'(") 14559 if_null $P1, __label_2 14560 $P1.'emitargs'(__ARG_1) 14561 __label_2: # endif 14562 __ARG_1.'say'(")") 14563 14564.end # emit_constructor 14565 14566.sub Winxed_class_init :anon :load :init 14567 newclass $P0, [ 'Winxed'; 'Compiler'; 'NewBaseExpr' ] 14568 get_class $P1, [ 'Winxed'; 'Compiler'; 'Expr' ] 14569 addparent $P0, $P1 14570 addattribute $P0, 'initializer' 14571.end 14572.namespace [ 'Winxed'; 'Compiler' ] 14573 14574.sub 'warn_class_unknown' :subid('WSubId_109') 14575 .param pmc __ARG_1 14576 .param string __ARG_2 14577 .param pmc __ARG_3 14578 concat $S1, "class ", __ARG_2 14579 concat $S1, $S1, " not found at compile time" 14580 __ARG_1.'warn'($S1, __ARG_3) 14581 14582.end # warn_class_unknown 14583 14584.namespace [ 'Winxed'; 'Compiler'; 'NewExpr' ] 14585 14586.sub 'NewExpr' :method 14587 .param pmc __ARG_1 14588 .param pmc __ARG_2 14589 .param pmc __ARG_3 14590 .param pmc __ARG_4 14591.const 'Sub' SyntaxError = "SyntaxError" 14592 self.'Expr'(__ARG_2, __ARG_3) 14593 $P2 = __ARG_4.'isstring'() 14594 if $P2 goto __label_2 14595 $P2 = __ARG_4.'isidentifier'() 14596 __label_2: 14597 if $P2 goto __label_1 14598 SyntaxError("Unimplemented", __ARG_4) 14599 __label_1: # endif 14600 setattribute self, 'value', __ARG_4 14601 $P1 = __ARG_1.'get'() 14602 $P2 = $P1.'isop'("(") 14603 if_null $P2, __label_3 14604 unless $P2 goto __label_3 14605 self.'parseinitializer'(__ARG_1) 14606 goto __label_4 14607 __label_3: # else 14608 __ARG_1.'unget'($P1) 14609 __label_4: # endif 14610 14611.end # NewExpr 14612 14613 14614.sub 'clone' :method 14615 .param pmc __ARG_1 14616 new $P1, [ 'Winxed'; 'Compiler'; 'NewExpr' ] 14617 getattribute $P2, self, 'start' 14618 $P1.'Expr'(__ARG_1, $P2) 14619 getattribute $P3, self, 'value' 14620 setattribute $P1, 'value', $P3 14621 getattribute $P2, self, 'initializer' 14622 if_null $P2, __label_1 14623 getattribute $P5, self, 'initializer' 14624 $P4 = $P5.'clone'(__ARG_1) 14625 setattribute $P1, 'initializer', $P4 14626 __label_1: # endif 14627 .return($P1) 14628 14629.end # clone 14630 14631 14632.sub 'optimize' :method 14633.const 'Sub' SyntaxError = "SyntaxError" 14634 getattribute $P1, self, 'value' 14635 $P3 = $P1.'isidentifier'() 14636 if_null $P3, __label_1 14637 unless $P3 goto __label_1 14638 getattribute $P4, self, 'owner' 14639 $P2 = $P4.'getvar'($P1) 14640 if_null $P2, __label_2 14641 $P3 = $P2.'isconst'() 14642 unless $P3 goto __label_2 14643 $P1 = $P2.'getvalue'() 14644 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'StringLiteral' ] 14645 if $I1 goto __label_3 14646 SyntaxError("Constant value must evaluate to a string", $P1) 14647 __label_3: # endif 14648 getattribute $P4, $P1, 'strval' 14649 setattribute self, 'value', $P4 14650 __label_2: # endif 14651 __label_1: # endif 14652 self.'optimize_initializer'() 14653 .return(self) 14654 14655.end # optimize 14656 14657 14658.sub 'emit' :method 14659 .param pmc __ARG_1 14660 .param string __ARG_2 14661 .param int __ARG_3 :optional 14662.const 'Sub' SyntaxError = "SyntaxError" 14663.const 'Sub' WSubId_109 = "WSubId_109" 14664.const 'Sub' InternalError = "InternalError" 14665 self.'annotate'(__ARG_1) 14666 getattribute $P1, self, 'initializer' 14667 getattribute $P2, self, 'value' 14668 $P8 = self.'numargs'() 14669 set $I1, $P8 14670 $P8 = $P2.'isstring'() 14671 if_null $P8, __label_2 14672 unless $P8 goto __label_2 14673 null $I2 14674 goto __label_1 14675 __label_2: 14676 $P9 = $P2.'isidentifier'() 14677 if_null $P9, __label_4 14678 unless $P9 goto __label_4 14679 set $I2, 1 14680 goto __label_3 14681 __label_4: 14682 set $I2, -1 14683 __label_3: 14684 __label_1: 14685 set $S1, "" 14686 set $S2, __ARG_2 14687 null $S3 14688 if $I1 == -1 goto __label_7 14689 if $I1 == 0 goto __label_8 14690 if $I1 == 1 goto __label_9 14691 goto __label_5 14692 __label_7: # case 14693 __label_8: # case 14694 goto __label_6 # break 14695 __label_9: # case 14696 ne $I2, 1, __label_10 14697 if __ARG_3 goto __label_12 14698 $P8 = self.'tempreg'("P") 14699 set $S2, $P8 14700 __label_12: # endif 14701 goto __label_11 14702 __label_10: # else 14703 $P3 = $P1.'getfreearg'(0) 14704 $P8 = $P3.'emit_get'(__ARG_1) 14705 set $S1, $P8 14706 concat $S5, ", ", $S1 14707 set $S1, $S5 14708 __label_11: # endif 14709 goto __label_6 # break 14710 __label_5: # default 14711 eq $I2, 1, __label_13 14712 SyntaxError("Multiple init arguments not allowed here", self) 14713 __label_13: # endif 14714 if __ARG_3 goto __label_14 14715 $P8 = self.'tempreg'("P") 14716 set $S2, $P8 14717 __label_14: # endif 14718 __label_6: # switch end 14719 ne $S2, "", __label_15 14720 $P8 = self.'tempreg'("P") 14721 set $S2, $P8 14722 __label_15: # endif 14723 if $I2 == 0 goto __label_18 14724 if $I2 == 1 goto __label_19 14725 goto __label_16 14726 __label_18: # case 14727 $P8 = $P2.'rawstring'() 14728 null $S4 14729 if_null $P8, __label_20 14730 set $S4, $P8 14731 __label_20: 14732 get_class $P4, $S4 14733 unless_null $P4, __label_21 14734 WSubId_109(__ARG_1, $S4, $P2) 14735 __label_21: # endif 14736 __ARG_1.'say'(" ", "new ", $S2, ", [ ", $P2, " ]", $S1) 14737 le $I1, 1, __label_22 14738 __ARG_1.'say'($S2, ".'", $P2, "'()") 14739 __label_22: # endif 14740 goto __label_17 # break 14741 __label_19: # case 14742 getattribute $P8, self, 'owner' 14743 $P5 = $P8.'getvar'($P2) 14744 unless_null $P5, __label_23 14745 getattribute $P9, self, 'owner' 14746 $P6 = $P9.'checkclass'($P2) 14747 if_null $P6, __label_25 14748 $P7 = $P6.'getpath'() 14749 $P7.'emit_new'(__ARG_1, self, $S2, $S1) 14750 goto __label_26 14751 __label_25: # else 14752 root_new $P8, ['parrot';'ResizablePMCArray'] 14753 assign $P8, 1 14754 $P8[0] = $P2 14755 $P5 = self.'scopesearch'($P8, 2) 14756 if_null $P5, __label_27 14757 $P8 = $P5.'getclasskey'() 14758 __ARG_1.'say'(" ", "new ", $S2, ", ", $P8, $S1) 14759 goto __label_28 14760 __label_27: # else 14761 $P9 = $P2.'getidentifier'() 14762 WSubId_109(__ARG_1, $P9, $P2) 14763 __ARG_1.'say'(" ", "new ", $S2, ", ['", $P2, "']", $S1) 14764 __label_28: # endif 14765 __label_26: # endif 14766 set $S3, $P2 14767 goto __label_24 14768 __label_23: # else 14769 $P8 = $P5.'getreg'() 14770 __ARG_1.'say'(" ", "new ", $S2, ", ", $P8, "", $S1) 14771 __label_24: # endif 14772 goto __label_17 # break 14773 __label_16: # default 14774 InternalError("Unexpected type in new") 14775 __label_17: # switch end 14776 isgt $I3, $I1, 1 14777 if $I3 goto __label_30 14778 isge $I3, $I1, 0 14779 unless $I3 goto __label_31 14780 iseq $I3, $I2, 1 14781 __label_31: 14782 __label_30: 14783 unless $I3 goto __label_29 14784 self.'emit_constructor'(__ARG_1, $S2, $S3) 14785 if __ARG_3 goto __label_32 14786 __ARG_1.'emitset'(__ARG_2, $S2) 14787 __label_32: # endif 14788 __label_29: # endif 14789 14790.end # emit 14791 14792.sub Winxed_class_init :anon :load :init 14793 newclass $P0, [ 'Winxed'; 'Compiler'; 'NewExpr' ] 14794 get_class $P1, [ 'Winxed'; 'Compiler'; 'NewBaseExpr' ] 14795 addparent $P0, $P1 14796 addattribute $P0, 'value' 14797.end 14798.namespace [ 'Winxed'; 'Compiler'; 'NewIndexedExpr' ] 14799 14800.sub 'NewIndexedExpr' :method 14801 .param pmc __ARG_1 14802 .param pmc __ARG_2 14803 .param pmc __ARG_3 14804 self.'Expr'(__ARG_2, __ARG_3) 14805 setattribute self, 'owner', __ARG_2 14806 new $P3, [ 'Winxed'; 'Compiler'; 'ClassSpecifierParrotKey' ] 14807 $P3.'ClassSpecifierParrotKey'(__ARG_1, __ARG_2, __ARG_3) 14808 set $P1, $P3 14809 setattribute self, 'nskey', $P1 14810 $P2 = __ARG_1.'get'() 14811 $P3 = $P2.'isop'("(") 14812 if_null $P3, __label_1 14813 unless $P3 goto __label_1 14814 self.'parseinitializer'(__ARG_1) 14815 goto __label_2 14816 __label_1: # else 14817 __ARG_1.'unget'($P2) 14818 __label_2: # endif 14819 14820.end # NewIndexedExpr 14821 14822 14823.sub 'emit' :method 14824 .param pmc __ARG_1 14825 .param string __ARG_2 14826.const 'Sub' SyntaxError = "SyntaxError" 14827 null $S1 14828 $P3 = self.'numargs'() 14829 set $I1, $P3 14830 if $I1 == -1 goto __label_3 14831 if $I1 == 0 goto __label_4 14832 if $I1 == 1 goto __label_5 14833 goto __label_1 14834 __label_3: # case 14835 __label_4: # case 14836 goto __label_2 # break 14837 __label_5: # case 14838 getattribute $P4, self, 'initializer' 14839 $P1 = $P4.'getfreearg'(0) 14840 $P5 = $P1.'emit_get'(__ARG_1) 14841 set $S1, $P5 14842 goto __label_2 # break 14843 __label_1: # default 14844 SyntaxError("Multiple init arguments not allowed here", self) 14845 __label_2: # switch end 14846 getattribute $P2, self, 'nskey' 14847 __ARG_1.'print'(" ") 14848 $P3 = $P2.'hasHLL'() 14849 if_null $P3, __label_6 14850 unless $P3 goto __label_6 14851 __ARG_1.'print'("root_") 14852 __label_6: # endif 14853 __ARG_1.'print'("new ", __ARG_2, ", ") 14854 null $P3 14855 $P2.'emit'(__ARG_1, $P3) 14856 if_null $S1, __label_7 14857 __ARG_1.'print'(", ", $S1) 14858 __label_7: # endif 14859 __ARG_1.'say'() 14860 14861.end # emit 14862 14863.sub Winxed_class_init :anon :load :init 14864 newclass $P0, [ 'Winxed'; 'Compiler'; 'NewIndexedExpr' ] 14865 get_class $P1, [ 'Winxed'; 'Compiler'; 'NewBaseExpr' ] 14866 addparent $P0, $P1 14867 addattribute $P0, 'nskey' 14868.end 14869.namespace [ 'Winxed'; 'Compiler'; 'NewQualifiedExpr' ] 14870 14871.sub 'NewQualifiedExpr' :method 14872 .param pmc __ARG_1 14873 .param pmc __ARG_2 14874 .param pmc __ARG_3 14875 self.'Expr'(__ARG_2, __ARG_3) 14876 setattribute self, 'owner', __ARG_2 14877 new $P3, [ 'Winxed'; 'Compiler'; 'ClassSpecifierId' ] 14878 $P3.'ClassSpecifierId'(__ARG_1, __ARG_2, __ARG_3) 14879 set $P1, $P3 14880 setattribute self, 'nskey', $P1 14881 $P2 = __ARG_1.'get'() 14882 $P3 = $P2.'isop'("(") 14883 if_null $P3, __label_1 14884 unless $P3 goto __label_1 14885 self.'parseinitializer'(__ARG_1) 14886 goto __label_2 14887 __label_1: # else 14888 __ARG_1.'unget'($P2) 14889 __label_2: # endif 14890 14891.end # NewQualifiedExpr 14892 14893 14894.sub 'emit' :method 14895 .param pmc __ARG_1 14896 .param string __ARG_2 14897 $P2 = self.'numargs'() 14898 set $I1, $P2 14899 set $S1, __ARG_2 14900 le $I1, 0, __label_1 14901 $P2 = self.'tempreg'("P") 14902 set $S1, $P2 14903 __label_1: # endif 14904 getattribute $P1, self, 'nskey' 14905 ne $S1, "", __label_2 14906 $P2 = self.'tempreg'("P") 14907 set $S1, $P2 14908 __label_2: # endif 14909 $P1.'emit_new'(__ARG_1, self, $S1) 14910 lt $I1, 0, __label_3 14911 $P2 = $P1.'last'() 14912 null $S2 14913 if_null $P2, __label_4 14914 set $S2, $P2 14915 __label_4: 14916 self.'emit_constructor'(__ARG_1, $S1, $S2) 14917 __ARG_1.'emitset'(__ARG_2, $S1) 14918 __label_3: # endif 14919 14920.end # emit 14921 14922.sub Winxed_class_init :anon :load :init 14923 newclass $P0, [ 'Winxed'; 'Compiler'; 'NewQualifiedExpr' ] 14924 get_class $P1, [ 'Winxed'; 'Compiler'; 'NewBaseExpr' ] 14925 addparent $P0, $P1 14926 addattribute $P0, 'nskey' 14927.end 14928.namespace [ 'Winxed'; 'Compiler' ] 14929 14930.sub 'parseNew' :subid('WSubId_110') 14931 .param pmc __ARG_1 14932 .param pmc __ARG_2 14933 .param pmc __ARG_3 14934 $P1 = __ARG_1.'get'() 14935 $P3 = $P1.'isop'("(") 14936 set $I1, $P3 14937 if $I1 goto __label_3 14938 $P4 = $P1.'isop'("[") 14939 set $I1, $P4 14940 if $I1 goto __label_4 14941 $P5 = $P1.'isidentifier'() 14942 set $I1, $P5 14943 if $I1 goto __label_5 14944 goto __label_2 14945 __label_3: # case 14946 new $P7, [ 'Winxed'; 'Compiler'; 'CallExpr' ] 14947 new $P9, [ 'Winxed'; 'Compiler'; 'StringLiteral' ] 14948 $P9.'StringLiteral'(__ARG_2, __ARG_3) 14949 set $P8, $P9 14950 $P7.'CallExpr'(__ARG_1, __ARG_2, __ARG_3, $P8) 14951 set $P6, $P7 14952 .return($P6) 14953 __label_4: # case 14954 new $P11, [ 'Winxed'; 'Compiler'; 'NewIndexedExpr' ] 14955 $P11.'NewIndexedExpr'(__ARG_1, __ARG_2, __ARG_3) 14956 set $P10, $P11 14957 .return($P10) 14958 __label_5: # case 14959 $P2 = __ARG_1.'get'() 14960 __ARG_1.'unget'($P2) 14961 $P12 = $P2.'isop'(".") 14962 if_null $P12, __label_6 14963 unless $P12 goto __label_6 14964 new $P14, [ 'Winxed'; 'Compiler'; 'NewQualifiedExpr' ] 14965 $P14.'NewQualifiedExpr'(__ARG_1, __ARG_2, $P1) 14966 set $P13, $P14 14967 .return($P13) 14968 __label_6: # endif 14969 __label_2: # default 14970 new $P4, [ 'Winxed'; 'Compiler'; 'NewExpr' ] 14971 $P4.'NewExpr'(__ARG_1, __ARG_2, __ARG_3, $P1) 14972 set $P3, $P4 14973 .return($P3) 14974 __label_1: # switch end 14975 14976.end # parseNew 14977 14978.namespace [ 'Winxed'; 'Compiler'; 'OpInstanceOfExpr' ] 14979 14980.sub 'OpInstanceOfExpr' :method 14981 .param pmc __ARG_1 14982 .param pmc __ARG_2 14983 .param pmc __ARG_3 14984 .param pmc __ARG_4 14985.const 'Sub' WSubId_103 = "WSubId_103" 14986 self.'Expr'(__ARG_1, __ARG_2) 14987 setattribute self, 'lexpr', __ARG_3 14988 $P2 = WSubId_103(__ARG_4, __ARG_1) 14989 setattribute self, 'checked', $P2 14990 14991.end # OpInstanceOfExpr 14992 14993 14994.sub 'clone' :method 14995 .param pmc __ARG_1 14996 new $P1, [ 'Winxed'; 'Compiler'; 'OpInstanceOfExpr' ] 14997 getattribute $P2, self, 'start' 14998 $P1.'Expr'(__ARG_1, $P2) 14999 getattribute $P4, self, 'lexpr' 15000 $P3 = $P4.'clone'(__ARG_1) 15001 setattribute $P1, 'lexpr', $P3 15002 getattribute $P4, self, 'checked' 15003 $P3 = $P4.'clone'(__ARG_1) 15004 setattribute $P1, 'checked', $P3 15005 .return($P1) 15006 15007.end # clone 15008 15009 15010.sub 'optimize' :method 15011 getattribute $P3, self, 'lexpr' 15012 $P2 = $P3.'optimize'() 15013 setattribute self, 'lexpr', $P2 15014 .return(self) 15015 15016.end # optimize 15017 15018 15019.sub 'checkresult' :method 15020 .return("I") 15021 15022.end # checkresult 15023 15024 15025.sub 'emit' :method 15026 .param pmc __ARG_1 15027 .param string __ARG_2 15028.const 'Sub' SyntaxError = "SyntaxError" 15029 getattribute $P1, self, 'lexpr' 15030 $P3 = $P1.'checkresult'() 15031 null $S1 15032 if_null $P3, __label_1 15033 set $S1, $P3 15034 __label_1: 15035 eq $S1, "P", __label_2 15036 SyntaxError("Invalid instanceof left operand", $P1) 15037 __label_2: # endif 15038 getattribute $P2, self, 'checked' 15039 $P3 = $P1.'emit_get'(__ARG_1) 15040 null $S2 15041 if_null $P3, __label_3 15042 set $S2, $P3 15043 __label_3: 15044 self.'annotate'(__ARG_1) 15045 __ARG_1.'print'(" isa ", __ARG_2, ", ", $S2, ", ") 15046 getattribute $P3, self, 'owner' 15047 $P2.'emit'(__ARG_1, $P3) 15048 __ARG_1.'say'() 15049 15050.end # emit 15051 15052.sub Winxed_class_init :anon :load :init 15053 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpInstanceOfExpr' ] 15054 get_class $P1, [ 'Winxed'; 'Compiler'; 'Expr' ] 15055 addparent $P0, $P1 15056 addattribute $P0, 'lexpr' 15057 addattribute $P0, 'checked' 15058.end 15059.namespace [ 'Winxed'; 'Compiler'; 'OpConditionalExpr' ] 15060 15061.sub 'OpConditionalExpr' :method 15062 .param pmc __ARG_1 15063 .param pmc __ARG_2 15064 .param pmc __ARG_3 15065 .param pmc __ARG_4 15066 .param pmc __ARG_5 15067 self.'Expr'(__ARG_1, __ARG_2) 15068 new $P3, [ 'Winxed'; 'Compiler'; 'Condition' ] 15069 $P2 = $P3.'set'(__ARG_3) 15070 setattribute self, 'condition', $P2 15071 setattribute self, 'etrue', __ARG_4 15072 setattribute self, 'efalse', __ARG_5 15073 .return(self) 15074 15075.end # OpConditionalExpr 15076 15077 15078.sub 'clone' :method 15079 .param pmc __ARG_1 15080 new $P1, [ 'Winxed'; 'Compiler'; 'OpConditionalExpr' ] 15081 getattribute $P2, self, 'start' 15082 $P1.'Expr'(__ARG_1, $P2) 15083 new $P4, [ 'Winxed'; 'Compiler'; 'Condition' ] 15084 getattribute $P7, self, 'condition' 15085 getattribute $P6, $P7, 'condexpr' 15086 $P5 = $P6.'clone'(__ARG_1) 15087 $P3 = $P4.'set'($P5) 15088 setattribute $P1, 'condition', $P3 15089 getattribute $P4, self, 'etrue' 15090 $P3 = $P4.'clone'(__ARG_1) 15091 setattribute $P1, 'etrue', $P3 15092 getattribute $P4, self, 'efalse' 15093 $P3 = $P4.'clone'(__ARG_1) 15094 setattribute $P1, 'efalse', $P3 15095 .return($P1) 15096 15097.end # clone 15098 15099 15100.sub 'optimize' :method 15101 getattribute $P3, self, 'condition' 15102 $P2 = $P3.'optimize'() 15103 setattribute self, 'condition', $P2 15104 getattribute $P2, self, 'condition' 15105 $P1 = $P2.'getvalue'() 15106 set $I1, $P1 15107 if $I1 == 1 goto __label_3 15108 if $I1 == 2 goto __label_4 15109 goto __label_1 15110 __label_3: # case 15111 getattribute $P3, self, 'etrue' 15112 .tailcall $P3.'optimize'() 15113 __label_4: # case 15114 getattribute $P4, self, 'efalse' 15115 .tailcall $P4.'optimize'() 15116 __label_1: # default 15117 getattribute $P7, self, 'etrue' 15118 $P6 = $P7.'optimize'() 15119 setattribute self, 'etrue', $P6 15120 getattribute $P10, self, 'efalse' 15121 $P9 = $P10.'optimize'() 15122 setattribute self, 'efalse', $P9 15123 .return(self) 15124 __label_2: # switch end 15125 15126.end # optimize 15127 15128 15129.sub 'checkresult' :method 15130 getattribute $P1, self, 'etrue' 15131 $P2 = $P1.'isnull'() 15132 if_null $P2, __label_1 15133 unless $P2 goto __label_1 15134 getattribute $P3, self, 'efalse' 15135 .tailcall $P3.'checkresult'() 15136 goto __label_2 15137 __label_1: # else 15138 .tailcall $P1.'checkresult'() 15139 __label_2: # endif 15140 15141.end # checkresult 15142 15143 15144.sub 'emit' :method 15145 .param pmc __ARG_1 15146 .param string __ARG_2 15147 $P4 = self.'genlabel'() 15148 null $S1 15149 if_null $P4, __label_1 15150 set $S1, $P4 15151 __label_1: 15152 $P4 = self.'genlabel'() 15153 null $S2 15154 if_null $P4, __label_2 15155 set $S2, $P4 15156 __label_2: 15157 getattribute $P4, self, 'condition' 15158 $P4.'emit_else'(__ARG_1, $S2) 15159 getattribute $P1, self, 'etrue' 15160 $P4 = self.'checkresult'() 15161 null $S3 15162 if_null $P4, __label_3 15163 set $S3, $P4 15164 __label_3: 15165 $P4 = $P1.'isnull'() 15166 if_null $P4, __label_4 15167 unless $P4 goto __label_4 15168 __ARG_1.'emitnull'(__ARG_2) 15169 goto __label_5 15170 __label_4: # else 15171 $P1.'emit'(__ARG_1, __ARG_2) 15172 __label_5: # endif 15173 __ARG_1.'emitgoto'($S1) 15174 __ARG_1.'emitlabel'($S2) 15175 getattribute $P2, self, 'efalse' 15176 $P4 = $P2.'isnull'() 15177 if_null $P4, __label_6 15178 unless $P4 goto __label_6 15179 __ARG_1.'emitnull'(__ARG_2) 15180 goto __label_7 15181 __label_6: # else 15182 $P5 = $P2.'checkresult'() 15183 null $S4 15184 if_null $P5, __label_8 15185 set $S4, $P5 15186 __label_8: 15187 ne $S3, "P", __label_9 15188 eq $S4, "P", __label_9 15189 $P4 = $P2.'emit_get'(__ARG_1) 15190 null $S5 15191 if_null $P4, __label_11 15192 set $S5, $P4 15193 __label_11: 15194 __ARG_1.'emitbox'(__ARG_2, $S5) 15195 goto __label_10 15196 __label_9: # else 15197 ne $S4, "P", __label_12 15198 $P3 = $P2.'emit_get'(__ARG_1) 15199 __ARG_1.'emitset'(__ARG_2, $P3) 15200 goto __label_13 15201 __label_12: # else 15202 $P2.'emit'(__ARG_1, __ARG_2) 15203 __label_13: # endif 15204 __label_10: # endif 15205 __label_7: # endif 15206 __ARG_1.'emitlabel'($S1) 15207 15208.end # emit 15209 15210 15211.sub 'emit_void' :method 15212 .param pmc __ARG_1 15213 $P1 = self.'genlabel'() 15214 null $S1 15215 if_null $P1, __label_1 15216 set $S1, $P1 15217 __label_1: 15218 $P1 = self.'genlabel'() 15219 null $S2 15220 if_null $P1, __label_2 15221 set $S2, $P1 15222 __label_2: 15223 getattribute $P1, self, 'condition' 15224 $P1.'emit_else'(__ARG_1, $S2) 15225 getattribute $P1, self, 'etrue' 15226 $P1.'emit_void'(__ARG_1) 15227 __ARG_1.'emitgoto'($S1) 15228 __ARG_1.'emitlabel'($S2) 15229 getattribute $P1, self, 'efalse' 15230 $P1.'emit_void'(__ARG_1) 15231 __ARG_1.'emitlabel'($S1) 15232 15233.end # emit_void 15234 15235.sub Winxed_class_init :anon :load :init 15236 newclass $P0, [ 'Winxed'; 'Compiler'; 'OpConditionalExpr' ] 15237 get_class $P1, [ 'Winxed'; 'Compiler'; 'Expr' ] 15238 addparent $P0, $P1 15239 addattribute $P0, 'condition' 15240 addattribute $P0, 'etrue' 15241 addattribute $P0, 'efalse' 15242.end 15243.namespace [ 'Winxed'; 'Compiler' ] 15244 15245.sub 'getOpCode_2' :subid('WSubId_112') 15246 .param pmc __ARG_1 15247 $P1 = __ARG_1.'checkop'() 15248 set $S1, $P1 15249 if_null $S1, __label_1 15250 length $I1, $S1 15251 ne $I1, 1, __label_1 15252 ord $I1, $S1 15253 if $I1 == 40 goto __label_3 15254 if $I1 == 91 goto __label_4 15255 if $I1 == 46 goto __label_5 15256 goto __label_1 15257 __label_3: # case 15258 .return(1) 15259 __label_4: # case 15260 .return(2) 15261 __label_5: # case 15262 .return(3) 15263 __label_1: # default 15264 .return(0) 15265 __label_2: # switch end 15266 15267.end # getOpCode_2 15268 15269 15270.sub 'getOpCode_4' :subid('WSubId_114') 15271 .param pmc __ARG_1 15272 $P1 = __ARG_1.'checkop'() 15273 set $S1, $P1 15274 if $S1 == "-" goto __label_3 15275 if $S1 == "!" goto __label_4 15276 if $S1 == "~" goto __label_5 15277 if $S1 == "++" goto __label_6 15278 if $S1 == "--" goto __label_7 15279 goto __label_1 15280 __label_3: # case 15281 .return(8) 15282 __label_4: # case 15283 .return(11) 15284 __label_5: # case 15285 .return(34) 15286 __label_6: # case 15287 .return(9) 15288 __label_7: # case 15289 .return(10) 15290 __label_1: # default 15291 $P2 = __ARG_1.'iskeyword'("delete") 15292 if_null $P2, __label_8 15293 unless $P2 goto __label_8 15294 .return(32) 15295 goto __label_9 15296 __label_8: # else 15297 $P3 = __ARG_1.'iskeyword'("exists") 15298 if_null $P3, __label_10 15299 unless $P3 goto __label_10 15300 .return(33) 15301 goto __label_11 15302 __label_10: # else 15303 $P4 = __ARG_1.'iskeyword'("defined") 15304 if_null $P4, __label_12 15305 unless $P4 goto __label_12 15306 .return(35) 15307 goto __label_13 15308 __label_12: # else 15309 .return(0) 15310 __label_13: # endif 15311 __label_11: # endif 15312 __label_9: # endif 15313 __label_2: # switch end 15314 15315.end # getOpCode_4 15316 15317 15318.sub 'getOpCode_5' :subid('WSubId_117') 15319 .param pmc __ARG_1 15320 $P1 = __ARG_1.'checkop'() 15321 set $S1, $P1 15322 if $S1 == "*" goto __label_3 15323 if $S1 == "/" goto __label_4 15324 if $S1 == "%" goto __label_5 15325 if $S1 == "%%" goto __label_6 15326 goto __label_1 15327 __label_3: # case 15328 .return(19) 15329 __label_4: # case 15330 .return(20) 15331 __label_5: # case 15332 .return(21) 15333 __label_6: # case 15334 .return(22) 15335 __label_1: # default 15336 .return(0) 15337 __label_2: # switch end 15338 15339.end # getOpCode_5 15340 15341 15342.sub 'getOpCode_7' :subid('WSubId_120') 15343 .param pmc __ARG_1 15344 $P1 = __ARG_1.'checkop'() 15345 set $S1, $P1 15346 if $S1 == "<<" goto __label_3 15347 if $S1 == ">>" goto __label_4 15348 if $S1 == ">>>" goto __label_5 15349 goto __label_1 15350 __label_3: # case 15351 .return(28) 15352 __label_4: # case 15353 .return(29) 15354 __label_5: # case 15355 .return(30) 15356 __label_1: # default 15357 .return(0) 15358 __label_2: # switch end 15359 15360.end # getOpCode_7 15361 15362 15363.sub 'getOpCode_8' :subid('WSubId_122') 15364 .param pmc __ARG_1 15365 $P1 = __ARG_1.'checkop'() 15366 set $S1, $P1 15367 if $S1 == "<" goto __label_3 15368 if $S1 == ">" goto __label_4 15369 if $S1 == "<=" goto __label_5 15370 if $S1 == ">=" goto __label_6 15371 goto __label_1 15372 __label_3: # case 15373 .return(14) 15374 __label_4: # case 15375 .return(16) 15376 __label_5: # case 15377 .return(15) 15378 __label_6: # case 15379 .return(17) 15380 __label_1: # default 15381 $P2 = __ARG_1.'iskeyword'("instanceof") 15382 if_null $P2, __label_7 15383 unless $P2 goto __label_7 15384 .return(27) 15385 goto __label_8 15386 __label_7: # else 15387 .return(0) 15388 __label_8: # endif 15389 __label_2: # switch end 15390 15391.end # getOpCode_8 15392 15393 15394.sub 'getOpCode_9' :subid('WSubId_124') 15395 .param pmc __ARG_1 15396 $P1 = __ARG_1.'checkop'() 15397 set $S1, $P1 15398 if $S1 == "==" goto __label_3 15399 if $S1 == "!=" goto __label_4 15400 if $S1 == "===" goto __label_5 15401 if $S1 == "!==" goto __label_6 15402 goto __label_1 15403 __label_3: # case 15404 .return(12) 15405 __label_4: # case 15406 .return(13) 15407 __label_5: # case 15408 .return(25) 15409 __label_6: # case 15410 .return(26) 15411 __label_1: # default 15412 .return(0) 15413 __label_2: # switch end 15414 15415.end # getOpCode_9 15416 15417 15418.sub 'getOpCode_16' :subid('WSubId_133') 15419 .param pmc __ARG_1 15420 $P1 = __ARG_1.'checkop'() 15421 set $S1, $P1 15422 if $S1 == "=" goto __label_3 15423 if $S1 == "=:" goto __label_4 15424 if $S1 == "+=" goto __label_5 15425 if $S1 == "-=" goto __label_6 15426 if $S1 == "*=" goto __label_7 15427 if $S1 == "/=" goto __label_8 15428 if $S1 == "%=" goto __label_9 15429 goto __label_1 15430 __label_3: # case 15431 .return(4) 15432 __label_4: # case 15433 .return(5) 15434 __label_5: # case 15435 .return(6) 15436 __label_6: # case 15437 .return(18) 15438 __label_7: # case 15439 .return(23) 15440 __label_8: # case 15441 .return(24) 15442 __label_9: # case 15443 .return(31) 15444 __label_1: # default 15445 .return(0) 15446 __label_2: # switch end 15447 15448.end # getOpCode_16 15449 15450 15451.sub 'parseExpr_0' :subid('WSubId_111') 15452 .param pmc __ARG_1 15453 .param pmc __ARG_2 15454.const 'Sub' WSubId_75 = "WSubId_75" 15455.const 'Sub' ExpectOp = "ExpectOp" 15456.const 'Sub' integerValue = "integerValue" 15457.const 'Sub' WSubId_110 = "WSubId_110" 15458.const 'Sub' Expected = "Expected" 15459 $P1 = __ARG_1.'get'() 15460 null $P2 15461 $P3 = $P1.'isop'("(") 15462 set $I1, $P3 15463 if $I1 goto __label_3 15464 $P4 = $P1.'isop'("[") 15465 set $I1, $P4 15466 if $I1 goto __label_4 15467 $P5 = $P1.'isop'("{") 15468 set $I1, $P5 15469 if $I1 goto __label_5 15470 $P6 = $P1.'isstring'() 15471 set $I1, $P6 15472 if $I1 goto __label_6 15473 $P7 = $P1.'isint'() 15474 set $I1, $P7 15475 if $I1 goto __label_7 15476 $P8 = $P1.'isfloat'() 15477 set $I1, $P8 15478 if $I1 goto __label_8 15479 $P9 = $P1.'iskeyword'("new") 15480 set $I1, $P9 15481 if $I1 goto __label_9 15482 $P10 = $P1.'iskeyword'("function") 15483 set $I1, $P10 15484 if $I1 goto __label_10 15485 $P11 = $P1.'iskeyword'("class") 15486 set $I1, $P11 15487 if $I1 goto __label_11 15488 $P12 = $P1.'iskeyword'("namespace") 15489 set $I1, $P12 15490 if $I1 goto __label_12 15491 $P13 = $P1.'isidentifier'() 15492 set $I1, $P13 15493 if $I1 goto __label_13 15494 goto __label_2 15495 __label_3: # case 15496 $P2 = WSubId_75(__ARG_1, __ARG_2) 15497 ExpectOp(")", __ARG_1) 15498 .return($P2) 15499 __label_4: # case 15500 new $P15, [ 'Winxed'; 'Compiler'; 'ArrayExpr' ] 15501 $P15.'ArrayExpr'(__ARG_1, __ARG_2, $P1) 15502 set $P14, $P15 15503 .return($P14) 15504 __label_5: # case 15505 new $P17, [ 'Winxed'; 'Compiler'; 'HashExpr' ] 15506 $P17.'HashExpr'(__ARG_1, __ARG_2, $P1) 15507 set $P16, $P17 15508 .return($P16) 15509 __label_6: # case 15510 new $P19, [ 'Winxed'; 'Compiler'; 'StringLiteral' ] 15511 $P19.'StringLiteral'(__ARG_2, $P1) 15512 set $P18, $P19 15513 .return($P18) 15514 __label_7: # case 15515 $P20 = $P1.'getintvalue'() 15516 .tailcall integerValue(__ARG_2, $P1, $P20) 15517 __label_8: # case 15518 new $P22, [ 'Winxed'; 'Compiler'; 'FloatLiteral' ] 15519 $P22.'FloatLiteral'(__ARG_2, $P1) 15520 set $P21, $P22 15521 .return($P21) 15522 __label_9: # case 15523 .tailcall WSubId_110(__ARG_1, __ARG_2, $P1) 15524 __label_10: # case 15525 new $P24, [ 'Winxed'; 'Compiler'; 'FunctionExpr' ] 15526 $P24.'FunctionExpr'(__ARG_1, __ARG_2, $P1) 15527 set $P23, $P24 15528 .return($P23) 15529 __label_11: # case 15530 new $P26, [ 'Winxed'; 'Compiler'; 'OpClassExpr' ] 15531 $P26.'OpClassExpr'(__ARG_1, __ARG_2, $P1) 15532 set $P25, $P26 15533 .return($P25) 15534 __label_12: # case 15535 new $P28, [ 'Winxed'; 'Compiler'; 'OpNamespaceExpr' ] 15536 $P28.'OpNamespaceExpr'(__ARG_1, __ARG_2, $P1) 15537 set $P27, $P28 15538 .return($P27) 15539 __label_13: # case 15540 new $P30, [ 'Winxed'; 'Compiler'; 'IdentifierExpr' ] 15541 $P30.'IdentifierExpr'(__ARG_2, $P1) 15542 set $P29, $P30 15543 .return($P29) 15544 __label_2: # default 15545 Expected("expression", $P1) 15546 __label_1: # switch end 15547 15548.end # parseExpr_0 15549 15550 15551.sub 'parseExpr_2' :subid('WSubId_113') 15552 .param pmc __ARG_1 15553 .param pmc __ARG_2 15554.const 'Sub' WSubId_111 = "WSubId_111" 15555.const 'Sub' WSubId_112 = "WSubId_112" 15556.const 'Sub' InternalError = "InternalError" 15557 $P1 = WSubId_111(__ARG_1, __ARG_2) 15558 null $P2 15559 null $P3 15560 null $I1 15561 __label_2: # while 15562 $P2 = __ARG_1.'get'() 15563 $P5 = WSubId_112($P2) 15564 set $I1, $P5 15565 unless $I1 goto __label_1 15566 if $I1 == 1 goto __label_5 15567 if $I1 == 2 goto __label_6 15568 if $I1 == 3 goto __label_7 15569 goto __label_3 15570 __label_5: # case 15571 new $P6, [ 'Winxed'; 'Compiler'; 'CallExpr' ] 15572 $P6.'CallExpr'(__ARG_1, __ARG_2, $P2, $P1) 15573 set $P1, $P6 15574 goto __label_4 # break 15575 __label_6: # case 15576 new $P7, [ 'Winxed'; 'Compiler'; 'IndexExpr' ] 15577 $P7.'IndexExpr'(__ARG_1, __ARG_2, $P2, $P1) 15578 set $P1, $P7 15579 goto __label_4 # break 15580 __label_7: # case 15581 set $P3, $P2 15582 $P2 = __ARG_1.'get'() 15583 $P8 = $P2.'isop'("*") 15584 if_null $P8, __label_8 15585 unless $P8 goto __label_8 15586 $P4 = WSubId_111(__ARG_1, __ARG_2) 15587 new $P5, [ 'Winxed'; 'Compiler'; 'MemberRefExpr' ] 15588 $P5.'MemberRefExpr'(__ARG_2, $P2, $P1, $P4) 15589 set $P1, $P5 15590 goto __label_9 15591 __label_8: # else 15592 new $P5, [ 'Winxed'; 'Compiler'; 'MemberExpr' ] 15593 $P5.'MemberExpr'(__ARG_2, $P3, $P1, $P2) 15594 set $P1, $P5 15595 __label_9: # endif 15596 goto __label_4 # break 15597 __label_3: # default 15598 InternalError("Unexpected code in parseExpr_2") 15599 __label_4: # switch end 15600 goto __label_2 15601 __label_1: # endwhile 15602 __ARG_1.'unget'($P2) 15603 .return($P1) 15604 15605.end # parseExpr_2 15606 15607 15608.sub 'parseExpr_3' :subid('WSubId_116') 15609 .param pmc __ARG_1 15610 .param pmc __ARG_2 15611.const 'Sub' WSubId_113 = "WSubId_113" 15612 $P1 = WSubId_113(__ARG_1, __ARG_2) 15613 $P2 = __ARG_1.'get'() 15614 $P3 = $P2.'isop'("++") 15615 set $I1, $P3 15616 if $I1 goto __label_3 15617 $P4 = $P2.'isop'("--") 15618 set $I1, $P4 15619 if $I1 goto __label_4 15620 goto __label_2 15621 __label_3: # case 15622 new $P6, [ 'Winxed'; 'Compiler'; 'OpPostIncExpr' ] 15623 $P6.'OpPostIncExpr'(__ARG_2, $P2, $P1) 15624 set $P5, $P6 15625 .return($P5) 15626 __label_4: # case 15627 new $P8, [ 'Winxed'; 'Compiler'; 'OpPostDecExpr' ] 15628 $P8.'OpPostDecExpr'(__ARG_2, $P2, $P1) 15629 set $P7, $P8 15630 .return($P7) 15631 __label_2: # default 15632 __ARG_1.'unget'($P2) 15633 .return($P1) 15634 __label_1: # switch end 15635 15636.end # parseExpr_3 15637 15638 15639.sub 'parseExpr_4' :subid('WSubId_115') 15640 .param pmc __ARG_1 15641 .param pmc __ARG_2 15642.const 'Sub' WSubId_114 = "WSubId_114" 15643.const 'Sub' WSubId_115 = "WSubId_115" 15644.const 'Sub' InternalError = "InternalError" 15645.const 'Sub' WSubId_116 = "WSubId_116" 15646 $P1 = __ARG_1.'get'() 15647 $P3 = WSubId_114($P1) 15648 set $I1, $P3 15649 unless $I1 goto __label_1 15650 $P2 = WSubId_115(__ARG_1, __ARG_2) 15651 if $I1 == 8 goto __label_5 15652 if $I1 == 11 goto __label_6 15653 if $I1 == 34 goto __label_7 15654 if $I1 == 9 goto __label_8 15655 if $I1 == 10 goto __label_9 15656 if $I1 == 32 goto __label_10 15657 if $I1 == 33 goto __label_11 15658 if $I1 == 35 goto __label_12 15659 goto __label_3 15660 __label_5: # case 15661 new $P4, [ 'Winxed'; 'Compiler'; 'OpUnaryMinusExpr' ] 15662 $P4.'OpUnaryMinusExpr'(__ARG_2, $P1, $P2) 15663 set $P3, $P4 15664 .return($P3) 15665 __label_6: # case 15666 new $P6, [ 'Winxed'; 'Compiler'; 'OpNotExpr' ] 15667 $P6.'OpNotExpr'(__ARG_2, $P1, $P2) 15668 set $P5, $P6 15669 .return($P5) 15670 __label_7: # case 15671 new $P8, [ 'Winxed'; 'Compiler'; 'OpBinNotExpr' ] 15672 $P8.'OpBinNotExpr'(__ARG_2, $P1, $P2) 15673 set $P7, $P8 15674 .return($P7) 15675 __label_8: # case 15676 new $P10, [ 'Winxed'; 'Compiler'; 'OpPreIncExpr' ] 15677 $P10.'OpPreIncExpr'(__ARG_2, $P1, $P2) 15678 set $P9, $P10 15679 .return($P9) 15680 __label_9: # case 15681 new $P12, [ 'Winxed'; 'Compiler'; 'OpPreDecExpr' ] 15682 $P12.'OpPreDecExpr'(__ARG_2, $P1, $P2) 15683 set $P11, $P12 15684 .return($P11) 15685 __label_10: # case 15686 new $P14, [ 'Winxed'; 'Compiler'; 'OpDeleteExpr' ] 15687 $P14.'OpDeleteExpr'(__ARG_2, $P1, $P2) 15688 set $P13, $P14 15689 .return($P13) 15690 __label_11: # case 15691 new $P16, [ 'Winxed'; 'Compiler'; 'OpExistsExpr' ] 15692 $P16.'OpExistsExpr'(__ARG_2, $P1, $P2) 15693 set $P15, $P16 15694 .return($P15) 15695 __label_12: # case 15696 new $P18, [ 'Winxed'; 'Compiler'; 'OpDefinedExpr' ] 15697 $P18.'OpDefinedExpr'(__ARG_2, $P1, $P2) 15698 set $P17, $P18 15699 .return($P17) 15700 __label_3: # default 15701 InternalError("Invalid code in parseExpr_4", $P1) 15702 __label_4: # switch end 15703 goto __label_2 15704 __label_1: # else 15705 __ARG_1.'unget'($P1) 15706 .tailcall WSubId_116(__ARG_1, __ARG_2) 15707 __label_2: # endif 15708 15709.end # parseExpr_4 15710 15711 15712.sub 'parseExpr_5' :subid('WSubId_118') 15713 .param pmc __ARG_1 15714 .param pmc __ARG_2 15715.const 'Sub' WSubId_115 = "WSubId_115" 15716.const 'Sub' WSubId_117 = "WSubId_117" 15717.const 'Sub' InternalError = "InternalError" 15718 $P1 = WSubId_115(__ARG_1, __ARG_2) 15719 null $P2 15720 null $I1 15721 __label_2: # while 15722 $P2 = __ARG_1.'get'() 15723 $P4 = WSubId_117($P2) 15724 set $I1, $P4 15725 unless $I1 goto __label_1 15726 $P3 = WSubId_115(__ARG_1, __ARG_2) 15727 if $I1 == 19 goto __label_5 15728 if $I1 == 20 goto __label_6 15729 if $I1 == 21 goto __label_7 15730 if $I1 == 22 goto __label_8 15731 goto __label_3 15732 __label_5: # case 15733 new $P4, [ 'Winxed'; 'Compiler'; 'OpMulExpr' ] 15734 $P4.'OpMulExpr'(__ARG_2, $P2, $P1, $P3) 15735 set $P1, $P4 15736 goto __label_4 # break 15737 __label_6: # case 15738 new $P5, [ 'Winxed'; 'Compiler'; 'OpDivExpr' ] 15739 $P5.'OpDivExpr'(__ARG_2, $P2, $P1, $P3) 15740 set $P1, $P5 15741 goto __label_4 # break 15742 __label_7: # case 15743 new $P6, [ 'Winxed'; 'Compiler'; 'OpModExpr' ] 15744 $P6.'OpModExpr'(__ARG_2, $P2, $P1, $P3) 15745 set $P1, $P6 15746 goto __label_4 # break 15747 __label_8: # case 15748 new $P7, [ 'Winxed'; 'Compiler'; 'OpCModExpr' ] 15749 $P7.'OpCModExpr'(__ARG_2, $P2, $P1, $P3) 15750 set $P1, $P7 15751 goto __label_4 # break 15752 __label_3: # default 15753 InternalError("Invalid code in parseExpr_5", $P2) 15754 __label_4: # switch end 15755 goto __label_2 15756 __label_1: # endwhile 15757 __ARG_1.'unget'($P2) 15758 .return($P1) 15759 15760.end # parseExpr_5 15761 15762 15763.sub 'parseExpr_6' :subid('WSubId_119') 15764 .param pmc __ARG_1 15765 .param pmc __ARG_2 15766.const 'Sub' WSubId_118 = "WSubId_118" 15767 $P1 = WSubId_118(__ARG_1, __ARG_2) 15768 null $P2 15769 __label_2: # while 15770 $P2 = __ARG_1.'get'() 15771 $P5 = $P2.'isop'("+") 15772 if $P5 goto __label_3 15773 $P5 = $P2.'isop'("-") 15774 __label_3: 15775 if_null $P5, __label_1 15776 unless $P5 goto __label_1 15777 $P3 = WSubId_118(__ARG_1, __ARG_2) 15778 null $P4 15779 $P5 = $P2.'isop'("+") 15780 if_null $P5, __label_4 15781 unless $P5 goto __label_4 15782 new $P6, [ 'Winxed'; 'Compiler'; 'OpAddExpr' ] 15783 $P6.'OpAddExpr'(__ARG_2, $P2, $P1, $P3) 15784 set $P4, $P6 15785 goto __label_5 15786 __label_4: # else 15787 new $P7, [ 'Winxed'; 'Compiler'; 'OpSubExpr' ] 15788 $P7.'OpSubExpr'(__ARG_2, $P2, $P1, $P3) 15789 set $P4, $P7 15790 __label_5: # endif 15791 set $P1, $P4 15792 goto __label_2 15793 __label_1: # endwhile 15794 __ARG_1.'unget'($P2) 15795 .return($P1) 15796 15797.end # parseExpr_6 15798 15799 15800.sub 'parseExpr_7' :subid('WSubId_121') 15801 .param pmc __ARG_1 15802 .param pmc __ARG_2 15803.const 'Sub' WSubId_119 = "WSubId_119" 15804.const 'Sub' WSubId_120 = "WSubId_120" 15805.const 'Sub' InternalError = "InternalError" 15806 $P1 = WSubId_119(__ARG_1, __ARG_2) 15807 null $P2 15808 null $P3 15809 null $I1 15810 __label_2: # while 15811 $P3 = __ARG_1.'get'() 15812 $P4 = WSubId_120($P3) 15813 set $I1, $P4 15814 unless $I1 goto __label_1 15815 if $I1 == 28 goto __label_5 15816 if $I1 == 29 goto __label_6 15817 if $I1 == 30 goto __label_7 15818 goto __label_3 15819 __label_5: # case 15820 $P2 = WSubId_119(__ARG_1, __ARG_2) 15821 new $P5, [ 'Winxed'; 'Compiler'; 'OpShiftleftExpr' ] 15822 $P5.'OpShiftleftExpr'(__ARG_2, $P3, $P1, $P2) 15823 set $P1, $P5 15824 goto __label_4 # break 15825 __label_6: # case 15826 $P2 = WSubId_119(__ARG_1, __ARG_2) 15827 new $P6, [ 'Winxed'; 'Compiler'; 'OpShiftrightExpr' ] 15828 $P6.'OpShiftrightExpr'(__ARG_2, $P3, $P1, $P2) 15829 set $P1, $P6 15830 goto __label_4 # break 15831 __label_7: # case 15832 $P2 = WSubId_119(__ARG_1, __ARG_2) 15833 new $P7, [ 'Winxed'; 'Compiler'; 'OpShiftlrightExpr' ] 15834 $P7.'OpShiftlrightExpr'(__ARG_2, $P3, $P1, $P2) 15835 set $P1, $P7 15836 goto __label_4 # break 15837 __label_3: # default 15838 InternalError("Invalid code in parseExpr_7", $P3) 15839 __label_4: # switch end 15840 goto __label_2 15841 __label_1: # endwhile 15842 __ARG_1.'unget'($P3) 15843 .return($P1) 15844 15845.end # parseExpr_7 15846 15847 15848.sub 'parseExpr_8' :subid('WSubId_123') 15849 .param pmc __ARG_1 15850 .param pmc __ARG_2 15851.const 'Sub' WSubId_121 = "WSubId_121" 15852.const 'Sub' WSubId_122 = "WSubId_122" 15853.const 'Sub' InternalError = "InternalError" 15854 $P1 = WSubId_121(__ARG_1, __ARG_2) 15855 null $P2 15856 null $P3 15857 null $I1 15858 __label_2: # while 15859 $P3 = __ARG_1.'get'() 15860 $P4 = WSubId_122($P3) 15861 set $I1, $P4 15862 unless $I1 goto __label_1 15863 if $I1 == 14 goto __label_5 15864 if $I1 == 16 goto __label_6 15865 if $I1 == 15 goto __label_7 15866 if $I1 == 17 goto __label_8 15867 if $I1 == 27 goto __label_9 15868 goto __label_3 15869 __label_5: # case 15870 $P2 = WSubId_121(__ARG_1, __ARG_2) 15871 new $P5, [ 'Winxed'; 'Compiler'; 'OpLessExpr' ] 15872 $P1 = $P5.'set'(__ARG_2, $P3, $P1, $P2) 15873 goto __label_4 # break 15874 __label_6: # case 15875 $P2 = WSubId_121(__ARG_1, __ARG_2) 15876 new $P6, [ 'Winxed'; 'Compiler'; 'OpGreaterExpr' ] 15877 $P1 = $P6.'set'(__ARG_2, $P3, $P1, $P2) 15878 goto __label_4 # break 15879 __label_7: # case 15880 $P2 = WSubId_121(__ARG_1, __ARG_2) 15881 new $P7, [ 'Winxed'; 'Compiler'; 'OpLessEqualExpr' ] 15882 $P1 = $P7.'set'(__ARG_2, $P3, $P1, $P2) 15883 goto __label_4 # break 15884 __label_8: # case 15885 $P2 = WSubId_121(__ARG_1, __ARG_2) 15886 new $P8, [ 'Winxed'; 'Compiler'; 'OpGreaterEqualExpr' ] 15887 $P1 = $P8.'set'(__ARG_2, $P3, $P1, $P2) 15888 goto __label_4 # break 15889 __label_9: # case 15890 new $P9, [ 'Winxed'; 'Compiler'; 'OpInstanceOfExpr' ] 15891 $P9.'OpInstanceOfExpr'(__ARG_2, $P3, $P1, __ARG_1) 15892 set $P1, $P9 15893 goto __label_4 # break 15894 __label_3: # default 15895 InternalError("Invalid code in parseExpr_9", $P3) 15896 __label_4: # switch end 15897 goto __label_2 15898 __label_1: # endwhile 15899 __ARG_1.'unget'($P3) 15900 .return($P1) 15901 15902.end # parseExpr_8 15903 15904 15905.sub 'parseExpr_9' :subid('WSubId_125') 15906 .param pmc __ARG_1 15907 .param pmc __ARG_2 15908.const 'Sub' WSubId_123 = "WSubId_123" 15909.const 'Sub' WSubId_124 = "WSubId_124" 15910.const 'Sub' InternalError = "InternalError" 15911 $P1 = WSubId_123(__ARG_1, __ARG_2) 15912 null $P2 15913 null $P3 15914 null $I1 15915 __label_2: # while 15916 $P3 = __ARG_1.'get'() 15917 $P4 = WSubId_124($P3) 15918 set $I1, $P4 15919 unless $I1 goto __label_1 15920 if $I1 == 12 goto __label_5 15921 if $I1 == 13 goto __label_6 15922 if $I1 == 25 goto __label_7 15923 if $I1 == 26 goto __label_8 15924 goto __label_3 15925 __label_5: # case 15926 $P2 = WSubId_123(__ARG_1, __ARG_2) 15927 new $P5, [ 'Winxed'; 'Compiler'; 'OpEqualExpr' ] 15928 $P5.'OpEqualExpr'(__ARG_2, $P3, $P1, $P2, 1) 15929 set $P1, $P5 15930 goto __label_4 # break 15931 __label_6: # case 15932 $P2 = WSubId_123(__ARG_1, __ARG_2) 15933 new $P6, [ 'Winxed'; 'Compiler'; 'OpEqualExpr' ] 15934 $P6.'OpEqualExpr'(__ARG_2, $P3, $P1, $P2, 0) 15935 set $P1, $P6 15936 goto __label_4 # break 15937 __label_7: # case 15938 $P2 = WSubId_123(__ARG_1, __ARG_2) 15939 new $P7, [ 'Winxed'; 'Compiler'; 'OpSameExpr' ] 15940 $P7.'OpSameExpr'(__ARG_2, $P3, $P1, $P2, 1) 15941 set $P1, $P7 15942 goto __label_4 # break 15943 __label_8: # case 15944 $P2 = WSubId_123(__ARG_1, __ARG_2) 15945 new $P8, [ 'Winxed'; 'Compiler'; 'OpSameExpr' ] 15946 $P8.'OpSameExpr'(__ARG_2, $P3, $P1, $P2, 0) 15947 set $P1, $P8 15948 goto __label_4 # break 15949 __label_3: # default 15950 InternalError("Invalid code in parseExpr_8", $P3) 15951 __label_4: # switch end 15952 goto __label_2 15953 __label_1: # endwhile 15954 __ARG_1.'unget'($P3) 15955 .return($P1) 15956 15957.end # parseExpr_9 15958 15959 15960.sub 'parseExpr_10' :subid('WSubId_126') 15961 .param pmc __ARG_1 15962 .param pmc __ARG_2 15963.const 'Sub' WSubId_125 = "WSubId_125" 15964 $P1 = WSubId_125(__ARG_1, __ARG_2) 15965 null $P2 15966 __label_2: # while 15967 $P2 = __ARG_1.'get'() 15968 $P4 = $P2.'isop'("&") 15969 if_null $P4, __label_1 15970 unless $P4 goto __label_1 15971 $P3 = WSubId_125(__ARG_1, __ARG_2) 15972 new $P4, [ 'Winxed'; 'Compiler'; 'OpBinAndExpr' ] 15973 $P4.'OpBinAndExpr'(__ARG_2, $P2, $P1, $P3) 15974 set $P1, $P4 15975 goto __label_2 15976 __label_1: # endwhile 15977 __ARG_1.'unget'($P2) 15978 .return($P1) 15979 15980.end # parseExpr_10 15981 15982 15983.sub 'parseExpr_11' :subid('WSubId_127') 15984 .param pmc __ARG_1 15985 .param pmc __ARG_2 15986.const 'Sub' WSubId_126 = "WSubId_126" 15987 $P1 = WSubId_126(__ARG_1, __ARG_2) 15988 null $P2 15989 __label_2: # while 15990 $P2 = __ARG_1.'get'() 15991 $P4 = $P2.'isop'("^") 15992 if_null $P4, __label_1 15993 unless $P4 goto __label_1 15994 $P3 = WSubId_126(__ARG_1, __ARG_2) 15995 new $P4, [ 'Winxed'; 'Compiler'; 'OpBinXorExpr' ] 15996 $P4.'OpBinXorExpr'(__ARG_2, $P2, $P1, $P3) 15997 set $P1, $P4 15998 goto __label_2 15999 __label_1: # endwhile 16000 __ARG_1.'unget'($P2) 16001 .return($P1) 16002 16003.end # parseExpr_11 16004 16005 16006.sub 'parseExpr_12' :subid('WSubId_128') 16007 .param pmc __ARG_1 16008 .param pmc __ARG_2 16009.const 'Sub' WSubId_127 = "WSubId_127" 16010 $P1 = WSubId_127(__ARG_1, __ARG_2) 16011 null $P2 16012 __label_2: # while 16013 $P2 = __ARG_1.'get'() 16014 $P4 = $P2.'isop'("|") 16015 if_null $P4, __label_1 16016 unless $P4 goto __label_1 16017 $P3 = WSubId_127(__ARG_1, __ARG_2) 16018 new $P4, [ 'Winxed'; 'Compiler'; 'OpBinOrExpr' ] 16019 $P4.'OpBinOrExpr'(__ARG_2, $P2, $P1, $P3) 16020 set $P1, $P4 16021 goto __label_2 16022 __label_1: # endwhile 16023 __ARG_1.'unget'($P2) 16024 .return($P1) 16025 16026.end # parseExpr_12 16027 16028 16029.sub 'parseExpr_13' :subid('WSubId_129') 16030 .param pmc __ARG_1 16031 .param pmc __ARG_2 16032.const 'Sub' WSubId_128 = "WSubId_128" 16033 $P1 = WSubId_128(__ARG_1, __ARG_2) 16034 null $P2 16035 __label_2: # while 16036 $P2 = __ARG_1.'get'() 16037 $P4 = $P2.'isop'("&&") 16038 if_null $P4, __label_1 16039 unless $P4 goto __label_1 16040 $P3 = WSubId_128(__ARG_1, __ARG_2) 16041 new $P4, [ 'Winxed'; 'Compiler'; 'OpBoolAndExpr' ] 16042 $P4.'OpBoolAndExpr'(__ARG_2, $P2, $P1, $P3) 16043 set $P1, $P4 16044 goto __label_2 16045 __label_1: # endwhile 16046 __ARG_1.'unget'($P2) 16047 .return($P1) 16048 16049.end # parseExpr_13 16050 16051 16052.sub 'parseExpr_14' :subid('WSubId_130') 16053 .param pmc __ARG_1 16054 .param pmc __ARG_2 16055.const 'Sub' WSubId_129 = "WSubId_129" 16056.const 'Sub' WSubId_128 = "WSubId_128" 16057 $P1 = WSubId_129(__ARG_1, __ARG_2) 16058 null $P2 16059 __label_2: # while 16060 $P2 = __ARG_1.'get'() 16061 $P4 = $P2.'isop'("||") 16062 if_null $P4, __label_1 16063 unless $P4 goto __label_1 16064 $P3 = WSubId_128(__ARG_1, __ARG_2) 16065 new $P4, [ 'Winxed'; 'Compiler'; 'OpBoolOrExpr' ] 16066 $P4.'OpBoolOrExpr'(__ARG_2, $P2, $P1, $P3) 16067 set $P1, $P4 16068 goto __label_2 16069 __label_1: # endwhile 16070 __ARG_1.'unget'($P2) 16071 .return($P1) 16072 16073.end # parseExpr_14 16074 16075 16076.sub 'parseExpr_15' :subid('WSubId_132') 16077 .param pmc __ARG_1 16078 .param pmc __ARG_2 16079.const 'Sub' WSubId_130 = "WSubId_130" 16080.const 'Sub' WSubId_131 = "WSubId_131" 16081.const 'Sub' ExpectOp = "ExpectOp" 16082 $P1 = WSubId_130(__ARG_1, __ARG_2) 16083 $P2 = __ARG_1.'get'() 16084 $P5 = $P2.'isop'("?") 16085 if_null $P5, __label_1 16086 unless $P5 goto __label_1 16087 $P3 = WSubId_131(__ARG_1, __ARG_2) 16088 ExpectOp(":", __ARG_1) 16089 $P4 = WSubId_131(__ARG_1, __ARG_2) 16090 new $P6, [ 'Winxed'; 'Compiler'; 'OpConditionalExpr' ] 16091 $P6.'OpConditionalExpr'(__ARG_2, $P2, $P1, $P3, $P4) 16092 set $P5, $P6 16093 .return($P5) 16094 goto __label_2 16095 __label_1: # else 16096 __ARG_1.'unget'($P2) 16097 .return($P1) 16098 __label_2: # endif 16099 16100.end # parseExpr_15 16101 16102 16103.sub 'parseExpr_16' :subid('WSubId_131') 16104 .param pmc __ARG_1 16105 .param pmc __ARG_2 16106.const 'Sub' WSubId_132 = "WSubId_132" 16107.const 'Sub' WSubId_133 = "WSubId_133" 16108.const 'Sub' WSubId_131 = "WSubId_131" 16109.const 'Sub' InternalError = "InternalError" 16110 $P1 = WSubId_132(__ARG_1, __ARG_2) 16111 null $P2 16112 null $I1 16113 __label_2: # while 16114 $P2 = __ARG_1.'get'() 16115 $P5 = WSubId_133($P2) 16116 set $I1, $P5 16117 unless $I1 goto __label_1 16118 $P3 = WSubId_131(__ARG_1, __ARG_2) 16119 null $P4 16120 if $I1 == 4 goto __label_5 16121 if $I1 == 5 goto __label_6 16122 if $I1 == 6 goto __label_7 16123 if $I1 == 18 goto __label_8 16124 if $I1 == 23 goto __label_9 16125 if $I1 == 24 goto __label_10 16126 if $I1 == 31 goto __label_11 16127 goto __label_3 16128 __label_5: # case 16129 new $P4, [ 'Winxed'; 'Compiler'; 'OpAssignExpr' ] 16130 goto __label_4 # break 16131 __label_6: # case 16132 new $P4, [ 'Winxed'; 'Compiler'; 'OpAssignToExpr' ] 16133 goto __label_4 # break 16134 __label_7: # case 16135 new $P4, [ 'Winxed'; 'Compiler'; 'OpAddToExpr' ] 16136 goto __label_4 # break 16137 __label_8: # case 16138 new $P4, [ 'Winxed'; 'Compiler'; 'OpSubToExpr' ] 16139 goto __label_4 # break 16140 __label_9: # case 16141 new $P4, [ 'Winxed'; 'Compiler'; 'OpMulToExpr' ] 16142 goto __label_4 # break 16143 __label_10: # case 16144 new $P4, [ 'Winxed'; 'Compiler'; 'OpDivToExpr' ] 16145 goto __label_4 # break 16146 __label_11: # case 16147 new $P4, [ 'Winxed'; 'Compiler'; 'OpModToExpr' ] 16148 goto __label_4 # break 16149 __label_3: # default 16150 InternalError("Unexpected code in parseExpr_16", $P2) 16151 __label_4: # switch end 16152 $P4.'set'(__ARG_2, $P2, $P1, $P3) 16153 set $P1, $P4 16154 goto __label_2 16155 __label_1: # endwhile 16156 __ARG_1.'unget'($P2) 16157 .return($P1) 16158 16159.end # parseExpr_16 16160 16161 16162.sub 'parseExpr' :subid('WSubId_75') 16163 .param pmc __ARG_1 16164 .param pmc __ARG_2 16165.const 'Sub' WSubId_131 = "WSubId_131" 16166 .tailcall WSubId_131(__ARG_1, __ARG_2) 16167 16168.end # parseExpr 16169 16170.namespace [ 'Winxed'; 'Compiler'; 'Breakable' ] 16171 16172.sub 'genbreaklabel' :method 16173.const 'Sub' InternalError = "InternalError" 16174 getattribute $P1, self, 'brlabel' 16175 if_null $P1, __label_1 16176 InternalError("attempt to generate break label twice") 16177 __label_1: # endif 16178 $P1 = self.'genlabel'() 16179 null $S1 16180 if_null $P1, __label_2 16181 set $S1, $P1 16182 __label_2: 16183 box $P1, $S1 16184 setattribute self, 'brlabel', $P1 16185 .return($S1) 16186 16187.end # genbreaklabel 16188 16189 16190.sub 'getbreaklabel' :method 16191 .param pmc __ARG_1 16192.const 'Sub' InternalError = "InternalError" 16193 getattribute $P1, self, 'brlabel' 16194 unless_null $P1, __label_1 16195 InternalError("attempt to get break label before creating it") 16196 __label_1: # endif 16197 .return($P1) 16198 16199.end # getbreaklabel 16200 16201.sub Winxed_class_init :anon :load :init 16202 newclass $P0, [ 'Winxed'; 'Compiler'; 'Breakable' ] 16203 addattribute $P0, 'brlabel' 16204.end 16205.namespace [ 'Winxed'; 'Compiler'; 'Continuable' ] 16206 16207.sub 'gencontinuelabel' :method 16208.const 'Sub' InternalError = "InternalError" 16209 getattribute $P1, self, 'cntlabel' 16210 if_null $P1, __label_1 16211 InternalError("attempt to generate continue label twice") 16212 __label_1: # endif 16213 $P1 = self.'genlabel'() 16214 null $S1 16215 if_null $P1, __label_2 16216 set $S1, $P1 16217 __label_2: 16218 box $P1, $S1 16219 setattribute self, 'cntlabel', $P1 16220 .return($S1) 16221 16222.end # gencontinuelabel 16223 16224 16225.sub 'getcontinuelabel' :method 16226 .param pmc __ARG_1 16227.const 'Sub' InternalError = "InternalError" 16228 getattribute $P1, self, 'cntlabel' 16229 unless_null $P1, __label_1 16230 InternalError("attempt to get continue label before creating it") 16231 __label_1: # endif 16232 .return($P1) 16233 16234.end # getcontinuelabel 16235 16236.sub Winxed_class_init :anon :load :init 16237 newclass $P0, [ 'Winxed'; 'Compiler'; 'Continuable' ] 16238 get_class $P1, [ 'Winxed'; 'Compiler'; 'Breakable' ] 16239 addparent $P0, $P1 16240 addattribute $P0, 'cntlabel' 16241.end 16242.namespace [ 'Winxed'; 'Compiler'; 'ReturnYieldStatement' ] 16243 16244.sub 'parse' :method 16245 .param pmc __ARG_1 16246 .param pmc __ARG_2 16247 .param pmc __ARG_3 16248 self.'Statement'(__ARG_1, __ARG_3) 16249 $P1 = __ARG_2.'get'() 16250 $P2 = $P1.'isop'(";") 16251 if $P2 goto __label_1 16252 __ARG_2.'unget'($P1) 16253 new $P4, [ 'Winxed'; 'Compiler'; 'ArgumentList' ] 16254 $P4.'ArgumentList'(__ARG_3, __ARG_1, __ARG_2, ";") 16255 set $P3, $P4 16256 setattribute self, 'values', $P3 16257 __label_1: # endif 16258 16259.end # parse 16260 16261 16262.sub 'optimize' :method 16263 getattribute $P1, self, 'values' 16264 if_null $P1, __label_1 16265 $P1 = $P1.'optimize'() 16266 __label_1: # endif 16267 .return(self) 16268 16269.end # optimize 16270 16271 16272.sub 'emit' :method 16273 .param pmc __ARG_1 16274 getattribute $P1, self, 'values' 16275 unless_null $P1, __label_2 16276 null $I1 16277 goto __label_1 16278 __label_2: 16279 $I1 = $P1.'numargs'() 16280 __label_1: 16281 ne $I1, 1, __label_3 16282 isa $I2, self, [ 'Winxed'; 'Compiler'; 'ReturnStatement' ] 16283 unless $I2 goto __label_3 16284 $P2 = $P1.'getfreearg'(0) 16285 $P3 = $P2.'cantailcall'() 16286 unless $P3 goto __label_4 16287 getattribute $P5, self, 'owner' 16288 $P4 = $P5.'allowtailcall'() 16289 unless $P4 goto __label_4 16290 self.'annotate'(__ARG_1) 16291 .tailcall $P2.'emit'(__ARG_1, ".tailcall") 16292 __label_4: # endif 16293 __label_3: # endif 16294 le $I1, 0, __label_5 16295 $P1.'getargvalues'(__ARG_1) 16296 __label_5: # endif 16297 self.'annotate'(__ARG_1) 16298 self.'emitret'(__ARG_1) 16299 le $I1, 0, __label_6 16300 $P1.'emitargs'(__ARG_1) 16301 __label_6: # endif 16302 __ARG_1.'say'(")") 16303 16304.end # emit 16305 16306.sub Winxed_class_init :anon :load :init 16307 newclass $P0, [ 'Winxed'; 'Compiler'; 'ReturnYieldStatement' ] 16308 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 16309 addparent $P0, $P1 16310 addattribute $P0, 'values' 16311.end 16312.namespace [ 'Winxed'; 'Compiler'; 'ReturnStatement' ] 16313 16314.sub 'ReturnStatement' :method 16315 .param pmc __ARG_1 16316 .param pmc __ARG_2 16317 .param pmc __ARG_3 16318 self.'parse'(__ARG_1, __ARG_2, __ARG_3) 16319 16320.end # ReturnStatement 16321 16322 16323.sub 'clone' :method 16324 .param pmc __ARG_1 16325 new $P1, [ 'Winxed'; 'Compiler'; 'ReturnStatement' ] 16326 getattribute $P2, self, 'start' 16327 $P1.'Statement'($P2, __ARG_1) 16328 getattribute $P2, self, 'values' 16329 if_null $P2, __label_1 16330 getattribute $P5, self, 'values' 16331 $P4 = $P5.'clone'(__ARG_1) 16332 setattribute $P1, 'values', $P4 16333 __label_1: # endif 16334 .return($P1) 16335 16336.end # clone 16337 16338 16339.sub 'emitret' :method 16340 .param pmc __ARG_1 16341 __ARG_1.'print'(" ", ".return(") 16342 16343.end # emitret 16344 16345.sub Winxed_class_init :anon :load :init 16346 newclass $P0, [ 'Winxed'; 'Compiler'; 'ReturnStatement' ] 16347 get_class $P1, [ 'Winxed'; 'Compiler'; 'ReturnYieldStatement' ] 16348 addparent $P0, $P1 16349.end 16350.namespace [ 'Winxed'; 'Compiler'; 'YieldStatement' ] 16351 16352.sub 'YieldStatement' :method 16353 .param pmc __ARG_1 16354 .param pmc __ARG_2 16355 .param pmc __ARG_3 16356 self.'parse'(__ARG_1, __ARG_2, __ARG_3) 16357 16358.end # YieldStatement 16359 16360 16361.sub 'clone' :method 16362 .param pmc __ARG_1 16363.const 'Sub' SyntaxError = "SyntaxError" 16364 SyntaxError("inlined yield not allowed", self) 16365 16366.end # clone 16367 16368 16369.sub 'emitret' :method 16370 .param pmc __ARG_1 16371 __ARG_1.'print'(" ", ".yield(") 16372 16373.end # emitret 16374 16375.sub Winxed_class_init :anon :load :init 16376 newclass $P0, [ 'Winxed'; 'Compiler'; 'YieldStatement' ] 16377 get_class $P1, [ 'Winxed'; 'Compiler'; 'ReturnYieldStatement' ] 16378 addparent $P0, $P1 16379.end 16380.namespace [ 'Winxed'; 'Compiler'; 'InlineReturnStatement' ] 16381 16382.sub 'InlineReturnStatement' :method 16383 .param pmc __ARG_1 16384 .param pmc __ARG_2 16385 .param pmc __ARG_3 16386.const 'Sub' WSubId_75 = "WSubId_75" 16387.const 'Sub' ExpectOp = "ExpectOp" 16388 self.'Statement'(__ARG_1, __ARG_3) 16389 $P1 = __ARG_2.'get'() 16390 $P2 = $P1.'isop'(";") 16391 if $P2 goto __label_1 16392 __ARG_2.'unget'($P1) 16393 $P3 = WSubId_75(__ARG_2, __ARG_3) 16394 setattribute self, 'expr', $P3 16395 ExpectOp(";", __ARG_2) 16396 __label_1: # endif 16397 16398.end # InlineReturnStatement 16399 16400 16401.sub 'clone' :method 16402 .param pmc __ARG_1 16403 new $P1, [ 'Winxed'; 'Compiler'; 'InlineReturnStatement' ] 16404 getattribute $P3, self, 'start' 16405 $P1.'Statement'($P3, __ARG_1) 16406 getattribute $P2, self, 'expr' 16407 if_null $P2, __label_1 16408 $P4 = $P2.'clone'(__ARG_1) 16409 setattribute $P1, 'expr', $P4 16410 __label_1: # endif 16411 .return($P1) 16412 16413.end # clone 16414 16415 16416.sub 'optimize' :method 16417 getattribute $P1, self, 'expr' 16418 if_null $P1, __label_1 16419 $P3 = $P1.'optimize'() 16420 setattribute self, 'expr', $P3 16421 __label_1: # endif 16422 .return(self) 16423 16424.end # optimize 16425 16426 16427.sub 'emit' :method 16428 .param pmc __ARG_1 16429 getattribute $P3, self, 'owner' 16430 $P1 = $P3.'getouter'() 16431 getattribute $P2, self, 'expr' 16432 if_null $P2, __label_1 16433 self.'annotate'(__ARG_1) 16434 $P1.'emitret'(__ARG_1, $P2) 16435 __label_1: # endif 16436 $P3 = $P1.'islaststatement'(self) 16437 if $P3 goto __label_2 16438 $P4 = $P1.'getendlabel'() 16439 null $S1 16440 if_null $P4, __label_3 16441 set $S1, $P4 16442 __label_3: 16443 self.'annotate'(__ARG_1) 16444 __ARG_1.'emitgoto'($S1) 16445 __label_2: # endif 16446 16447.end # emit 16448 16449.sub Winxed_class_init :anon :load :init 16450 newclass $P0, [ 'Winxed'; 'Compiler'; 'InlineReturnStatement' ] 16451 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 16452 addparent $P0, $P1 16453 addattribute $P0, 'expr' 16454.end 16455.namespace [ 'Winxed'; 'Compiler' ] 16456 16457.sub 'parseReturn' :subid('WSubId_88') 16458 .param pmc __ARG_1 16459 .param pmc __ARG_2 16460 .param pmc __ARG_3 16461 $P1 = __ARG_3.'getouter'() 16462 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'InlineStatement' ] 16463 unless $I1 goto __label_1 16464 new $P3, [ 'Winxed'; 'Compiler'; 'InlineReturnStatement' ] 16465 $P3.'InlineReturnStatement'(__ARG_1, __ARG_2, __ARG_3) 16466 set $P2, $P3 16467 .return($P2) 16468 goto __label_2 16469 __label_1: # else 16470 new $P5, [ 'Winxed'; 'Compiler'; 'ReturnStatement' ] 16471 $P5.'ReturnStatement'(__ARG_1, __ARG_2, __ARG_3) 16472 set $P4, $P5 16473 .return($P4) 16474 __label_2: # endif 16475 16476.end # parseReturn 16477 16478.namespace [ 'Winxed'; 'Compiler'; 'LabelStatement' ] 16479 16480.sub 'LabelStatement' :method 16481 .param pmc __ARG_1 16482 .param pmc __ARG_2 16483 self.'Statement'(__ARG_1, __ARG_2) 16484 setattribute self, 'name', __ARG_1 16485 $P2 = self.'createlabel'(__ARG_1) 16486 setattribute self, 'value', $P2 16487 16488.end # LabelStatement 16489 16490 16491.sub 'clone' :method 16492 .param pmc __ARG_1 16493 new $P1, [ 'Winxed'; 'Compiler'; 'LabelStatement' ] 16494 getattribute $P2, self, 'start' 16495 $P1.'Statement'($P2, __ARG_1) 16496 getattribute $P3, self, 'name' 16497 setattribute $P1, 'name', $P3 16498 getattribute $P4, $P1, 'name' 16499 $P3 = $P1.'createlabel'($P4) 16500 setattribute $P1, 'value', $P3 16501 .return($P1) 16502 16503.end # clone 16504 16505 16506.sub 'optimize' :method 16507 .return(self) 16508 16509.end # optimize 16510 16511 16512.sub 'emit' :method 16513 .param pmc __ARG_1 16514 self.'annotate'(__ARG_1) 16515 getattribute $P1, self, 'value' 16516 getattribute $P2, self, 'name' 16517 set $S1, $P2 16518 concat $S2, "label ", $S1 16519 __ARG_1.'emitlabel'($P1, $S2) 16520 16521.end # emit 16522 16523.sub Winxed_class_init :anon :load :init 16524 newclass $P0, [ 'Winxed'; 'Compiler'; 'LabelStatement' ] 16525 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 16526 addparent $P0, $P1 16527 addattribute $P0, 'name' 16528 addattribute $P0, 'value' 16529.end 16530.namespace [ 'Winxed'; 'Compiler'; 'Reflabel' ] 16531 16532.sub 'Reflabel' :method 16533 .param pmc __ARG_1 16534 .param pmc __ARG_2 16535 setattribute self, 'owner', __ARG_1 16536 setattribute self, 'label', __ARG_2 16537 16538.end # Reflabel 16539 16540 16541.sub 'clone' :method 16542 .param pmc __ARG_1 16543 new $P2, [ 'Winxed'; 'Compiler'; 'Reflabel' ] 16544 getattribute $P3, self, 'label' 16545 $P2.'Reflabel'(__ARG_1, $P3) 16546 set $P1, $P2 16547 .return($P1) 16548 16549.end # clone 16550 16551 16552.sub 'optimize' :method 16553 .return(self) 16554 16555.end # optimize 16556 16557 16558.sub 'emit_get' :method 16559 .param pmc __ARG_1 16560.const 'Sub' SyntaxError = "SyntaxError" 16561 getattribute $P2, self, 'owner' 16562 getattribute $P4, self, 'label' 16563 $P3 = $P4.'getidentifier'() 16564 $P1 = $P2.'getlabel'($P3) 16565 null $S1 16566 if_null $P1, __label_1 16567 set $S1, $P1 16568 __label_1: 16569 unless_null $S1, __label_2 16570 getattribute $P1, self, 'label' 16571 SyntaxError("No such label", $P1) 16572 __label_2: # endif 16573 .return($S1) 16574 16575.end # emit_get 16576 16577.sub Winxed_class_init :anon :load :init 16578 newclass $P0, [ 'Winxed'; 'Compiler'; 'Reflabel' ] 16579 addattribute $P0, 'owner' 16580 addattribute $P0, 'label' 16581.end 16582.namespace [ 'Winxed'; 'Compiler'; 'GotoStatement' ] 16583 16584.sub 'GotoStatement' :method 16585 .param pmc __ARG_1 16586 .param pmc __ARG_2 16587 .param pmc __ARG_3 16588 self.'Statement'(__ARG_1, __ARG_2) 16589 setattribute self, 'label', __ARG_3 16590 16591.end # GotoStatement 16592 16593 16594.sub 'clone' :method 16595 .param pmc __ARG_1 16596 new $P2, [ 'Winxed'; 'Compiler'; 'GotoStatement' ] 16597 getattribute $P3, self, 'start' 16598 getattribute $P4, self, 'label' 16599 $P2.'GotoStatement'($P3, __ARG_1, $P4) 16600 set $P1, $P2 16601 .return($P1) 16602 16603.end # clone 16604 16605 16606.sub 'optimize' :method 16607 .return(self) 16608 16609.end # optimize 16610 16611 16612.sub 'emit' :method 16613 .param pmc __ARG_1 16614.const 'Sub' SyntaxError = "SyntaxError" 16615 self.'annotate'(__ARG_1) 16616 getattribute $P1, self, 'label' 16617 null $S1 16618 if_null $P1, __label_1 16619 set $S1, $P1 16620 __label_1: 16621 $P1 = self.'getlabel'($S1) 16622 null $S2 16623 if_null $P1, __label_2 16624 set $S2, $P1 16625 __label_2: 16626 unless_null $S2, __label_3 16627 getattribute $P1, self, 'label' 16628 SyntaxError("No such label", $P1) 16629 __label_3: # endif 16630 concat $S3, "goto ", $S1 16631 __ARG_1.'emitgoto'($S2, $S3) 16632 16633.end # emit 16634 16635.sub Winxed_class_init :anon :load :init 16636 newclass $P0, [ 'Winxed'; 'Compiler'; 'GotoStatement' ] 16637 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 16638 addparent $P0, $P1 16639 addattribute $P0, 'label' 16640.end 16641.namespace [ 'Winxed'; 'Compiler' ] 16642 16643.sub 'parseGoto' :subid('WSubId_89') 16644 .param pmc __ARG_1 16645 .param pmc __ARG_2 16646 .param pmc __ARG_3 16647.const 'Sub' RequireIdentifier = "RequireIdentifier" 16648.const 'Sub' ExpectOp = "ExpectOp" 16649 $P1 = __ARG_2.'get'() 16650 RequireIdentifier($P1) 16651 ExpectOp(";", __ARG_2) 16652 new $P3, [ 'Winxed'; 'Compiler'; 'GotoStatement' ] 16653 $P3.'GotoStatement'(__ARG_1, __ARG_3, $P1) 16654 set $P2, $P3 16655 .return($P2) 16656 16657.end # parseGoto 16658 16659.namespace [ 'Winxed'; 'Compiler'; 'ConditionalStatement' ] 16660 16661.sub 'parseconditionshort' :method 16662 .param pmc __ARG_1 16663.const 'Sub' WSubId_75 = "WSubId_75" 16664 $P1 = WSubId_75(__ARG_1, self) 16665 self.'set'($P1) 16666 16667.end # parseconditionshort 16668 16669 16670.sub 'parsecondition' :method 16671 .param pmc __ARG_1 16672.const 'Sub' ExpectOp = "ExpectOp" 16673.const 'Sub' WSubId_75 = "WSubId_75" 16674 ExpectOp("(", __ARG_1) 16675 $P1 = WSubId_75(__ARG_1, self) 16676 self.'set'($P1) 16677 ExpectOp(")", __ARG_1) 16678 16679.end # parsecondition 16680 16681.sub Winxed_class_init :anon :load :init 16682 newclass $P0, [ 'Winxed'; 'Compiler'; 'ConditionalStatement' ] 16683 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 16684 addparent $P0, $P1 16685 get_class $P2, [ 'Winxed'; 'Compiler'; 'Condition' ] 16686 addparent $P0, $P2 16687.end 16688.namespace [ 'Winxed'; 'Compiler'; 'IfStatement' ] 16689 16690.sub 'IfStatement' :method 16691 .param pmc __ARG_1 16692 .param pmc __ARG_2 16693 .param pmc __ARG_3 16694.const 'Sub' WSubId_134 = "WSubId_134" 16695 self.'Statement'(__ARG_1, __ARG_3) 16696 self.'parsecondition'(__ARG_2) 16697 $P3 = WSubId_134(__ARG_2, self) 16698 setattribute self, 'truebranch', $P3 16699 $P1 = __ARG_2.'get'() 16700 $P2 = $P1.'iskeyword'("else") 16701 if_null $P2, __label_1 16702 unless $P2 goto __label_1 16703 $P4 = WSubId_134(__ARG_2, self) 16704 setattribute self, 'falsebranch', $P4 16705 goto __label_2 16706 __label_1: # else 16707 new $P6, [ 'Winxed'; 'Compiler'; 'EmptyStatement' ] 16708 setattribute self, 'falsebranch', $P6 16709 __ARG_2.'unget'($P1) 16710 __label_2: # endif 16711 16712.end # IfStatement 16713 16714 16715.sub 'clone' :method 16716 .param pmc __ARG_1 16717 new $P1, [ 'Winxed'; 'Compiler'; 'IfStatement' ] 16718 getattribute $P2, self, 'start' 16719 $P1.'Statement'($P2, __ARG_1) 16720 getattribute $P4, self, 'condexpr' 16721 $P3 = $P4.'clone'(__ARG_1) 16722 setattribute $P1, 'condexpr', $P3 16723 getattribute $P4, self, 'truebranch' 16724 $P3 = $P4.'clone'(__ARG_1) 16725 setattribute $P1, 'truebranch', $P3 16726 getattribute $P4, self, 'falsebranch' 16727 $P3 = $P4.'clone'(__ARG_1) 16728 setattribute $P1, 'falsebranch', $P3 16729 .return($P1) 16730 16731.end # clone 16732 16733 16734.sub 'optimize' :method 16735 self.'optimize_condition'() 16736 getattribute $P3, self, 'truebranch' 16737 $P2 = $P3.'optimize'() 16738 setattribute self, 'truebranch', $P2 16739 getattribute $P3, self, 'falsebranch' 16740 $P2 = $P3.'optimize'() 16741 setattribute self, 'falsebranch', $P2 16742 $P1 = self.'getvalue'() 16743 set $I1, $P1 16744 if $I1 == 1 goto __label_3 16745 if $I1 == 2 goto __label_4 16746 goto __label_1 16747 __label_3: # case 16748 getattribute $P2, self, 'truebranch' 16749 .return($P2) 16750 __label_4: # case 16751 getattribute $P3, self, 'falsebranch' 16752 .return($P3) 16753 __label_1: # default 16754 __label_2: # switch end 16755 .return(self) 16756 16757.end # optimize 16758 16759 16760.sub 'emit' :method 16761 .param pmc __ARG_1 16762 getattribute $P1, self, 'truebranch' 16763 getattribute $P2, self, 'falsebranch' 16764 $P3 = $P1.'isempty'() 16765 set $I1, $P3 16766 $P3 = $P2.'isempty'() 16767 set $I2, $P3 16768 set $S1, "" 16769 if $I2 goto __label_1 16770 $P3 = self.'genlabel'() 16771 set $S1, $P3 16772 __label_1: # endif 16773 $P3 = self.'genlabel'() 16774 null $S2 16775 if_null $P3, __label_2 16776 set $S2, $P3 16777 __label_2: 16778 unless $I2 goto __label_4 16779 set $S3, $S2 16780 goto __label_3 16781 __label_4: 16782 set $S3, $S1 16783 __label_3: 16784 self.'annotate'(__ARG_1) 16785 self.'emit_else'(__ARG_1, $S3) 16786 $P1.'emit'(__ARG_1) 16787 if $I2 goto __label_5 16788 __ARG_1.'emitgoto'($S2) 16789 __ARG_1.'emitlabel'($S1, "else") 16790 $P2.'emit'(__ARG_1) 16791 __label_5: # endif 16792 __ARG_1.'emitlabel'($S2, "endif") 16793 16794.end # emit 16795 16796.sub Winxed_class_init :anon :load :init 16797 newclass $P0, [ 'Winxed'; 'Compiler'; 'IfStatement' ] 16798 get_class $P1, [ 'Winxed'; 'Compiler'; 'ConditionalStatement' ] 16799 addparent $P0, $P1 16800 addattribute $P0, 'truebranch' 16801 addattribute $P0, 'falsebranch' 16802.end 16803.namespace [ 'Winxed'; 'Compiler'; 'LoopStatement' ] 16804 16805.sub 'parsebody' :method 16806 .param pmc __ARG_1 16807.const 'Sub' WSubId_134 = "WSubId_134" 16808 $P2 = WSubId_134(__ARG_1, self) 16809 setattribute self, 'body', $P2 16810 16811.end # parsebody 16812 16813 16814.sub 'emit_infinite' :method 16815 .param pmc __ARG_1 16816 $P1 = self.'genbreaklabel'() 16817 null $S1 16818 if_null $P1, __label_1 16819 set $S1, $P1 16820 __label_1: 16821 $P1 = self.'gencontinuelabel'() 16822 null $S2 16823 if_null $P1, __label_2 16824 set $S2, $P1 16825 __label_2: 16826 self.'annotate'(__ARG_1) 16827 __ARG_1.'emitlabel'($S2, "Infinite loop") 16828 getattribute $P1, self, 'body' 16829 $P1.'emit'(__ARG_1) 16830 __ARG_1.'emitgoto'($S2) 16831 __ARG_1.'emitlabel'($S1, "Infinite loop end") 16832 16833.end # emit_infinite 16834 16835.sub Winxed_class_init :anon :load :init 16836 newclass $P0, [ 'Winxed'; 'Compiler'; 'LoopStatement' ] 16837 get_class $P1, [ 'Winxed'; 'Compiler'; 'Continuable' ] 16838 addparent $P0, $P1 16839 addattribute $P0, 'body' 16840.end 16841.namespace [ 'Winxed'; 'Compiler'; 'WhileStatement' ] 16842 16843.sub 'WhileStatement' :method 16844 .param pmc __ARG_1 16845 .param pmc __ARG_2 16846 .param pmc __ARG_3 16847 self.'Statement'(__ARG_1, __ARG_3) 16848 self.'parsecondition'(__ARG_2) 16849 self.'parsebody'(__ARG_2) 16850 16851.end # WhileStatement 16852 16853 16854.sub 'clone' :method 16855 .param pmc __ARG_1 16856 new $P1, [ 'Winxed'; 'Compiler'; 'WhileStatement' ] 16857 getattribute $P2, self, 'start' 16858 $P1.'Statement'($P2, __ARG_1) 16859 getattribute $P4, self, 'condexpr' 16860 $P3 = $P4.'clone'($P1) 16861 setattribute $P1, 'condexpr', $P3 16862 getattribute $P4, self, 'body' 16863 $P3 = $P4.'clone'($P1) 16864 setattribute $P1, 'body', $P3 16865 .return($P1) 16866 16867.end # clone 16868 16869 16870.sub 'optimize' :method 16871 self.'optimize_condition'() 16872 getattribute $P3, self, 'body' 16873 $P2 = $P3.'optimize'() 16874 setattribute self, 'body', $P2 16875 .return(self) 16876 16877.end # optimize 16878 16879 16880.sub 'emit' :method 16881 .param pmc __ARG_1 16882 $P1 = self.'getvalue'() 16883 set $I1, $P1 16884 if $I1 == 1 goto __label_3 16885 if $I1 == 2 goto __label_4 16886 goto __label_1 16887 __label_3: # case 16888 self.'emit_infinite'(__ARG_1) 16889 goto __label_2 # break 16890 __label_4: # case 16891 $P2 = __ARG_1.'getDebug'() 16892 if_null $P2, __label_5 16893 unless $P2 goto __label_5 16894 __ARG_1.'comment'("while(false) optimized out") 16895 __label_5: # endif 16896 goto __label_2 # break 16897 __label_1: # default 16898 $P3 = self.'genbreaklabel'() 16899 null $S1 16900 if_null $P3, __label_6 16901 set $S1, $P3 16902 __label_6: 16903 $P4 = self.'gencontinuelabel'() 16904 null $S2 16905 if_null $P4, __label_7 16906 set $S2, $P4 16907 __label_7: 16908 self.'annotate'(__ARG_1) 16909 __ARG_1.'emitlabel'($S2, "while") 16910 self.'emit_else'(__ARG_1, $S1) 16911 getattribute $P5, self, 'body' 16912 $P5.'emit'(__ARG_1) 16913 __ARG_1.'emitgoto'($S2) 16914 __ARG_1.'emitlabel'($S1, "endwhile") 16915 __label_2: # switch end 16916 16917.end # emit 16918 16919.sub Winxed_class_init :anon :load :init 16920 newclass $P0, [ 'Winxed'; 'Compiler'; 'WhileStatement' ] 16921 get_class $P1, [ 'Winxed'; 'Compiler'; 'LoopStatement' ] 16922 addparent $P0, $P1 16923 get_class $P2, [ 'Winxed'; 'Compiler'; 'ConditionalStatement' ] 16924 addparent $P0, $P2 16925.end 16926.namespace [ 'Winxed'; 'Compiler'; 'DoStatement' ] 16927 16928.sub 'DoStatement' :method 16929 .param pmc __ARG_1 16930 .param pmc __ARG_2 16931 .param pmc __ARG_3 16932.const 'Sub' WSubId_135 = "WSubId_135" 16933 self.'Statement'(__ARG_1, __ARG_3) 16934 self.'parsebody'(__ARG_2) 16935 WSubId_135("while", __ARG_2) 16936 self.'parsecondition'(__ARG_2) 16937 16938.end # DoStatement 16939 16940 16941.sub 'clone' :method 16942 .param pmc __ARG_1 16943 new $P1, [ 'Winxed'; 'Compiler'; 'DoStatement' ] 16944 getattribute $P2, self, 'start' 16945 $P1.'Statement'($P2, __ARG_1) 16946 getattribute $P4, self, 'condexpr' 16947 $P3 = $P4.'clone'($P1) 16948 setattribute $P1, 'condexpr', $P3 16949 getattribute $P4, self, 'body' 16950 $P3 = $P4.'clone'($P1) 16951 setattribute $P1, 'body', $P3 16952 .return($P1) 16953 16954.end # clone 16955 16956 16957.sub 'optimize' :method 16958 self.'optimize_condition'() 16959 getattribute $P2, self, 'body' 16960 $P1 = $P2.'optimize'() 16961 $P2 = $P1.'isempty'() 16962 unless $P2 goto __label_1 16963 $P3 = self.'getvalue'() 16964 set $I1, $P3 16965 ne $I1, 2, __label_1 16966 new $P4, [ 'Winxed'; 'Compiler'; 'EmptyStatement' ] 16967 .return($P4) 16968 __label_1: # endif 16969 setattribute self, 'body', $P1 16970 .return(self) 16971 16972.end # optimize 16973 16974 16975.sub 'emit' :method 16976 .param pmc __ARG_1 16977 getattribute $P1, self, 'body' 16978 $P2 = self.'getvalue'() 16979 set $I1, $P2 16980 if $I1 == 1 goto __label_3 16981 goto __label_1 16982 __label_3: # case 16983 self.'emit_infinite'(__ARG_1) 16984 goto __label_2 # break 16985 __label_1: # default 16986 $P2 = self.'genlabel'() 16987 null $S1 16988 if_null $P2, __label_4 16989 set $S1, $P2 16990 __label_4: 16991 $P3 = self.'genbreaklabel'() 16992 null $S2 16993 if_null $P3, __label_5 16994 set $S2, $P3 16995 __label_5: 16996 $P4 = self.'gencontinuelabel'() 16997 null $S3 16998 if_null $P4, __label_6 16999 set $S3, $P4 17000 __label_6: 17001 self.'annotate'(__ARG_1) 17002 __ARG_1.'emitlabel'($S1, "do") 17003 $P1.'emit'(__ARG_1) 17004 __ARG_1.'emitlabel'($S3, "continue") 17005 eq $I1, 2, __label_7 17006 self.'emit_if'(__ARG_1, $S1, $S2) 17007 __label_7: # endif 17008 __ARG_1.'emitlabel'($S2, "enddo") 17009 __label_2: # switch end 17010 17011.end # emit 17012 17013.sub Winxed_class_init :anon :load :init 17014 newclass $P0, [ 'Winxed'; 'Compiler'; 'DoStatement' ] 17015 get_class $P1, [ 'Winxed'; 'Compiler'; 'LoopStatement' ] 17016 addparent $P0, $P1 17017 get_class $P2, [ 'Winxed'; 'Compiler'; 'ConditionalStatement' ] 17018 addparent $P0, $P2 17019.end 17020.namespace [ 'Winxed'; 'Compiler'; 'ContinueStatement' ] 17021 17022.sub 'ContinueStatement' :method 17023 .param pmc __ARG_1 17024 .param pmc __ARG_2 17025 .param pmc __ARG_3 17026.const 'Sub' ExpectOp = "ExpectOp" 17027 self.'Statement'(__ARG_1, __ARG_3) 17028 ExpectOp(";", __ARG_2) 17029 17030.end # ContinueStatement 17031 17032 17033.sub 'clone' :method 17034 .param pmc __ARG_1 17035 new $P1, [ 'Winxed'; 'Compiler'; 'ContinueStatement' ] 17036 getattribute $P2, self, 'start' 17037 $P1.'Statement'($P2, __ARG_1) 17038 .return($P1) 17039 17040.end # clone 17041 17042 17043.sub 'optimize' :method 17044 .return(self) 17045 17046.end # optimize 17047 17048 17049.sub 'emit' :method 17050 .param pmc __ARG_1 17051 self.'annotate'(__ARG_1) 17052 getattribute $P2, self, 'start' 17053 $P1 = self.'getcontinuelabel'($P2) 17054 null $S1 17055 if_null $P1, __label_1 17056 set $S1, $P1 17057 __label_1: 17058 __ARG_1.'emitgoto'($S1, "continue") 17059 17060.end # emit 17061 17062.sub Winxed_class_init :anon :load :init 17063 newclass $P0, [ 'Winxed'; 'Compiler'; 'ContinueStatement' ] 17064 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 17065 addparent $P0, $P1 17066.end 17067.namespace [ 'Winxed'; 'Compiler'; 'BreakStatement' ] 17068 17069.sub 'BreakStatement' :method 17070 .param pmc __ARG_1 17071 .param pmc __ARG_2 17072 .param pmc __ARG_3 17073.const 'Sub' ExpectOp = "ExpectOp" 17074 self.'Statement'(__ARG_1, __ARG_3) 17075 ExpectOp(";", __ARG_2) 17076 17077.end # BreakStatement 17078 17079 17080.sub 'clone' :method 17081 .param pmc __ARG_1 17082 new $P1, [ 'Winxed'; 'Compiler'; 'BreakStatement' ] 17083 getattribute $P2, self, 'start' 17084 $P1.'Statement'($P2, __ARG_1) 17085 .return($P1) 17086 17087.end # clone 17088 17089 17090.sub 'optimize' :method 17091 .return(self) 17092 17093.end # optimize 17094 17095 17096.sub 'emit' :method 17097 .param pmc __ARG_1 17098 self.'annotate'(__ARG_1) 17099 getattribute $P2, self, 'start' 17100 $P1 = self.'getbreaklabel'($P2) 17101 null $S1 17102 if_null $P1, __label_1 17103 set $S1, $P1 17104 __label_1: 17105 __ARG_1.'emitgoto'($S1, "break") 17106 17107.end # emit 17108 17109.sub Winxed_class_init :anon :load :init 17110 newclass $P0, [ 'Winxed'; 'Compiler'; 'BreakStatement' ] 17111 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 17112 addparent $P0, $P1 17113.end 17114.namespace [ 'Winxed'; 'Compiler'; 'SwitchBaseStatement' ] 17115 17116.sub 'SwitchBaseStatement' :method 17117 .param pmc __ARG_1 17118 .param pmc __ARG_2 17119 self.'Statement'(__ARG_1, __ARG_2) 17120 root_new $P2, ['parrot';'ResizablePMCArray'] 17121 setattribute self, 'case_value', $P2 17122 root_new $P2, ['parrot';'ResizablePMCArray'] 17123 setattribute self, 'case_st', $P2 17124 root_new $P2, ['parrot';'ResizablePMCArray'] 17125 setattribute self, 'default_st', $P2 17126 17127.end # SwitchBaseStatement 17128 17129 17130.sub 'cloneswitchto' :subid('WSubId_13') :method 17131 .param pmc __ARG_1 17132 .param pmc __ARG_2 17133.const 'Sub' WSubId_14 = "WSubId_14" 17134.lex '__WLEX_1', __ARG_1 17135 getattribute $P17, self, 'start' 17136 __ARG_1.'Statement'($P17, __ARG_2) 17137 getattribute $P1, self, 'case_value' 17138 set $P2, __ARG_1 17139.const 'Sub' bindlast = "bindlast" 17140.const 'Sub' bindmethod = "bindmethod" 17141 set $P3, $P1 17142 root_new $P4, ['parrot';'ResizablePMCArray'] 17143 $P19 = bindmethod("clone") 17144 $P5 = bindlast($P19, $P2) 17145 if_null $P3, __label_2 17146 iter $P20, $P3 17147 set $P20, 0 17148 __label_1: # for iteration 17149 unless $P20 goto __label_2 17150 shift $P6, $P20 17151 $P21 = $P5($P6) 17152 push $P4, $P21 17153 goto __label_1 17154 __label_2: # endfor 17155 set $P18, $P4 17156 set $P17, $P18 17157 setattribute __ARG_1, 'case_value', $P17 17158 getattribute $P7, self, 'case_st' 17159 root_new $P8, ['parrot';'ResizablePMCArray'] 17160 newclosure $P9, WSubId_14 17161 if_null $P7, __label_4 17162 iter $P23, $P7 17163 set $P23, 0 17164 __label_3: # for iteration 17165 unless $P23 goto __label_4 17166 shift $P10, $P23 17167 $P19 = $P9($P10) 17168 push $P8, $P19 17169 goto __label_3 17170 __label_4: # endfor 17171 set $P22, $P8 17172 set $P17, $P22 17173 setattribute __ARG_1, 'case_st', $P17 17174 getattribute $P11, self, 'default_st' 17175 set $P12, __ARG_1 17176.const 'Sub' bindlast = "bindlast" 17177.const 'Sub' bindmethod = "bindmethod" 17178 set $P13, $P11 17179 root_new $P14, ['parrot';'ResizablePMCArray'] 17180 $P19 = bindmethod("clone") 17181 $P15 = bindlast($P19, $P12) 17182 if_null $P13, __label_6 17183 iter $P25, $P13 17184 set $P25, 0 17185 __label_5: # for iteration 17186 unless $P25 goto __label_6 17187 shift $P16, $P25 17188 $P21 = $P15($P16) 17189 push $P14, $P21 17190 goto __label_5 17191 __label_6: # endfor 17192 set $P24, $P14 17193 set $P17, $P24 17194 setattribute __ARG_1, 'default_st', $P17 17195 .return(__ARG_1) 17196 17197.end # cloneswitchto 17198 17199 17200.sub '' :anon :subid('WSubId_14') :outer('WSubId_13') 17201 .param pmc __ARG_3 17202 find_lex $P1, '__WLEX_1' 17203 set $P2, __ARG_3 17204 set $P3, $P1 17205.const 'Sub' bindlast = "bindlast" 17206.const 'Sub' bindmethod = "bindmethod" 17207 set $P4, $P2 17208 root_new $P5, ['parrot';'ResizablePMCArray'] 17209 $P9 = bindmethod("clone") 17210 $P6 = bindlast($P9, $P3) 17211 if_null $P4, __label_2 17212 iter $P10, $P4 17213 set $P10, 0 17214 __label_1: # for iteration 17215 unless $P10 goto __label_2 17216 shift $P7, $P10 17217 $P11 = $P6($P7) 17218 push $P5, $P11 17219 goto __label_1 17220 __label_2: # endfor 17221 set $P8, $P5 17222 set $P9, $P8 17223 .return($P9) 17224 17225.end # WSubId_14 17226 17227 17228.sub 'parse_switchbody' :method 17229 .param pmc __ARG_1 17230.const 'Sub' Expected = "Expected" 17231 $P1 = __ARG_1.'get'() 17232 $P2 = $P1.'isop'("}") 17233 set $I1, $P2 17234 if $I1 goto __label_3 17235 $P3 = $P1.'iskeyword'("default") 17236 set $I1, $P3 17237 if $I1 goto __label_4 17238 $P4 = $P1.'iskeyword'("case") 17239 set $I1, $P4 17240 if $I1 goto __label_5 17241 goto __label_2 17242 __label_3: # case 17243 goto __label_1 # break 17244 __label_4: # case 17245 self.'parse_default'(__ARG_1) 17246 goto __label_1 # break 17247 __label_5: # case 17248 self.'parse_cases'(__ARG_1) 17249 goto __label_1 # break 17250 __label_2: # default 17251 Expected("switch cases", $P1) 17252 __label_1: # switch end 17253 17254.end # parse_switchbody 17255 17256 17257.sub 'parse_cases' :method 17258 .param pmc __ARG_1 17259.const 'Sub' WSubId_75 = "WSubId_75" 17260.const 'Sub' Expected = "Expected" 17261.const 'Sub' WSubId_134 = "WSubId_134" 17262 null $P1 17263 __label_1: # do 17264 getattribute $P3, self, 'case_value' 17265 $P4 = WSubId_75(__ARG_1, self) 17266 push $P3, $P4 17267 $P1 = __ARG_1.'get'() 17268 $P3 = $P1.'isop'(":") 17269 if $P3 goto __label_4 17270 Expected("':' in case", $P1) 17271 __label_4: # endif 17272 root_new $P2, ['parrot';'ResizablePMCArray'] 17273 __label_6: # while 17274 $P1 = __ARG_1.'get'() 17275 $P3 = $P1.'isop'("}") 17276 if $P3 goto __label_8 17277 $P3 = $P1.'iskeyword'("case") 17278 __label_8: 17279 if $P3 goto __label_7 17280 $P3 = $P1.'iskeyword'("default") 17281 __label_7: 17282 if $P3 goto __label_5 17283 __ARG_1.'unget'($P1) 17284 $P3 = WSubId_134(__ARG_1, self) 17285 push $P2, $P3 17286 goto __label_6 17287 __label_5: # endwhile 17288 getattribute $P3, self, 'case_st' 17289 push $P3, $P2 17290 __label_3: # continue 17291 $P3 = $P1.'iskeyword'("case") 17292 if_null $P3, __label_2 17293 if $P3 goto __label_1 17294 __label_2: # enddo 17295 $P3 = $P1.'iskeyword'("default") 17296 if_null $P3, __label_9 17297 unless $P3 goto __label_9 17298 self.'parse_default'(__ARG_1) 17299 __label_9: # endif 17300 17301.end # parse_cases 17302 17303 17304.sub 'parse_default' :method 17305 .param pmc __ARG_1 17306.const 'Sub' Expected = "Expected" 17307.const 'Sub' SyntaxError = "SyntaxError" 17308.const 'Sub' WSubId_134 = "WSubId_134" 17309 $P1 = __ARG_1.'get'() 17310 $P2 = $P1.'isop'(":") 17311 if $P2 goto __label_1 17312 Expected("':' in default", $P1) 17313 __label_1: # endif 17314 __label_3: # while 17315 $P1 = __ARG_1.'get'() 17316 $P2 = $P1.'isop'("}") 17317 if $P2 goto __label_2 17318 $P3 = $P1.'iskeyword'("case") 17319 if_null $P3, __label_4 17320 unless $P3 goto __label_4 17321 SyntaxError("case after default", $P1) 17322 __label_4: # endif 17323 $P2 = $P1.'iskeyword'("default") 17324 if_null $P2, __label_5 17325 unless $P2 goto __label_5 17326 SyntaxError("default after default", $P1) 17327 __label_5: # endif 17328 __ARG_1.'unget'($P1) 17329 getattribute $P2, self, 'default_st' 17330 $P3 = WSubId_134(__ARG_1, self) 17331 push $P2, $P3 17332 goto __label_3 17333 __label_2: # endwhile 17334 17335.end # parse_default 17336 17337 17338.sub 'optimize_cases' :method 17339 getattribute $P1, self, 'case_value' 17340 if_null $P1, __label_2 17341 elements $I1, $P1 17342 goto __label_1 17343 __label_2: 17344 null $I1 17345 __label_1: 17346 null $I2 17347 __label_5: # for condition 17348 ge $I2, $I1, __label_4 17349 $P6 = $P1[$I2] 17350 $P5 = $P6.'optimize'() 17351 $P1[$I2] = $P5 17352 __label_3: # for iteration 17353 inc $I2 17354 goto __label_5 17355 __label_4: # for end 17356 getattribute $P5, self, 'case_st' 17357 if_null $P5, __label_7 17358 iter $P7, $P5 17359 set $P7, 0 17360 __label_6: # for iteration 17361 unless $P7 goto __label_7 17362 shift $P2, $P7 17363 set $P3, $P2 17364 if_null $P3, __label_9 17365 elements $I3, $P3 17366 goto __label_8 17367 __label_9: 17368 null $I3 17369 __label_8: 17370 null $I4 17371 __label_12: # for condition 17372 ge $I4, $I3, __label_11 17373 $P6 = $P3[$I4] 17374 $P5 = $P6.'optimize'() 17375 $P3[$I4] = $P5 17376 __label_10: # for iteration 17377 inc $I4 17378 goto __label_12 17379 __label_11: # for end 17380 goto __label_6 17381 __label_7: # endfor 17382 getattribute $P4, self, 'default_st' 17383 if_null $P4, __label_14 17384 elements $I5, $P4 17385 goto __label_13 17386 __label_14: 17387 null $I5 17388 __label_13: 17389 null $I6 17390 __label_17: # for condition 17391 ge $I6, $I5, __label_16 17392 $P6 = $P4[$I6] 17393 $P5 = $P6.'optimize'() 17394 $P4[$I6] = $P5 17395 __label_15: # for iteration 17396 inc $I6 17397 goto __label_17 17398 __label_16: # for end 17399 17400.end # optimize_cases 17401 17402.sub Winxed_class_init :anon :load :init 17403 newclass $P0, [ 'Winxed'; 'Compiler'; 'SwitchBaseStatement' ] 17404 get_class $P1, [ 'Winxed'; 'Compiler'; 'Breakable' ] 17405 addparent $P0, $P1 17406 get_class $P2, [ 'Winxed'; 'Compiler'; 'Statement' ] 17407 addparent $P0, $P2 17408 addattribute $P0, 'case_value' 17409 addattribute $P0, 'case_st' 17410 addattribute $P0, 'default_st' 17411.end 17412.namespace [ 'Winxed'; 'Compiler'; 'SwitchStatement' ] 17413 17414.sub 'SwitchStatement' :method 17415 .param pmc __ARG_1 17416 .param pmc __ARG_2 17417 .param pmc __ARG_3 17418.const 'Sub' WSubId_75 = "WSubId_75" 17419.const 'Sub' Expected = "Expected" 17420 self.'SwitchBaseStatement'(__ARG_1, __ARG_3) 17421 $P3 = WSubId_75(__ARG_2, self) 17422 setattribute self, 'condition', $P3 17423 $P1 = __ARG_2.'get'() 17424 $P2 = $P1.'isop'(")") 17425 if $P2 goto __label_1 17426 Expected("')' in switch", $P1) 17427 __label_1: # endif 17428 $P1 = __ARG_2.'get'() 17429 $P2 = $P1.'isop'("{") 17430 if $P2 goto __label_2 17431 Expected("'{' in switch", $P1) 17432 __label_2: # endif 17433 self.'parse_switchbody'(__ARG_2) 17434 17435.end # SwitchStatement 17436 17437 17438.sub 'clone' :method 17439 .param pmc __ARG_1 17440 new $P2, [ 'Winxed'; 'Compiler'; 'SwitchStatement' ] 17441 $P1 = self.'cloneswitchto'($P2, __ARG_1) 17442 getattribute $P4, self, 'condition' 17443 $P3 = $P4.'clone'($P1) 17444 setattribute $P1, 'condition', $P3 17445 .return($P1) 17446 17447.end # clone 17448 17449 17450.sub 'optimize' :method 17451 getattribute $P3, self, 'condition' 17452 $P2 = $P3.'optimize'() 17453 setattribute self, 'condition', $P2 17454 self.'optimize_cases'() 17455 .return(self) 17456 17457.end # optimize 17458 17459 17460.sub 'emit' :method 17461 .param pmc __ARG_1 17462.const 'Sub' SyntaxError = "SyntaxError" 17463.const 'Sub' sformat = "sformat" 17464 set $S1, "" 17465 getattribute $P21, self, 'case_value' 17466 if_null $P21, __label_2 17467 iter $P22, $P21 17468 set $P22, 0 17469 __label_1: # for iteration 17470 unless $P22 goto __label_2 17471 shift $P1, $P22 17472 $P23 = $P1.'checkresult'() 17473 null $S2 17474 if_null $P23, __label_3 17475 set $S2, $P23 17476 __label_3: 17477 ne $S2, "N", __label_4 17478 SyntaxError("Invalid type in case", self) 17479 __label_4: # endif 17480 ne $S2, "S", __label_5 17481 iseq $I4, $S1, "" 17482 if $I4 goto __label_7 17483 iseq $I4, $S1, "char" 17484 __label_7: 17485 unless $I4 goto __label_6 17486 $P21 = $P1.'isstringliteral'() 17487 unless $P21 goto __label_8 17488 set $P2, $P1 17489 $P21 = $P2.'getStringValue'() 17490 null $S3 17491 if_null $P21, __label_10 17492 set $S3, $P21 17493 __label_10: 17494 set $S13, $S3 17495 length $I5, $S13 17496 ne $I5, 1, __label_8 17497 set $S2, "char" 17498 goto __label_9 17499 __label_8: # else 17500 set $S1, "S" 17501 __label_9: # endif 17502 __label_6: # endif 17503 __label_5: # endif 17504 ne $S1, "", __label_11 17505 set $S1, $S2 17506 goto __label_12 17507 __label_11: # else 17508 eq $S1, $S2, __label_13 17509 set $S1, "P" 17510 __label_13: # endif 17511 __label_12: # endif 17512 goto __label_1 17513 __label_2: # endfor 17514 getattribute $P3, self, 'condition' 17515 $P4 = $P3.'checkresult'() 17516 ne $S1, "", __label_14 17517 set $S1, $P4 17518 __label_14: # endif 17519 $P21 = __ARG_1.'getDebug'() 17520 if_null $P21, __label_15 17521 unless $P21 goto __label_15 17522 __ARG_1.'comment'("switch") 17523 __label_15: # endif 17524 self.'annotate'(__ARG_1) 17525 $P21 = self.'genlabel'() 17526 null $S4 17527 if_null $P21, __label_16 17528 set $S4, $P21 17529 __label_16: 17530 null $S5 17531 ne $S1, "char", __label_17 17532 isa $I4, $P3, [ 'Winxed'; 'Compiler'; 'CallBuiltinExpr' ] 17533 unless $I4 goto __label_19 17534 getattribute $P23, $P3, 'builtin' 17535 $P21 = $P23.'name'() 17536 set $S14, $P21 17537 ne $S14, "chr", __label_19 17538 getattribute $P5, $P3, 'args' 17539 $P21 = $P5[0] 17540 getattribute $P6, $P21, 'arg' 17541 $P21 = $P6.'emit_getint'(__ARG_1) 17542 set $S5, $P21 17543 goto __label_20 17544 __label_19: # else 17545 null $S6 17546 set $S14, $P4 17547 eq $S14, "S", __label_21 17548 $P21 = $P3.'emit_get'(__ARG_1) 17549 null $S7 17550 if_null $P21, __label_23 17551 set $S7, $P21 17552 __label_23: 17553 $P21 = self.'tempreg'("S") 17554 set $S6, $P21 17555 __ARG_1.'emitset'($S6, $S7) 17556 goto __label_22 17557 __label_21: # else 17558 $P21 = $P3.'emit_get'(__ARG_1) 17559 set $S6, $P21 17560 __label_22: # endif 17561 __ARG_1.'emitif_null'($S6, $S4) 17562 $P21 = self.'tempreg'("I") 17563 set $S5, $P21 17564 __ARG_1.'emitarg2'("length", $S5, $S6) 17565 __ARG_1.'emitarg3'("ne", $S5, "1", $S4) 17566 __ARG_1.'emitarg2'("ord", $S5, $S6) 17567 __label_20: # endif 17568 goto __label_18 17569 __label_17: # else 17570 set $S14, $P4 17571 ne $S14, $S1, __label_24 17572 $P21 = $P3.'emit_get'(__ARG_1) 17573 set $S5, $P21 17574 goto __label_25 17575 __label_24: # else 17576 $P23 = self.'tempreg'($S1) 17577 set $S5, $P23 17578 $P21 = $P3.'emit_get'(__ARG_1) 17579 null $S8 17580 if_null $P21, __label_26 17581 set $S8, $P21 17582 __label_26: 17583 __ARG_1.'emitset'($S5, $S8) 17584 __label_25: # endif 17585 __label_18: # endif 17586 self.'genbreaklabel'() 17587 new $P7, ['ResizableStringArray'] 17588 null $S9 17589 eq $S1, "char", __label_27 17590 self.'tempreg'($S1) 17591 __label_27: # endif 17592 getattribute $P21, self, 'case_value' 17593 if_null $P21, __label_29 17594 iter $P24, $P21 17595 set $P24, 0 17596 __label_28: # for iteration 17597 unless $P24 goto __label_29 17598 shift $P8, $P24 17599 $P23 = self.'genlabel'() 17600 null $S10 17601 if_null $P23, __label_30 17602 set $S10, $P23 17603 __label_30: 17604 push $P7, $S10 17605 null $S11 17606 ne $S1, "I", __label_31 17607 $P21 = $P8.'emit_getint'(__ARG_1) 17608 set $S11, $P21 17609 goto __label_32 17610 __label_31: # else 17611 ne $S1, "char", __label_33 17612 set $P9, $P8 17613 $P21 = $P9.'getStringValue'() 17614 null $S12 17615 if_null $P21, __label_35 17616 set $S12, $P21 17617 __label_35: 17618 set $S15, $S12 17619 ord $I1, $S15 17620 set $S11, $I1 17621 goto __label_34 17622 __label_33: # else 17623 $P21 = $P8.'checkresult'() 17624 set $S14, $P21 17625 ne $S1, $S14, __label_36 17626 $P23 = $P8.'emit_get'(__ARG_1) 17627 set $S11, $P23 17628 goto __label_37 17629 __label_36: # else 17630 $P8.'emit'(__ARG_1, $S9) 17631 set $S11, $S9 17632 __label_37: # endif 17633 __label_34: # endif 17634 __label_32: # endif 17635 $P8.'annotate'(__ARG_1) 17636 $P21 = sformat(" if %0 == %1 goto %2", $S5, $S11, $S10) 17637 __ARG_1.'say'($P21) 17638 goto __label_28 17639 __label_29: # endfor 17640 __ARG_1.'emitgoto'($S4) 17641 self.'annotate'(__ARG_1) 17642 getattribute $P10, self, 'case_st' 17643 set $I2, $P10 17644 null $I3 17645 __label_40: # for condition 17646 ge $I3, $I2, __label_39 17647 $P21 = $P7[$I3] 17648 __ARG_1.'emitlabel'($P21, "case") 17649 set $P11, __ARG_1 17650 $P12 = $P10[$I3] 17651.const 'Sub' bindlast = "bindlast" 17652.const 'Sub' bindmethod = "bindmethod" 17653 set $P13, $P12 17654 $P21 = bindmethod("emit") 17655 $P14 = bindlast($P21, $P11) 17656 if_null $P13, __label_42 17657 iter $P25, $P13 17658 set $P25, 0 17659 __label_41: # for iteration 17660 unless $P25 goto __label_42 17661 shift $P15, $P25 17662 $P14($P15) 17663 goto __label_41 17664 __label_42: # endfor 17665 __label_38: # for iteration 17666 inc $I3 17667 goto __label_40 17668 __label_39: # for end 17669 __ARG_1.'emitlabel'($S4, "default") 17670 set $P16, __ARG_1 17671 getattribute $P17, self, 'default_st' 17672.const 'Sub' bindlast = "bindlast" 17673.const 'Sub' bindmethod = "bindmethod" 17674 set $P18, $P17 17675 $P21 = bindmethod("emit") 17676 $P19 = bindlast($P21, $P16) 17677 if_null $P18, __label_44 17678 iter $P26, $P18 17679 set $P26, 0 17680 __label_43: # for iteration 17681 unless $P26 goto __label_44 17682 shift $P20, $P26 17683 $P19($P20) 17684 goto __label_43 17685 __label_44: # endfor 17686 getattribute $P23, self, 'start' 17687 $P21 = self.'getbreaklabel'($P23) 17688 __ARG_1.'emitlabel'($P21, "switch end") 17689 17690.end # emit 17691 17692.sub Winxed_class_init :anon :load :init 17693 newclass $P0, [ 'Winxed'; 'Compiler'; 'SwitchStatement' ] 17694 get_class $P1, [ 'Winxed'; 'Compiler'; 'SwitchBaseStatement' ] 17695 addparent $P0, $P1 17696 addattribute $P0, 'condition' 17697.end 17698.namespace [ 'Winxed'; 'Compiler'; 'SwitchCaseStatement' ] 17699 17700.sub 'SwitchCaseStatement' :method 17701 .param pmc __ARG_1 17702 .param pmc __ARG_2 17703 .param pmc __ARG_3 17704 self.'SwitchBaseStatement'(__ARG_1, __ARG_3) 17705 self.'parse_switchbody'(__ARG_2) 17706 17707.end # SwitchCaseStatement 17708 17709 17710.sub 'clone' :method 17711 .param pmc __ARG_1 17712 new $P1, [ 'Winxed'; 'Compiler'; 'SwitchCaseStatement' ] 17713 .tailcall self.'cloneswitchto'($P1, __ARG_1) 17714 17715.end # clone 17716 17717 17718.sub 'optimize' :method 17719 self.'optimize_cases'() 17720 .return(self) 17721 17722.end # optimize 17723 17724 17725.sub 'emit' :method 17726 .param pmc __ARG_1 17727 self.'genbreaklabel'() 17728 $P14 = self.'genlabel'() 17729 null $S1 17730 if_null $P14, __label_1 17731 set $S1, $P14 17732 __label_1: 17733 new $P1, ['ResizableStringArray'] 17734 $P14 = __ARG_1.'getDebug'() 17735 if_null $P14, __label_2 17736 unless $P14 goto __label_2 17737 __ARG_1.'comment'("switch-case") 17738 __label_2: # endif 17739 null $S2 17740 getattribute $P14, self, 'case_value' 17741 if_null $P14, __label_4 17742 iter $P15, $P14 17743 set $P15, 0 17744 __label_3: # for iteration 17745 unless $P15 goto __label_4 17746 shift $P2, $P15 17747 $P16 = self.'genlabel'() 17748 null $S3 17749 if_null $P16, __label_5 17750 set $S3, $P16 17751 __label_5: 17752 push $P1, $S3 17753 isa $I3, $P2, [ 'Winxed'; 'Compiler'; 'ConditionFriendlyIf' ] 17754 unless $I3 goto __label_6 17755 $P2.'emit_if'(__ARG_1, $S3) 17756 goto __label_7 17757 __label_6: # else 17758 null $S4 17759 $P14 = $P2.'checkresult'() 17760 set $S5, $P14 17761 ne $S5, "I", __label_8 17762 $P16 = $P2.'emit_get'(__ARG_1) 17763 set $S4, $P16 17764 goto __label_9 17765 __label_8: # else 17766 $P17 = $P2.'emit_get'(__ARG_1) 17767 set $S4, $P17 17768 unless_null $S2, __label_10 17769 $P14 = self.'tempreg'("I") 17770 set $S2, $P14 17771 __label_10: # endif 17772 __ARG_1.'emitset'($S2, $S4) 17773 set $S4, $S2 17774 __label_9: # endif 17775 __ARG_1.'emitif'($S4, $S3) 17776 __label_7: # endif 17777 goto __label_3 17778 __label_4: # endfor 17779 __ARG_1.'emitgoto'($S1) 17780 self.'annotate'(__ARG_1) 17781 getattribute $P3, self, 'case_st' 17782 set $I1, $P3 17783 null $I2 17784 __label_13: # for condition 17785 ge $I2, $I1, __label_12 17786 $P14 = $P1[$I2] 17787 __ARG_1.'emitlabel'($P14, "case") 17788 set $P4, __ARG_1 17789 $P5 = $P3[$I2] 17790.const 'Sub' bindlast = "bindlast" 17791.const 'Sub' bindmethod = "bindmethod" 17792 set $P6, $P5 17793 $P14 = bindmethod("emit") 17794 $P7 = bindlast($P14, $P4) 17795 if_null $P6, __label_15 17796 iter $P18, $P6 17797 set $P18, 0 17798 __label_14: # for iteration 17799 unless $P18 goto __label_15 17800 shift $P8, $P18 17801 $P7($P8) 17802 goto __label_14 17803 __label_15: # endfor 17804 __label_11: # for iteration 17805 inc $I2 17806 goto __label_13 17807 __label_12: # for end 17808 __ARG_1.'emitlabel'($S1, "default") 17809 set $P9, __ARG_1 17810 getattribute $P10, self, 'default_st' 17811.const 'Sub' bindlast = "bindlast" 17812.const 'Sub' bindmethod = "bindmethod" 17813 set $P11, $P10 17814 $P14 = bindmethod("emit") 17815 $P12 = bindlast($P14, $P9) 17816 if_null $P11, __label_17 17817 iter $P19, $P11 17818 set $P19, 0 17819 __label_16: # for iteration 17820 unless $P19 goto __label_17 17821 shift $P13, $P19 17822 $P12($P13) 17823 goto __label_16 17824 __label_17: # endfor 17825 getattribute $P16, self, 'start' 17826 $P14 = self.'getbreaklabel'($P16) 17827 __ARG_1.'emitlabel'($P14, "switch end") 17828 17829.end # emit 17830 17831.sub Winxed_class_init :anon :load :init 17832 newclass $P0, [ 'Winxed'; 'Compiler'; 'SwitchCaseStatement' ] 17833 get_class $P1, [ 'Winxed'; 'Compiler'; 'SwitchBaseStatement' ] 17834 addparent $P0, $P1 17835.end 17836.namespace [ 'Winxed'; 'Compiler' ] 17837 17838.sub 'parseSwitch' :subid('WSubId_90') 17839 .param pmc __ARG_1 17840 .param pmc __ARG_2 17841 .param pmc __ARG_3 17842.const 'Sub' Expected = "Expected" 17843 $P1 = __ARG_2.'get'() 17844 $P2 = $P1.'isop'("(") 17845 if_null $P2, __label_1 17846 unless $P2 goto __label_1 17847 new $P4, [ 'Winxed'; 'Compiler'; 'SwitchStatement' ] 17848 $P4.'SwitchStatement'(__ARG_1, __ARG_2, __ARG_3) 17849 set $P3, $P4 17850 .return($P3) 17851 __label_1: # endif 17852 $P2 = $P1.'isop'("{") 17853 if_null $P2, __label_2 17854 unless $P2 goto __label_2 17855 new $P4, [ 'Winxed'; 'Compiler'; 'SwitchCaseStatement' ] 17856 $P4.'SwitchCaseStatement'(__ARG_1, __ARG_2, __ARG_3) 17857 set $P3, $P4 17858 .return($P3) 17859 __label_2: # endif 17860 Expected("'(' in switch", $P1) 17861 17862.end # parseSwitch 17863 17864.namespace [ 'Winxed'; 'Compiler'; 'ForStatement' ] 17865 17866.sub 'ForStatement' :method 17867 .param pmc __ARG_1 17868 .param pmc __ARG_2 17869 .param pmc __ARG_3 17870.const 'Sub' WSubId_134 = "WSubId_134" 17871.const 'Sub' ExpectOp = "ExpectOp" 17872.const 'Sub' parseListOrEmpty = "parseListOrEmpty" 17873.const 'Sub' WSubId_75 = "WSubId_75" 17874 self.'BlockStatement'(__ARG_1, __ARG_3) 17875 $P1 = __ARG_2.'get'() 17876 $P2 = $P1.'isop'(";") 17877 if $P2 goto __label_1 17878 __ARG_2.'unget'($P1) 17879 $P3 = WSubId_134(__ARG_2, self) 17880 setattribute self, 'initializer', $P3 17881 __label_1: # endif 17882 $P1 = __ARG_2.'get'() 17883 $P2 = $P1.'isop'(";") 17884 if $P2 goto __label_2 17885 __ARG_2.'unget'($P1) 17886 self.'parseconditionshort'(__ARG_2) 17887 ExpectOp(";", __ARG_2) 17888 __label_2: # endif 17889 $P3 = parseListOrEmpty(__ARG_2, self, WSubId_75, ")") 17890 setattribute self, 'iteration', $P3 17891 self.'parsebody'(__ARG_2) 17892 17893.end # ForStatement 17894 17895 17896.sub 'clone' :method 17897 .param pmc __ARG_1 17898 new $P1, [ 'Winxed'; 'Compiler'; 'ForStatement' ] 17899 getattribute $P8, self, 'start' 17900 $P1.'BlockStatement'($P8, __ARG_1) 17901 getattribute $P8, self, 'initializer' 17902 if_null $P8, __label_1 17903 getattribute $P11, self, 'initializer' 17904 $P10 = $P11.'clone'($P1) 17905 setattribute $P1, 'initializer', $P10 17906 __label_1: # endif 17907 getattribute $P8, self, 'condexpr' 17908 if_null $P8, __label_2 17909 getattribute $P11, self, 'condexpr' 17910 $P10 = $P11.'clone'($P1) 17911 setattribute $P1, 'condexpr', $P10 17912 __label_2: # endif 17913 getattribute $P8, self, 'iteration' 17914 if_null $P8, __label_3 17915 getattribute $P2, self, 'iteration' 17916 set $P3, $P1 17917.const 'Sub' bindlast = "bindlast" 17918.const 'Sub' bindmethod = "bindmethod" 17919 set $P4, $P2 17920 root_new $P5, ['parrot';'ResizablePMCArray'] 17921 $P10 = bindmethod("clone") 17922 $P6 = bindlast($P10, $P3) 17923 if_null $P4, __label_5 17924 iter $P13, $P4 17925 set $P13, 0 17926 __label_4: # for iteration 17927 unless $P13 goto __label_5 17928 shift $P7, $P13 17929 $P11 = $P6($P7) 17930 push $P5, $P11 17931 goto __label_4 17932 __label_5: # endfor 17933 set $P12, $P5 17934 set $P8, $P12 17935 setattribute $P1, 'iteration', $P8 17936 __label_3: # endif 17937 getattribute $P10, self, 'body' 17938 $P9 = $P10.'clone'($P1) 17939 setattribute $P1, 'body', $P9 17940 .return($P1) 17941 17942.end # clone 17943 17944 17945.sub 'optimize' :method 17946 getattribute $P1, self, 'initializer' 17947 if_null $P1, __label_1 17948 $P1 = $P1.'optimize'() 17949 setattribute self, 'initializer', $P1 17950 __label_1: # endif 17951 getattribute $P3, self, 'condexpr' 17952 if_null $P3, __label_2 17953 self.'optimize_condition'() 17954 $P3 = self.'getvalue'() 17955 set $I3, $P3 17956 ne $I3, 2, __label_3 17957 if_null $P1, __label_4 17958 .return($P1) 17959 goto __label_5 17960 __label_4: # else 17961 new $P4, [ 'Winxed'; 'Compiler'; 'EmptyStatement' ] 17962 .return($P4) 17963 __label_5: # endif 17964 __label_3: # endif 17965 __label_2: # endif 17966 getattribute $P2, self, 'iteration' 17967 if_null $P2, __label_7 17968 elements $I1, $P2 17969 goto __label_6 17970 __label_7: 17971 null $I1 17972 __label_6: 17973 null $I2 17974 __label_10: # for condition 17975 ge $I2, $I1, __label_9 17976 $P4 = $P2[$I2] 17977 $P3 = $P4.'optimize'() 17978 $P2[$I2] = $P3 17979 __label_8: # for iteration 17980 inc $I2 17981 goto __label_10 17982 __label_9: # for end 17983 getattribute $P5, self, 'body' 17984 $P4 = $P5.'optimize'() 17985 setattribute self, 'body', $P4 17986 .return(self) 17987 17988.end # optimize 17989 17990 17991.sub 'emit' :method 17992 .param pmc __ARG_1 17993 getattribute $P1, self, 'iteration' 17994 isnull $I1, $P1 17995 not $I1 17996 getattribute $P3, self, 'initializer' 17997 unless_null $P3, __label_1 17998 getattribute $P4, self, 'condexpr' 17999 unless_null $P4, __label_1 18000 if $I1 goto __label_1 18001 self.'emit_infinite'(__ARG_1) 18002 .return() 18003 __label_1: # endif 18004 $P3 = __ARG_1.'getDebug'() 18005 if_null $P3, __label_2 18006 unless $P3 goto __label_2 18007 __ARG_1.'comment'("for loop") 18008 __label_2: # endif 18009 $P3 = self.'gencontinuelabel'() 18010 null $S1 18011 if_null $P3, __label_3 18012 set $S1, $P3 18013 __label_3: 18014 $P3 = self.'genbreaklabel'() 18015 null $S2 18016 if_null $P3, __label_4 18017 set $S2, $P3 18018 __label_4: 18019 unless $I1 goto __label_6 18020 $S3 = self.'genlabel'() 18021 goto __label_5 18022 __label_6: 18023 set $S3, $S1 18024 __label_5: 18025 getattribute $P3, self, 'initializer' 18026 if_null $P3, __label_7 18027 getattribute $P4, self, 'initializer' 18028 $P4.'emit'(__ARG_1) 18029 __label_7: # endif 18030 __ARG_1.'emitlabel'($S3, "for condition") 18031 getattribute $P3, self, 'condexpr' 18032 if_null $P3, __label_8 18033 self.'emit_else'(__ARG_1, $S2) 18034 __label_8: # endif 18035 getattribute $P3, self, 'body' 18036 $P3.'emit'(__ARG_1) 18037 unless $I1 goto __label_9 18038 __ARG_1.'emitlabel'($S1, "for iteration") 18039 if_null $P1, __label_11 18040 iter $P5, $P1 18041 set $P5, 0 18042 __label_10: # for iteration 18043 unless $P5 goto __label_11 18044 shift $P2, $P5 18045 $P2.'emit_void'(__ARG_1) 18046 goto __label_10 18047 __label_11: # endfor 18048 __label_9: # endif 18049 __ARG_1.'emitgoto'($S3) 18050 __ARG_1.'emitlabel'($S2, "for end") 18051 18052.end # emit 18053 18054.sub Winxed_class_init :anon :load :init 18055 newclass $P0, [ 'Winxed'; 'Compiler'; 'ForStatement' ] 18056 get_class $P1, [ 'Winxed'; 'Compiler'; 'LoopStatement' ] 18057 addparent $P0, $P1 18058 get_class $P2, [ 'Winxed'; 'Compiler'; 'BlockStatement' ] 18059 addparent $P0, $P2 18060 get_class $P3, [ 'Winxed'; 'Compiler'; 'ConditionalStatement' ] 18061 addparent $P0, $P3 18062 addattribute $P0, 'initializer' 18063 addattribute $P0, 'iteration' 18064.end 18065.namespace [ 'Winxed'; 'Compiler'; 'ForeachStatement' ] 18066 18067.sub 'ForeachStatement' :method 18068 .param pmc __ARG_1 18069 .param pmc __ARG_2 18070 .param pmc __ARG_3 18071 .param pmc __ARG_4 18072 .param string __ARG_5 18073.const 'Sub' WSubId_75 = "WSubId_75" 18074.const 'Sub' ExpectOp = "ExpectOp" 18075 self.'BlockStatement'(__ARG_1, __ARG_3) 18076 eq __ARG_5, "", __label_1 18077 box $P1, __ARG_5 18078 setattribute self, 'deftype', $P1 18079 __label_1: # endif 18080 setattribute self, 'varname', __ARG_4 18081 $P2 = WSubId_75(__ARG_2, self) 18082 setattribute self, 'container', $P2 18083 ExpectOp(")", __ARG_2) 18084 self.'parsebody'(__ARG_2) 18085 18086.end # ForeachStatement 18087 18088 18089.sub 'clone' :method 18090 .param pmc __ARG_1 18091 new $P1, [ 'Winxed'; 'Compiler'; 'ForeachStatement' ] 18092 getattribute $P4, self, 'start' 18093 $P1.'BlockStatement'($P4, __ARG_1) 18094 getattribute $P2, self, 'deftype' 18095 getattribute $P3, self, 'varname' 18096 setattribute $P1, 'deftype', $P2 18097 setattribute $P1, 'varname', $P3 18098 getattribute $P6, self, 'container' 18099 $P5 = $P6.'clone'($P1) 18100 setattribute $P1, 'container', $P5 18101 getattribute $P6, self, 'body' 18102 $P5 = $P6.'clone'($P1) 18103 setattribute $P1, 'body', $P5 18104 .return($P1) 18105 18106.end # clone 18107 18108 18109.sub 'optimize' :method 18110 getattribute $P1, self, 'deftype' 18111 if_null $P1, __label_1 18112 getattribute $P3, self, 'varname' 18113 self.'createvar'($P3, $P1) 18114 __label_1: # endif 18115 getattribute $P3, self, 'container' 18116 $P2 = $P3.'optimize'() 18117 $P3 = $P2.'isnull'() 18118 if $P3 goto __label_3 18119 $P3 = $P2.'isstringliteral'() 18120 unless $P3 goto __label_4 18121 $P4 = $P2.'getStringValue'() 18122 set $S1, $P4 18123 length $I2, $S1 18124 iseq $I1, $I2, 0 18125 box $P3, $I1 18126 __label_4: 18127 __label_3: 18128 if_null $P3, __label_2 18129 unless $P3 goto __label_2 18130 new $P5, [ 'Winxed'; 'Compiler'; 'EmptyStatement' ] 18131 .return($P5) 18132 __label_2: # endif 18133 setattribute self, 'container', $P2 18134 getattribute $P5, self, 'body' 18135 $P4 = $P5.'optimize'() 18136 setattribute self, 'body', $P4 18137 .return(self) 18138 18139.end # optimize 18140 18141 18142.sub 'emit' :method 18143 .param pmc __ARG_1 18144.const 'Sub' WSubId_102 = "WSubId_102" 18145 self.'annotate'(__ARG_1) 18146 null $S1 18147 getattribute $P3, self, 'container' 18148 $P2 = $P3.'checkresult'() 18149 set $S6, $P2 18150 ne $S6, "S", __label_1 18151 getattribute $P5, self, 'container' 18152 $P4 = $P5.'emit_get'(__ARG_1) 18153 null $S2 18154 if_null $P4, __label_3 18155 set $S2, $P4 18156 __label_3: 18157 $P2 = self.'tempreg'("P") 18158 set $S1, $P2 18159 __ARG_1.'emitbox'($S1, $S2) 18160 goto __label_2 18161 __label_1: # else 18162 getattribute $P3, self, 'container' 18163 $P2 = $P3.'emit_get'(__ARG_1) 18164 set $S1, $P2 18165 __label_2: # endif 18166 getattribute $P2, self, 'varname' 18167 $P1 = self.'getvar'($P2) 18168 unless_null $P1, __label_4 18169 getattribute $P2, self, 'varname' 18170 WSubId_102($P2, self) 18171 __label_4: # endif 18172 $P2 = self.'createreg'("P") 18173 null $S3 18174 if_null $P2, __label_5 18175 set $S3, $P2 18176 __label_5: 18177 $P2 = self.'gencontinuelabel'() 18178 null $S4 18179 if_null $P2, __label_6 18180 set $S4, $P2 18181 __label_6: 18182 $P2 = self.'genbreaklabel'() 18183 null $S5 18184 if_null $P2, __label_7 18185 set $S5, $P2 18186 __label_7: 18187 __ARG_1.'emitif_null'($S1, $S5) 18188 __ARG_1.'emitarg2'("iter", $S3, $S1) 18189 __ARG_1.'emitset'($S3, "0") 18190 __ARG_1.'emitlabel'($S4, "for iteration") 18191 __ARG_1.'emitunless'($S3, $S5) 18192 $P2 = $P1.'getreg'() 18193 __ARG_1.'emitarg2'("shift", $P2, $S3) 18194 getattribute $P2, self, 'body' 18195 $P2.'emit'(__ARG_1) 18196 __ARG_1.'emitgoto'($S4) 18197 __ARG_1.'emitlabel'($S5, "endfor") 18198 18199.end # emit 18200 18201.sub Winxed_class_init :anon :load :init 18202 newclass $P0, [ 'Winxed'; 'Compiler'; 'ForeachStatement' ] 18203 get_class $P1, [ 'Winxed'; 'Compiler'; 'LoopStatement' ] 18204 addparent $P0, $P1 18205 get_class $P2, [ 'Winxed'; 'Compiler'; 'BlockStatement' ] 18206 addparent $P0, $P2 18207 addattribute $P0, 'deftype' 18208 addattribute $P0, 'varname' 18209 addattribute $P0, 'container' 18210.end 18211.namespace [ 'Winxed'; 'Compiler' ] 18212 18213.sub 'parseFor' :subid('WSubId_91') 18214 .param pmc __ARG_1 18215 .param pmc __ARG_2 18216 .param pmc __ARG_3 18217.const 'Sub' ExpectOp = "ExpectOp" 18218.const 'Sub' WSubId_136 = "WSubId_136" 18219 ExpectOp("(", __ARG_2) 18220 $P1 = __ARG_2.'get'() 18221 $P4 = $P1.'isidentifier'() 18222 if_null $P4, __label_1 18223 unless $P4 goto __label_1 18224 $P2 = __ARG_2.'get'() 18225 $P4 = $P2.'isidentifier'() 18226 if_null $P4, __label_2 18227 unless $P4 goto __label_2 18228 $P5 = $P2.'iskeyword'("in") 18229 if_null $P5, __label_3 18230 unless $P5 goto __label_3 18231 new $P7, [ 'Winxed'; 'Compiler'; 'ForeachStatement' ] 18232 $P7.'ForeachStatement'(__ARG_1, __ARG_2, __ARG_3, $P1, "") 18233 set $P6, $P7 18234 .return($P6) 18235 goto __label_4 18236 __label_3: # else 18237 $P3 = __ARG_2.'get'() 18238 $P5 = $P1.'getidentifier'() 18239 $P4 = WSubId_136($P5) 18240 null $S1 18241 if_null $P4, __label_5 18242 set $S1, $P4 18243 __label_5: 18244 $P4 = $P3.'iskeyword'("in") 18245 unless $P4 goto __label_6 18246 eq $S1, "", __label_6 18247 new $P6, [ 'Winxed'; 'Compiler'; 'ForeachStatement' ] 18248 $P6.'ForeachStatement'(__ARG_1, __ARG_2, __ARG_3, $P2, $S1) 18249 set $P5, $P6 18250 .return($P5) 18251 __label_6: # endif 18252 __ARG_2.'unget'($P3) 18253 __label_4: # endif 18254 __label_2: # endif 18255 __ARG_2.'unget'($P2) 18256 __label_1: # endif 18257 __ARG_2.'unget'($P1) 18258 new $P5, [ 'Winxed'; 'Compiler'; 'ForStatement' ] 18259 $P5.'ForStatement'(__ARG_1, __ARG_2, __ARG_3) 18260 set $P4, $P5 18261 .return($P4) 18262 18263.end # parseFor 18264 18265.namespace [ 'Winxed'; 'Compiler'; 'ThrowStatement' ] 18266 18267.sub 'ThrowStatement' :method 18268 .param pmc __ARG_1 18269 .param pmc __ARG_2 18270 .param pmc __ARG_3 18271.const 'Sub' WSubId_75 = "WSubId_75" 18272 self.'Statement'(__ARG_1, __ARG_3) 18273 $P2 = WSubId_75(__ARG_2, self) 18274 setattribute self, 'excep', $P2 18275 18276.end # ThrowStatement 18277 18278 18279.sub 'clone' :method 18280 .param pmc __ARG_1 18281 new $P1, [ 'Winxed'; 'Compiler'; 'ThrowStatement' ] 18282 getattribute $P2, self, 'start' 18283 $P1.'Statement'($P2, __ARG_1) 18284 getattribute $P4, self, 'excep' 18285 $P3 = $P4.'clone'(__ARG_1) 18286 setattribute $P1, 'excep', $P3 18287 .return($P1) 18288 18289.end # clone 18290 18291 18292.sub 'optimize' :method 18293 getattribute $P3, self, 'excep' 18294 $P2 = $P3.'optimize'() 18295 setattribute self, 'excep', $P2 18296 .return(self) 18297 18298.end # optimize 18299 18300 18301.sub 'emit' :method 18302 .param pmc __ARG_1 18303.const 'Sub' sformat = "sformat" 18304.const 'Sub' SyntaxError = "SyntaxError" 18305 getattribute $P1, self, 'excep' 18306 $P2 = $P1.'emit_get'(__ARG_1) 18307 null $S1 18308 if_null $P2, __label_1 18309 set $S1, $P2 18310 __label_1: 18311 self.'annotate'(__ARG_1) 18312 $P2 = $P1.'checkresult'() 18313 set $S3, $P2 18314 if_null $S3, __label_2 18315 length $I1, $S3 18316 ne $I1, 1, __label_2 18317 ord $I1, $S3 18318 if $I1 == 80 goto __label_4 18319 if $I1 == 83 goto __label_5 18320 goto __label_2 18321 __label_4: # case 18322 goto __label_3 # break 18323 __label_5: # case 18324 set $S2, $S1 18325 $P3 = self.'tempreg'("P") 18326 set $S1, $P3 18327 $P4 = sformat(" root_new %0, ['parrot';'Exception']\n %0['message'] = %1\n", $S1, $S2) 18328 __ARG_1.'print'($P4) 18329 goto __label_3 # break 18330 __label_2: # default 18331 SyntaxError("Invalid throw argument", self) 18332 __label_3: # switch end 18333 __ARG_1.'emitarg1'("throw", $S1) 18334 18335.end # emit 18336 18337.sub Winxed_class_init :anon :load :init 18338 newclass $P0, [ 'Winxed'; 'Compiler'; 'ThrowStatement' ] 18339 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 18340 addparent $P0, $P1 18341 addattribute $P0, 'excep' 18342.end 18343.namespace [ 'Winxed'; 'Compiler'; 'TryModifierList' ] 18344 18345.sub 'TryModifierList' :method 18346 .param pmc __ARG_1 18347 .param pmc __ARG_2 18348 .param pmc __ARG_3 18349 setattribute self, 'start', __ARG_1 18350 self.'ModifierList'(__ARG_2, __ARG_3) 18351 18352.end # TryModifierList 18353 18354 18355.sub 'clone' :method 18356 .param pmc __ARG_1 18357 new $P1, [ 'Winxed'; 'Compiler'; 'TryModifierList' ] 18358 getattribute $P3, self, 'start' 18359 setattribute $P1, 'start', $P3 18360 $P3 = self.'clonemodifiers'(__ARG_1) 18361 setattribute $P1, 'list', $P3 18362 .return($P1) 18363 18364.end # clone 18365 18366 18367.sub 'allowtailcall' :method 18368 $P1 = self.'pick'("allowtailcall") 18369 isnull $I1, $P1 18370 not $I1 18371 .return($I1) 18372 18373.end # allowtailcall 18374 18375 18376.sub 'emitmodifiers' :method 18377 .param pmc __ARG_1 18378 .param string __ARG_2 18379.const 'Sub' SyntaxError = "SyntaxError" 18380.const 'Sub' sformat = "sformat" 18381 $P1 = self.'getlist'() 18382 if_null $P1, __label_2 18383 iter $P6, $P1 18384 set $P6, 0 18385 __label_1: # for iteration 18386 unless $P6 goto __label_2 18387 shift $P2, $P6 18388 $P7 = $P2.'getname'() 18389 null $S1 18390 if_null $P7, __label_3 18391 set $S1, $P7 18392 __label_3: 18393 $P7 = $P2.'numargs'() 18394 set $I1, $P7 18395 if $S1 == "min_severity" goto __label_6 18396 if $S1 == "max_severity" goto __label_7 18397 if $S1 == "handle_types" goto __label_8 18398 if $S1 == "handle_types_except" goto __label_9 18399 if $S1 == "allowtailcall" goto __label_10 18400 goto __label_4 18401 __label_6: # case 18402 __label_7: # case 18403 eq $I1, 1, __label_11 18404 SyntaxError("Wrong modifier args", self) 18405 __label_11: # endif 18406 $P3 = $P2.'getarg'(0) 18407 $P8 = $P3.'emit_get'(__ARG_1) 18408 $P7 = sformat(" %0.'%1'(%2)", __ARG_2, $S1, $P8) 18409 __ARG_1.'say'($P7) 18410 goto __label_5 # break 18411 __label_8: # case 18412 __label_9: # case 18413 new $P4, ['ResizableStringArray'] 18414 null $I2 18415 __label_14: # for condition 18416 ge $I2, $I1, __label_13 18417 $P5 = $P2.'getarg'($I2) 18418 $P7 = $P5.'emit_get'(__ARG_1) 18419 push $P4, $P7 18420 __label_12: # for iteration 18421 inc $I2 18422 goto __label_14 18423 __label_13: # for end 18424 join $S2, ", ", $P4 18425 $P7 = sformat(" %0.'%1'(%2)", __ARG_2, $S1, $S2) 18426 __ARG_1.'say'($P7) 18427 goto __label_5 # break 18428 __label_10: # case 18429 goto __label_5 # break 18430 __label_4: # default 18431 concat $S3, "Modifier '", $S1 18432 concat $S3, $S3, "' not valid for try" 18433 getattribute $P8, self, 'start' 18434 SyntaxError($S3, $P8) 18435 __label_5: # switch end 18436 goto __label_1 18437 __label_2: # endfor 18438 18439.end # emitmodifiers 18440 18441.sub Winxed_class_init :anon :load :init 18442 newclass $P0, [ 'Winxed'; 'Compiler'; 'TryModifierList' ] 18443 get_class $P1, [ 'Winxed'; 'Compiler'; 'ModifierList' ] 18444 addparent $P0, $P1 18445 addattribute $P0, 'start' 18446.end 18447.namespace [ 'Winxed'; 'Compiler'; 'TryStatement' ] 18448 18449.sub 'TryStatement' :method 18450 .param pmc __ARG_1 18451 .param pmc __ARG_2 18452 .param pmc __ARG_3 18453.const 'Sub' WSubId_134 = "WSubId_134" 18454.const 'Sub' WSubId_29 = "WSubId_29" 18455.const 'Sub' Expected = "Expected" 18456.const 'Sub' RequireIdentifier = "RequireIdentifier" 18457 self.'BlockStatement'(__ARG_1, __ARG_3) 18458 $P1 = __ARG_2.'get'() 18459 $P2 = $P1.'isop'("[") 18460 if_null $P2, __label_1 18461 unless $P2 goto __label_1 18462 new $P5, [ 'Winxed'; 'Compiler'; 'TryModifierList' ] 18463 $P5.'TryModifierList'($P1, __ARG_2, self) 18464 set $P4, $P5 18465 setattribute self, 'modifiers', $P4 18466 goto __label_2 18467 __label_1: # else 18468 __ARG_2.'unget'($P1) 18469 __label_2: # endif 18470 $P3 = WSubId_134(__ARG_2, self) 18471 setattribute self, 'stry', $P3 18472 $P1 = __ARG_2.'get'() 18473 $P2 = $P1.'iskeyword'("catch") 18474 if $P2 goto __label_3 18475 WSubId_29("catch", $P1) 18476 __label_3: # endif 18477 $P1 = __ARG_2.'get'() 18478 $P2 = $P1.'isop'("(") 18479 if $P2 goto __label_4 18480 Expected("'(' after 'catch'", $P1) 18481 __label_4: # endif 18482 $P1 = __ARG_2.'get'() 18483 $P2 = $P1.'isop'(")") 18484 if $P2 goto __label_5 18485 RequireIdentifier($P1) 18486 setattribute self, 'exname', $P1 18487 $P1 = __ARG_2.'get'() 18488 $P2 = $P1.'isop'(")") 18489 if $P2 goto __label_6 18490 Expected("')' in 'catch'", $P1) 18491 __label_6: # endif 18492 __label_5: # endif 18493 $P3 = WSubId_134(__ARG_2, self) 18494 setattribute self, 'scatch', $P3 18495 18496.end # TryStatement 18497 18498 18499.sub 'clone' :method 18500 .param pmc __ARG_1 18501 new $P1, [ 'Winxed'; 'Compiler'; 'TryStatement' ] 18502 getattribute $P2, self, 'start' 18503 $P1.'BlockStatement'($P2, __ARG_1) 18504 getattribute $P2, self, 'modifiers' 18505 if_null $P2, __label_1 18506 getattribute $P5, self, 'modifiers' 18507 $P4 = $P5.'clone'($P1) 18508 setattribute $P1, 'modifiers', $P4 18509 __label_1: # endif 18510 getattribute $P2, self, 'exname' 18511 if_null $P2, __label_2 18512 getattribute $P4, self, 'exname' 18513 setattribute $P1, 'exname', $P4 18514 __label_2: # endif 18515 getattribute $P4, self, 'stry' 18516 $P3 = $P4.'clone'($P1) 18517 setattribute $P1, 'stry', $P3 18518 getattribute $P4, self, 'scatch' 18519 $P3 = $P4.'clone'($P1) 18520 setattribute $P1, 'scatch', $P3 18521 .return($P1) 18522 18523.end # clone 18524 18525 18526.sub 'allowtailcall' :method 18527 getattribute $P1, self, 'modifiers' 18528 if_null $P1, __label_1 18529 getattribute $P2, self, 'modifiers' 18530 .tailcall $P2.'allowtailcall'() 18531 goto __label_2 18532 __label_1: # else 18533 .return(0) 18534 __label_2: # endif 18535 18536.end # allowtailcall 18537 18538 18539.sub 'optimize' :method 18540 getattribute $P1, self, 'modifiers' 18541 if_null $P1, __label_1 18542 getattribute $P2, self, 'modifiers' 18543 $P2.'optimize'() 18544 __label_1: # endif 18545 getattribute $P3, self, 'stry' 18546 $P2 = $P3.'optimize'() 18547 setattribute self, 'stry', $P2 18548 getattribute $P1, self, 'exname' 18549 if_null $P1, __label_2 18550 getattribute $P2, self, 'exname' 18551 self.'createvar'($P2, "P") 18552 __label_2: # endif 18553 getattribute $P3, self, 'scatch' 18554 $P2 = $P3.'optimize'() 18555 setattribute self, 'scatch', $P2 18556 .return(self) 18557 18558.end # optimize 18559 18560 18561.sub 'emit' :method 18562 .param pmc __ARG_1 18563.const 'Sub' sformat = "sformat" 18564 $P1 = self.'tempreg'("P") 18565 null $S1 18566 if_null $P1, __label_1 18567 set $S1, $P1 18568 __label_1: 18569 $P1 = self.'genlabel'() 18570 null $S2 18571 if_null $P1, __label_2 18572 set $S2, $P1 18573 __label_2: 18574 $P1 = self.'genlabel'() 18575 null $S3 18576 if_null $P1, __label_3 18577 set $S3, $P1 18578 __label_3: 18579 getattribute $P2, self, 'exname' 18580 if_null $P2, __label_5 18581 getattribute $P4, self, 'exname' 18582 $P3 = self.'getvar'($P4) 18583 $P1 = $P3.'getreg'() 18584 goto __label_4 18585 __label_5: 18586 $P5 = self.'tempreg'("P") 18587 set $P1, $P5 18588 __label_4: 18589 null $S4 18590 if_null $P1, __label_6 18591 set $S4, $P1 18592 __label_6: 18593 $P1 = __ARG_1.'getDebug'() 18594 set $I1, $P1 18595 self.'annotate'(__ARG_1) 18596 unless $I1 goto __label_7 18597 __ARG_1.'comment'("try: create handler") 18598 __label_7: # endif 18599 $P1 = sformat(" new %0, 'ExceptionHandler'\n set_label %0, %1\n", $S1, $S2) 18600 __ARG_1.'print'($P1) 18601 getattribute $P1, self, 'modifiers' 18602 if_null $P1, __label_8 18603 getattribute $P2, self, 'modifiers' 18604 $P2.'emitmodifiers'(__ARG_1, $S1) 18605 __label_8: # endif 18606 __ARG_1.'emitarg1'("push_eh", $S1) 18607 unless $I1 goto __label_9 18608 __ARG_1.'comment'("try: begin") 18609 __label_9: # endif 18610 getattribute $P1, self, 'stry' 18611 $P1.'emit'(__ARG_1) 18612 unless $I1 goto __label_10 18613 __ARG_1.'comment'("try: end") 18614 __label_10: # endif 18615 __ARG_1.'say'(" ", "pop_eh") 18616 self.'annotate'(__ARG_1) 18617 __ARG_1.'emitgoto'($S3) 18618 unless $I1 goto __label_11 18619 __ARG_1.'comment'("catch") 18620 __label_11: # endif 18621 __ARG_1.'emitlabel'($S2) 18622 __ARG_1.'say'(" ", ".get_results(", $S4, ")") 18623 __ARG_1.'emitarg1'("finalize", $S4) 18624 __ARG_1.'say'(" ", "pop_eh") 18625 getattribute $P1, self, 'scatch' 18626 $P1.'emit'(__ARG_1) 18627 unless $I1 goto __label_12 18628 __ARG_1.'comment'("catch end") 18629 __label_12: # endif 18630 __ARG_1.'emitlabel'($S3) 18631 18632.end # emit 18633 18634.sub Winxed_class_init :anon :load :init 18635 newclass $P0, [ 'Winxed'; 'Compiler'; 'TryStatement' ] 18636 get_class $P1, [ 'Winxed'; 'Compiler'; 'BlockStatement' ] 18637 addparent $P0, $P1 18638 addattribute $P0, 'stry' 18639 addattribute $P0, 'modifiers' 18640 addattribute $P0, 'exname' 18641 addattribute $P0, 'scatch' 18642.end 18643.namespace [ 'Winxed'; 'Compiler'; 'DeclarationModifierList' ] 18644 18645.sub 'DeclarationModifierList' :method 18646 .param pmc __ARG_1 18647 .param pmc __ARG_2 18648 self.'ModifierList'(__ARG_1, __ARG_2) 18649 18650.end # DeclarationModifierList 18651 18652 18653.sub 'clone' :method 18654 .param pmc __ARG_1 18655 new $P1, [ 'Winxed'; 'Compiler'; 'DeclarationModifierList' ] 18656 $P3 = self.'clonemodifiers'(__ARG_1) 18657 setattribute $P1, 'list', $P3 18658 .return($P1) 18659 18660.end # clone 18661 18662 18663.sub 'getlexicalname' :method 18664.const 'Sub' SyntaxError = "SyntaxError" 18665 $P1 = self.'pick'("lexical") 18666 if_null $P1, __label_1 18667 $P3 = $P1.'numargs'() 18668 set $I1, $P3 18669 if $I1 == 0 goto __label_4 18670 if $I1 == 1 goto __label_5 18671 goto __label_2 18672 __label_4: # case 18673 .return("") 18674 __label_5: # case 18675 $P2 = $P1.'getarg'(0) 18676 $P3 = $P2.'isstringliteral'() 18677 if $P3 goto __label_6 18678 SyntaxError("Invalid lexical", self) 18679 __label_6: # endif 18680 .tailcall $P2.'getPirString'() 18681 __label_2: # default 18682 SyntaxError("invalid arguments in modifier", $P1) 18683 __label_3: # switch end 18684 __label_1: # endif 18685 null $P3 18686 .return($P3) 18687 18688.end # getlexicalname 18689 18690.sub Winxed_class_init :anon :load :init 18691 newclass $P0, [ 'Winxed'; 'Compiler'; 'DeclarationModifierList' ] 18692 get_class $P1, [ 'Winxed'; 'Compiler'; 'ModifierList' ] 18693 addparent $P0, $P1 18694.end 18695.namespace [ 'Winxed'; 'Compiler'; 'DeclareItem' ] 18696 18697.sub 'DeclareItem' :method 18698 .param pmc __ARG_1 18699 .param pmc __ARG_2 18700 .param pmc __ARG_3 18701 .param string __ARG_4 18702 .param int __ARG_5 18703 self.'Statement'(__ARG_1, __ARG_2) 18704 setattribute self, 'name', __ARG_3 18705 box $P1, __ARG_4 18706 setattribute self, 'regtype', $P1 18707 box $P1, __ARG_5 18708 setattribute self, 'flags', $P1 18709 18710.end # DeclareItem 18711 18712 18713.sub 'parsemodifiers' :method 18714 .param pmc __ARG_1 18715 .param pmc __ARG_2 18716.const 'Sub' ExpectOp = "ExpectOp" 18717 ExpectOp("[", __ARG_2) 18718 new $P3, [ 'Winxed'; 'Compiler'; 'DeclarationModifierList' ] 18719 getattribute $P4, self, 'owner' 18720 $P3.'DeclarationModifierList'(__ARG_2, $P4) 18721 set $P2, $P3 18722 setattribute self, 'modifiers', $P2 18723 18724.end # parsemodifiers 18725 18726 18727.sub 'optimizemodifiers' :method 18728 getattribute $P4, self, 'name' 18729 getattribute $P5, self, 'regtype' 18730 getattribute $P6, self, 'flags' 18731 $P1 = self.'createvar'($P4, $P5, $P6) 18732 $P5 = $P1.'getreg'() 18733 setattribute self, 'reg', $P5 18734 getattribute $P2, self, 'modifiers' 18735 if_null $P2, __label_1 18736 $P2.'optimize'() 18737 $P4 = $P2.'getlexicalname'() 18738 null $S1 18739 if_null $P4, __label_2 18740 set $S1, $P4 18741 __label_2: 18742 if_null $S1, __label_3 18743 ne $S1, "", __label_4 18744 getattribute $P4, self, 'name' 18745 set $S1, $P4 18746 __label_4: # endif 18747 getattribute $P4, self, 'name' 18748 $P3 = self.'getvar'($P4) 18749 $P3.'createlex'($S1) 18750 __label_3: # endif 18751 __label_1: # endif 18752 18753.end # optimizemodifiers 18754 18755.sub Winxed_class_init :anon :load :init 18756 newclass $P0, [ 'Winxed'; 'Compiler'; 'DeclareItem' ] 18757 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 18758 addparent $P0, $P1 18759 addattribute $P0, 'name' 18760 addattribute $P0, 'regtype' 18761 addattribute $P0, 'reg' 18762 addattribute $P0, 'modifiers' 18763 addattribute $P0, 'flags' 18764.end 18765.namespace [ 'Winxed'; 'Compiler'; 'VarBaseStatement' ] 18766 18767.sub 'initvarbase' :method 18768 .param pmc __ARG_1 18769 .param pmc __ARG_2 18770 .param pmc __ARG_3 18771 .param int __ARG_4 :optional 18772 self.'DeclareItem'(__ARG_1, __ARG_2, __ARG_3, "P", __ARG_4) 18773 18774.end # initvarbase 18775 18776 18777.sub 'clonevarbase' :method 18778 .param pmc __ARG_1 18779 .param pmc __ARG_2 18780 getattribute $P1, __ARG_1, 'start' 18781 getattribute $P2, __ARG_1, 'name' 18782 getattribute $P3, __ARG_1, 'flags' 18783 self.'DeclareItem'($P1, __ARG_2, $P2, "P", $P3) 18784 18785.end # clonevarbase 18786 18787.sub Winxed_class_init :anon :load :init 18788 newclass $P0, [ 'Winxed'; 'Compiler'; 'VarBaseStatement' ] 18789 get_class $P1, [ 'Winxed'; 'Compiler'; 'DeclareItem' ] 18790 addparent $P0, $P1 18791.end 18792.namespace [ 'Winxed'; 'Compiler'; 'DeclareBase' ] 18793 18794.sub 'DeclareBase' :method 18795 .param pmc __ARG_1 18796 .param pmc __ARG_2 18797 .param pmc __ARG_3 18798 .param string __ARG_4 18799 .param string __ARG_5 18800 self.'DeclareItem'(__ARG_1, __ARG_2, __ARG_3, __ARG_5, 0) 18801 box $P1, __ARG_4 18802 setattribute self, 'basetype', $P1 18803 18804.end # DeclareBase 18805 18806.sub Winxed_class_init :anon :load :init 18807 newclass $P0, [ 'Winxed'; 'Compiler'; 'DeclareBase' ] 18808 get_class $P1, [ 'Winxed'; 'Compiler'; 'DeclareItem' ] 18809 addparent $P0, $P1 18810 addattribute $P0, 'basetype' 18811.end 18812.namespace [ 'Winxed'; 'Compiler'; 'DeclareSingleStatement' ] 18813 18814.sub 'DeclareSingleStatement' :method 18815 .param pmc __ARG_1 18816 .param pmc __ARG_2 18817 .param pmc __ARG_3 18818 .param string __ARG_4 18819 .param pmc __ARG_5 18820.const 'Sub' WSubId_75 = "WSubId_75" 18821 self.'DeclareBase'(__ARG_1, __ARG_2, __ARG_3, __ARG_4, __ARG_4) 18822 $P1 = __ARG_5.'get'() 18823 $P2 = $P1.'isop'(":") 18824 if_null $P2, __label_1 18825 unless $P2 goto __label_1 18826 self.'parsemodifiers'($P1, __ARG_5) 18827 $P1 = __ARG_5.'get'() 18828 __label_1: # endif 18829 $P2 = $P1.'isop'("=") 18830 if_null $P2, __label_2 18831 unless $P2 goto __label_2 18832 $P4 = WSubId_75(__ARG_5, self) 18833 setattribute self, 'init', $P4 18834 goto __label_3 18835 __label_2: # else 18836 __ARG_5.'unget'($P1) 18837 __label_3: # endif 18838 18839.end # DeclareSingleStatement 18840 18841 18842.sub 'clonedeclare' :method 18843 .param pmc __ARG_1 18844 .param pmc __ARG_2 18845 getattribute $P1, self, 'start' 18846 getattribute $P2, self, 'name' 18847 getattribute $P3, self, 'basetype' 18848 getattribute $P4, self, 'regtype' 18849 __ARG_1.'DeclareBase'($P1, __ARG_2, $P2, $P3, $P4) 18850 getattribute $P1, self, 'init' 18851 if_null $P1, __label_1 18852 getattribute $P4, self, 'init' 18853 $P3 = $P4.'clone'(__ARG_2) 18854 setattribute __ARG_1, 'init', $P3 18855 __label_1: # endif 18856 .return(__ARG_1) 18857 18858.end # clonedeclare 18859 18860 18861.sub 'optimize' :method 18862 self.'optimizemodifiers'() 18863 getattribute $P1, self, 'init' 18864 if_null $P1, __label_1 18865 $P3 = $P1.'optimize'() 18866 setattribute self, 'init', $P3 18867 __label_1: # endif 18868 .return(self) 18869 18870.end # optimize 18871 18872 18873.sub 'emit' :method 18874 .param pmc __ARG_1 18875.const 'Sub' InternalError = "InternalError" 18876.const 'Sub' SyntaxError = "SyntaxError" 18877 self.'annotate'(__ARG_1) 18878 getattribute $P5, self, 'name' 18879 null $S1 18880 if_null $P5, __label_1 18881 set $S1, $P5 18882 __label_1: 18883 getattribute $P5, self, 'reg' 18884 null $S2 18885 if_null $P5, __label_2 18886 set $S2, $P5 18887 __label_2: 18888 null $S3 18889 getattribute $P5, self, 'basetype' 18890 null $S4 18891 if_null $P5, __label_3 18892 set $S4, $P5 18893 __label_3: 18894 getattribute $P1, self, 'init' 18895 $P5 = __ARG_1.'getDebug'() 18896 if_null $P5, __label_4 18897 unless $P5 goto __label_4 18898 __ARG_1.'comment'($S1, ": ", $S2) 18899 __label_4: # endif 18900 isnull $I2, $P1 18901 box $P5, $I2 18902 if $P5 goto __label_7 18903 $P5 = $P1.'isnull'() 18904 __label_7: 18905 if_null $P5, __label_5 18906 unless $P5 goto __label_5 18907 __ARG_1.'emitnull'($S2) 18908 goto __label_6 18909 __label_5: # else 18910 $P6 = $P1.'checkresult'() 18911 null $S5 18912 if_null $P6, __label_8 18913 set $S5, $P6 18914 __label_8: 18915 ne $S5, $S4, __label_9 18916 $P1.'emit_init'(__ARG_1, $S2) 18917 goto __label_10 18918 __label_9: # else 18919 isa $I2, $P1, [ 'Winxed'; 'Compiler'; 'IndexExpr' ] 18920 unless $I2 goto __label_11 18921 $P1.'emit'(__ARG_1, $S2) 18922 goto __label_12 18923 __label_11: # else 18924 $P5 = $P1.'isliteral'() 18925 if_null $P5, __label_13 18926 unless $P5 goto __label_13 18927 if_null $S4, __label_15 18928 length $I2, $S4 18929 ne $I2, 1, __label_15 18930 ord $I2, $S4 18931 if $I2 == 73 goto __label_17 18932 if $I2 == 78 goto __label_18 18933 if $I2 == 83 goto __label_19 18934 goto __label_15 18935 __label_17: # case 18936 set $P2, $P1 18937 $P5 = $P2.'getIntegerValue'() 18938 set $I1, $P5 18939 set $I3, $I1 18940 set $S3, $I3 18941 __ARG_1.'emitset'($S2, $S3) 18942 goto __label_16 # break 18943 __label_18: # case 18944 set $P3, $P1 18945 $P5 = $P3.'getFloatValue'() 18946 set $N1, $P5 18947 set $N2, $N1 18948 set $S3, $N2 18949 __ARG_1.'emitset'($S2, $S3) 18950 goto __label_16 # break 18951 __label_19: # case 18952 set $P4, $P1 18953 $P5 = $P4.'getStringValue'() 18954 null $S6 18955 if_null $P5, __label_20 18956 set $S6, $P5 18957 __label_20: 18958 set $S3, $S6 18959 __ARG_1.'emitset'($S2, $S3) 18960 goto __label_16 # break 18961 __label_15: # default 18962 InternalError("Wrong type", self) 18963 __label_16: # switch end 18964 goto __label_14 18965 __label_13: # else 18966 if_null $S5, __label_21 18967 length $I2, $S5 18968 ne $I2, 1, __label_21 18969 ord $I2, $S5 18970 if $I2 == 118 goto __label_23 18971 goto __label_21 18972 __label_23: # case 18973 SyntaxError("Invalid initialization from void value", self) 18974 __label_21: # default 18975 $P5 = $P1.'emit_get'(__ARG_1) 18976 set $S3, $P5 18977 __label_22: # switch end 18978 ne $S4, "S", __label_24 18979 ne $S5, "P", __label_24 18980 $P5 = self.'genlabel'() 18981 null $S7 18982 if_null $P5, __label_26 18983 set $S7, $P5 18984 __label_26: 18985 __ARG_1.'emitnull'($S2) 18986 __ARG_1.'emitif_null'($S3, $S7) 18987 __ARG_1.'emitset'($S2, $S3) 18988 __ARG_1.'emitlabel'($S7) 18989 goto __label_25 18990 __label_24: # else 18991 __ARG_1.'emitset'($S2, $S3) 18992 __label_25: # endif 18993 __label_14: # endif 18994 __label_12: # endif 18995 __label_10: # endif 18996 __label_6: # endif 18997 18998.end # emit 18999 19000.sub Winxed_class_init :anon :load :init 19001 newclass $P0, [ 'Winxed'; 'Compiler'; 'DeclareSingleStatement' ] 19002 get_class $P1, [ 'Winxed'; 'Compiler'; 'DeclareBase' ] 19003 addparent $P0, $P1 19004 addattribute $P0, 'init' 19005.end 19006.namespace [ 'Winxed'; 'Compiler'; 'DeclareArrayStatement' ] 19007 19008.sub 'DeclareArrayStatement' :method 19009 .param pmc __ARG_1 19010 .param pmc __ARG_2 19011 .param pmc __ARG_3 19012 .param string __ARG_4 19013 .param string __ARG_5 19014 .param pmc __ARG_6 19015.const 'Sub' WSubId_75 = "WSubId_75" 19016.const 'Sub' ExpectOp = "ExpectOp" 19017.const 'Sub' Expected = "Expected" 19018.const 'Sub' parseListOrEmpty = "parseListOrEmpty" 19019 self.'DeclareBase'(__ARG_1, __ARG_2, __ARG_3, __ARG_4, "P") 19020 box $P2, __ARG_5 19021 setattribute self, 'arraytype', $P2 19022 $P1 = __ARG_6.'get'() 19023 $P2 = $P1.'isop'("]") 19024 if $P2 goto __label_1 19025 __ARG_6.'unget'($P1) 19026 $P3 = WSubId_75(__ARG_6, self) 19027 setattribute self, 'size', $P3 19028 ExpectOp("]", __ARG_6) 19029 __label_1: # endif 19030 $P1 = __ARG_6.'get'() 19031 $P2 = $P1.'isop'(":") 19032 if_null $P2, __label_2 19033 unless $P2 goto __label_2 19034 self.'parsemodifiers'($P1, __ARG_6) 19035 $P1 = __ARG_6.'get'() 19036 __label_2: # endif 19037 $P2 = $P1.'isop'("=") 19038 if_null $P2, __label_3 19039 unless $P2 goto __label_3 19040 $P1 = __ARG_6.'get'() 19041 $P2 = $P1.'isop'("[") 19042 if $P2 goto __label_5 19043 Expected("array initializer", $P1) 19044 __label_5: # endif 19045 $P3 = parseListOrEmpty(__ARG_6, self, WSubId_75, "]") 19046 setattribute self, 'initarray', $P3 19047 goto __label_4 19048 __label_3: # else 19049 __ARG_6.'unget'($P1) 19050 __label_4: # endif 19051 19052.end # DeclareArrayStatement 19053 19054 19055.sub 'clonedeclare' :method 19056 .param pmc __ARG_1 19057 .param pmc __ARG_2 19058 getattribute $P7, self, 'start' 19059 getattribute $P8, self, 'name' 19060 getattribute $P9, self, 'basetype' 19061 __ARG_1.'DeclareBase'($P7, __ARG_2, $P8, $P9, "P") 19062 getattribute $P8, self, 'arraytype' 19063 setattribute __ARG_1, 'arraytype', $P8 19064 getattribute $P7, self, 'size' 19065 if_null $P7, __label_1 19066 unless $P7 goto __label_1 19067 getattribute $P10, self, 'size' 19068 $P9 = $P10.'clone'(__ARG_1) 19069 setattribute __ARG_1, 'size', $P9 19070 __label_1: # endif 19071 getattribute $P7, self, 'initarray' 19072 if_null $P7, __label_2 19073 getattribute $P1, self, 'initarray' 19074 set $P2, __ARG_2 19075.const 'Sub' bindlast = "bindlast" 19076.const 'Sub' bindmethod = "bindmethod" 19077 set $P3, $P1 19078 root_new $P4, ['parrot';'ResizablePMCArray'] 19079 $P9 = bindmethod("clone") 19080 $P5 = bindlast($P9, $P2) 19081 if_null $P3, __label_4 19082 iter $P12, $P3 19083 set $P12, 0 19084 __label_3: # for iteration 19085 unless $P12 goto __label_4 19086 shift $P6, $P12 19087 $P10 = $P5($P6) 19088 push $P4, $P10 19089 goto __label_3 19090 __label_4: # endfor 19091 set $P11, $P4 19092 set $P7, $P11 19093 setattribute __ARG_1, 'initarray', $P7 19094 __label_2: # endif 19095 .return(__ARG_1) 19096 19097.end # clonedeclare 19098 19099 19100.sub 'optimize' :method 19101 self.'optimizemodifiers'() 19102 getattribute $P2, self, 'size' 19103 if_null $P2, __label_1 19104 getattribute $P5, self, 'size' 19105 $P4 = $P5.'optimize'() 19106 setattribute self, 'size', $P4 19107 __label_1: # endif 19108 getattribute $P1, self, 'initarray' 19109 if_null $P1, __label_3 19110 elements $I1, $P1 19111 goto __label_2 19112 __label_3: 19113 null $I1 19114 __label_2: 19115 null $I2 19116 __label_6: # for condition 19117 ge $I2, $I1, __label_5 19118 $P3 = $P1[$I2] 19119 $P2 = $P3.'optimize'() 19120 $P1[$I2] = $P2 19121 __label_4: # for iteration 19122 inc $I2 19123 goto __label_6 19124 __label_5: # for end 19125 .return(self) 19126 19127.end # optimize 19128 19129 19130.sub 'emit' :method 19131 .param pmc __ARG_1 19132.const 'Sub' sformat = "sformat" 19133 self.'annotate'(__ARG_1) 19134 getattribute $P6, self, 'reg' 19135 null $S1 19136 if_null $P6, __label_1 19137 set $S1, $P6 19138 __label_1: 19139 getattribute $P1, self, 'size' 19140 getattribute $P2, self, 'initarray' 19141 getattribute $P3, self, 'basetype' 19142 getattribute $P4, self, 'arraytype' 19143 if_null $P1, __label_2 19144 $P7 = $P1.'emit_get'(__ARG_1) 19145 $P6 = sformat(" new %0, ['Fixed%1Array'], %2", $S1, $P4, $P7) 19146 __ARG_1.'say'($P6) 19147 goto __label_3 19148 __label_2: # else 19149 $P6 = sformat(" new %0, ['Resizable%1Array']", $S1, $P4) 19150 __ARG_1.'say'($P6) 19151 __label_3: # endif 19152 if_null $P2, __label_4 19153 $P6 = self.'tempreg'($P3) 19154 null $S2 19155 if_null $P6, __label_5 19156 set $S2, $P6 19157 __label_5: 19158 elements $I1, $P2 19159 unless_null $P1, __label_6 19160 unless $I1 goto __label_7 19161 __ARG_1.'emitset'($S1, $I1) 19162 __label_7: # endif 19163 __label_6: # endif 19164 null $I2 19165 if_null $P2, __label_9 19166 iter $P8, $P2 19167 set $P8, 0 19168 __label_8: # for iteration 19169 unless $P8 goto __label_9 19170 shift $P5, $P8 19171 null $S3 19172 $P6 = $P5.'isliteral'() 19173 if_null $P6, __label_10 19174 unless $P6 goto __label_10 19175 set $S5, $P3 19176 if_null $S5, __label_12 19177 length $I3, $S5 19178 ne $I3, 1, __label_12 19179 ord $I3, $S5 19180 if $I3 == 73 goto __label_14 19181 if $I3 == 78 goto __label_15 19182 if $I3 == 83 goto __label_16 19183 goto __label_12 19184 __label_14: # case 19185 $P7 = $P5.'getIntegerValue'() 19186 set $S3, $P7 19187 goto __label_13 # break 19188 __label_15: # case 19189 $P9 = $P5.'getFloatValue'() 19190 set $S3, $P9 19191 goto __label_13 # break 19192 __label_16: # case 19193 $P10 = $P5.'isstringliteral'() 19194 if_null $P10, __label_17 19195 unless $P10 goto __label_17 19196 $P11 = $P5.'getPirString'() 19197 set $S3, $P11 19198 goto __label_18 19199 __label_17: # else 19200 $P12 = $P5.'getStringValue'() 19201 set $S4, $P12 19202 concat $S6, "\"", $S4 19203 concat $S6, $S6, "\"" 19204 set $S3, $S6 19205 __label_18: # endif 19206 goto __label_13 # break 19207 __label_12: # default 19208 __label_13: # switch end 19209 goto __label_11 19210 __label_10: # else 19211 $P5.'emit'(__ARG_1, $S2) 19212 set $S3, $S2 19213 __label_11: # endif 19214 $P6 = sformat(" %0[%1] = %2", $S1, $I2, $S3) 19215 __ARG_1.'say'($P6) 19216 inc $I2 19217 goto __label_8 19218 __label_9: # endfor 19219 __label_4: # endif 19220 19221.end # emit 19222 19223.sub Winxed_class_init :anon :load :init 19224 newclass $P0, [ 'Winxed'; 'Compiler'; 'DeclareArrayStatement' ] 19225 get_class $P1, [ 'Winxed'; 'Compiler'; 'DeclareBase' ] 19226 addparent $P0, $P1 19227 addattribute $P0, 'size' 19228 addattribute $P0, 'initarray' 19229 addattribute $P0, 'arraytype' 19230.end 19231.namespace [ 'Winxed'; 'Compiler' ] 19232 19233.sub 'parseDeclareHelper' :subid('WSubId_137') 19234 .param pmc __ARG_1 19235 .param pmc __ARG_2 19236 .param pmc __ARG_3 19237 .param pmc __ARG_4 19238 .param pmc __ARG_5 19239.const 'Sub' RequireIdentifier = "RequireIdentifier" 19240.const 'Sub' bindlast1 = "bindlast1" 19241 null $P1 19242 null $P2 19243 __label_1: # do 19244 $P3 = __ARG_4.'get'() 19245 RequireIdentifier($P3) 19246 $P4 = __ARG_4.'get'() 19247 null $P5 19248 $P8 = $P4.'isop'("[") 19249 if_null $P8, __label_4 19250 unless $P8 goto __label_4 19251 $P5 = __ARG_2(__ARG_3, __ARG_5, __ARG_4, $P3) 19252 goto __label_5 19253 __label_4: # else 19254 __ARG_4.'unget'($P4) 19255 $P5 = __ARG_1(__ARG_3, __ARG_5, $P3, __ARG_4) 19256 __label_5: # endif 19257 set $P6, $P2 19258 set $P7, $P5 19259 if_null $P6, __label_8 19260 isa $I1, $P6, [ 'Winxed'; 'Compiler'; 'MultiStatement' ] 19261 if $I1 goto __label_9 19262 goto __label_7 19263 __label_8: # case 19264 set $P2, $P7 19265 goto __label_10 19266 __label_9: # case 19267 $P2 = $P6.'push'($P7) 19268 goto __label_10 19269 __label_7: # default 19270 new $P8, [ 'Winxed'; 'Compiler'; 'MultiStatement' ] 19271 $P8.'MultiStatement'($P6, $P7) 19272 set $P2, $P8 19273 goto __label_10 19274 __label_6: # switch end 19275 __label_10: 19276 $P1 = __ARG_4.'get'() 19277 __label_3: # continue 19278 $P8 = $P1.'isop'(",") 19279 if_null $P8, __label_2 19280 if $P8 goto __label_1 19281 __label_2: # enddo 19282 bindlast1(";", $P1) 19283 .return($P2) 19284 19285.end # parseDeclareHelper 19286 19287.namespace [ 'Winxed'; 'Compiler'; 'IntStatement' ] 19288 19289.sub 'IntStatement' :method 19290 .param pmc __ARG_1 19291 .param pmc __ARG_2 19292 .param pmc __ARG_3 19293 .param pmc __ARG_4 19294 self.'DeclareSingleStatement'(__ARG_1, __ARG_2, __ARG_3, "I", __ARG_4) 19295 19296.end # IntStatement 19297 19298 19299.sub 'clone' :method 19300 .param pmc __ARG_1 19301 new $P1, [ 'Winxed'; 'Compiler'; 'IntStatement' ] 19302 .tailcall self.'clonedeclare'($P1, __ARG_1) 19303 19304.end # clone 19305 19306.sub Winxed_class_init :anon :load :init 19307 newclass $P0, [ 'Winxed'; 'Compiler'; 'IntStatement' ] 19308 get_class $P1, [ 'Winxed'; 'Compiler'; 'DeclareSingleStatement' ] 19309 addparent $P0, $P1 19310.end 19311.namespace [ 'Winxed'; 'Compiler'; 'IntArrayStatement' ] 19312 19313.sub 'IntArrayStatement' :method 19314 .param pmc __ARG_1 19315 .param pmc __ARG_2 19316 .param pmc __ARG_3 19317 .param pmc __ARG_4 19318 self.'DeclareArrayStatement'(__ARG_1, __ARG_2, __ARG_3, "I", "Integer", __ARG_4) 19319 19320.end # IntArrayStatement 19321 19322 19323.sub 'clone' :method 19324 .param pmc __ARG_1 19325 new $P1, [ 'Winxed'; 'Compiler'; 'IntArrayStatement' ] 19326 .tailcall self.'clonedeclare'($P1, __ARG_1) 19327 19328.end # clone 19329 19330.sub Winxed_class_init :anon :load :init 19331 newclass $P0, [ 'Winxed'; 'Compiler'; 'IntArrayStatement' ] 19332 get_class $P1, [ 'Winxed'; 'Compiler'; 'DeclareArrayStatement' ] 19333 addparent $P0, $P1 19334.end 19335.namespace [ 'Winxed'; 'Compiler' ] 19336 19337.sub 'newIntSingle' :subid('WSubId_138') 19338 .param pmc __ARG_1 19339 .param pmc __ARG_2 19340 .param pmc __ARG_3 19341 .param pmc __ARG_4 19342 new $P2, [ 'Winxed'; 'Compiler'; 'IntStatement' ] 19343 $P2.'IntStatement'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 19344 set $P1, $P2 19345 .return($P1) 19346 19347.end # newIntSingle 19348 19349 19350.sub 'newIntArray' :subid('WSubId_139') 19351 .param pmc __ARG_1 19352 .param pmc __ARG_2 19353 .param pmc __ARG_3 19354 .param pmc __ARG_4 19355 new $P2, [ 'Winxed'; 'Compiler'; 'IntArrayStatement' ] 19356 $P2.'IntArrayStatement'(__ARG_1, __ARG_2, __ARG_4, __ARG_3) 19357 set $P1, $P2 19358 .return($P1) 19359 19360.end # newIntArray 19361 19362 19363.sub 'parseInt' :subid('WSubId_86') 19364 .param pmc __ARG_1 19365 .param pmc __ARG_2 19366 .param pmc __ARG_3 19367.const 'Sub' WSubId_137 = "WSubId_137" 19368.const 'Sub' WSubId_138 = "WSubId_138" 19369.const 'Sub' WSubId_139 = "WSubId_139" 19370 .tailcall WSubId_137(WSubId_138, WSubId_139, __ARG_1, __ARG_2, __ARG_3) 19371 19372.end # parseInt 19373 19374.namespace [ 'Winxed'; 'Compiler'; 'FloatStatement' ] 19375 19376.sub 'FloatStatement' :method 19377 .param pmc __ARG_1 19378 .param pmc __ARG_2 19379 .param pmc __ARG_3 19380 .param pmc __ARG_4 19381 self.'DeclareSingleStatement'(__ARG_1, __ARG_2, __ARG_3, "N", __ARG_4) 19382 19383.end # FloatStatement 19384 19385 19386.sub 'clone' :method 19387 .param pmc __ARG_1 19388 new $P1, [ 'Winxed'; 'Compiler'; 'FloatStatement' ] 19389 .tailcall self.'clonedeclare'($P1, __ARG_1) 19390 19391.end # clone 19392 19393.sub Winxed_class_init :anon :load :init 19394 newclass $P0, [ 'Winxed'; 'Compiler'; 'FloatStatement' ] 19395 get_class $P1, [ 'Winxed'; 'Compiler'; 'DeclareSingleStatement' ] 19396 addparent $P0, $P1 19397.end 19398.namespace [ 'Winxed'; 'Compiler'; 'FloatArrayStatement' ] 19399 19400.sub 'FloatArrayStatement' :method 19401 .param pmc __ARG_1 19402 .param pmc __ARG_2 19403 .param pmc __ARG_3 19404 .param pmc __ARG_4 19405 self.'DeclareArrayStatement'(__ARG_1, __ARG_2, __ARG_3, "N", "Float", __ARG_4) 19406 19407.end # FloatArrayStatement 19408 19409 19410.sub 'clone' :method 19411 .param pmc __ARG_1 19412 new $P1, [ 'Winxed'; 'Compiler'; 'FloatArrayStatement' ] 19413 .tailcall self.'clonedeclare'($P1, __ARG_1) 19414 19415.end # clone 19416 19417.sub Winxed_class_init :anon :load :init 19418 newclass $P0, [ 'Winxed'; 'Compiler'; 'FloatArrayStatement' ] 19419 get_class $P1, [ 'Winxed'; 'Compiler'; 'DeclareArrayStatement' ] 19420 addparent $P0, $P1 19421.end 19422.namespace [ 'Winxed'; 'Compiler' ] 19423 19424.sub 'newFloatSingle' :subid('WSubId_140') 19425 .param pmc __ARG_1 19426 .param pmc __ARG_2 19427 .param pmc __ARG_3 19428 .param pmc __ARG_4 19429 new $P2, [ 'Winxed'; 'Compiler'; 'FloatStatement' ] 19430 $P2.'FloatStatement'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 19431 set $P1, $P2 19432 .return($P1) 19433 19434.end # newFloatSingle 19435 19436 19437.sub 'newFloatArray' :subid('WSubId_141') 19438 .param pmc __ARG_1 19439 .param pmc __ARG_2 19440 .param pmc __ARG_3 19441 .param pmc __ARG_4 19442 new $P2, [ 'Winxed'; 'Compiler'; 'FloatArrayStatement' ] 19443 $P2.'FloatArrayStatement'(__ARG_1, __ARG_2, __ARG_4, __ARG_3) 19444 set $P1, $P2 19445 .return($P1) 19446 19447.end # newFloatArray 19448 19449 19450.sub 'parseFloat' :subid('WSubId_87') 19451 .param pmc __ARG_1 19452 .param pmc __ARG_2 19453 .param pmc __ARG_3 19454.const 'Sub' WSubId_137 = "WSubId_137" 19455.const 'Sub' WSubId_140 = "WSubId_140" 19456.const 'Sub' WSubId_141 = "WSubId_141" 19457 .tailcall WSubId_137(WSubId_140, WSubId_141, __ARG_1, __ARG_2, __ARG_3) 19458 19459.end # parseFloat 19460 19461.namespace [ 'Winxed'; 'Compiler'; 'StringStatement' ] 19462 19463.sub 'StringStatement' :method 19464 .param pmc __ARG_1 19465 .param pmc __ARG_2 19466 .param pmc __ARG_3 19467 .param pmc __ARG_4 19468 self.'DeclareSingleStatement'(__ARG_1, __ARG_2, __ARG_3, "S", __ARG_4) 19469 19470.end # StringStatement 19471 19472 19473.sub 'clone' :method 19474 .param pmc __ARG_1 19475 new $P1, [ 'Winxed'; 'Compiler'; 'StringStatement' ] 19476 .tailcall self.'clonedeclare'($P1, __ARG_1) 19477 19478.end # clone 19479 19480.sub Winxed_class_init :anon :load :init 19481 newclass $P0, [ 'Winxed'; 'Compiler'; 'StringStatement' ] 19482 get_class $P1, [ 'Winxed'; 'Compiler'; 'DeclareSingleStatement' ] 19483 addparent $P0, $P1 19484.end 19485.namespace [ 'Winxed'; 'Compiler'; 'StringArrayStatement' ] 19486 19487.sub 'StringArrayStatement' :method 19488 .param pmc __ARG_1 19489 .param pmc __ARG_2 19490 .param pmc __ARG_3 19491 .param pmc __ARG_4 19492 self.'DeclareArrayStatement'(__ARG_1, __ARG_2, __ARG_3, "S", "String", __ARG_4) 19493 19494.end # StringArrayStatement 19495 19496 19497.sub 'clone' :method 19498 .param pmc __ARG_1 19499 new $P1, [ 'Winxed'; 'Compiler'; 'StringArrayStatement' ] 19500 .tailcall self.'clonedeclare'($P1, __ARG_1) 19501 19502.end # clone 19503 19504.sub Winxed_class_init :anon :load :init 19505 newclass $P0, [ 'Winxed'; 'Compiler'; 'StringArrayStatement' ] 19506 get_class $P1, [ 'Winxed'; 'Compiler'; 'DeclareArrayStatement' ] 19507 addparent $P0, $P1 19508.end 19509.namespace [ 'Winxed'; 'Compiler' ] 19510 19511.sub 'newStringSingle' :subid('WSubId_142') 19512 .param pmc __ARG_1 19513 .param pmc __ARG_2 19514 .param pmc __ARG_3 19515 .param pmc __ARG_4 19516 new $P2, [ 'Winxed'; 'Compiler'; 'StringStatement' ] 19517 $P2.'StringStatement'(__ARG_1, __ARG_2, __ARG_3, __ARG_4) 19518 set $P1, $P2 19519 .return($P1) 19520 19521.end # newStringSingle 19522 19523 19524.sub 'newStringArray' :subid('WSubId_143') 19525 .param pmc __ARG_1 19526 .param pmc __ARG_2 19527 .param pmc __ARG_3 19528 .param pmc __ARG_4 19529 new $P2, [ 'Winxed'; 'Compiler'; 'StringArrayStatement' ] 19530 $P2.'StringArrayStatement'(__ARG_1, __ARG_2, __ARG_4, __ARG_3) 19531 set $P1, $P2 19532 .return($P1) 19533 19534.end # newStringArray 19535 19536 19537.sub 'parseString' :subid('WSubId_85') 19538 .param pmc __ARG_1 19539 .param pmc __ARG_2 19540 .param pmc __ARG_3 19541.const 'Sub' WSubId_137 = "WSubId_137" 19542.const 'Sub' WSubId_142 = "WSubId_142" 19543.const 'Sub' WSubId_143 = "WSubId_143" 19544 .tailcall WSubId_137(WSubId_142, WSubId_143, __ARG_1, __ARG_2, __ARG_3) 19545 19546.end # parseString 19547 19548.namespace [ 'Winxed'; 'Compiler'; 'ConstStatement' ] 19549 19550.sub 'ConstStatement' :method 19551 .param pmc __ARG_1 19552 .param pmc __ARG_2 19553 .param pmc __ARG_3 19554 .param string __ARG_4 19555.const 'Sub' WSubId_75 = "WSubId_75" 19556 self.'Statement'(__ARG_1, __ARG_3) 19557 box $P1, __ARG_4 19558 setattribute self, 'type', $P1 19559 setattribute self, 'name', __ARG_1 19560 $P2 = WSubId_75(__ARG_2, self) 19561 setattribute self, 'value', $P2 19562 $P2 = self.'createconst'(__ARG_1, __ARG_4) 19563 setattribute self, 'data', $P2 19564 19565.end # ConstStatement 19566 19567 19568.sub 'optimize' :method 19569.const 'Sub' SyntaxError = "SyntaxError" 19570.const 'Sub' InternalError = "InternalError" 19571 getattribute $P1, self, 'value' 19572 $P1 = $P1.'optimize'() 19573 $P2 = $P1.'hascompilevalue'() 19574 if $P2 goto __label_1 19575 SyntaxError("Value for const is not evaluable at compile time", self) 19576 __label_1: # endif 19577 getattribute $P2, self, 'type' 19578 set $S1, $P2 19579 if_null $S1, __label_2 19580 length $I1, $S1 19581 ne $I1, 1, __label_2 19582 ord $I1, $S1 19583 if $I1 == 73 goto __label_4 19584 if $I1 == 78 goto __label_5 19585 if $I1 == 83 goto __label_6 19586 goto __label_2 19587 __label_4: # case 19588 $P1 = $P1.'getLiteralInteger'() 19589 goto __label_3 # break 19590 __label_5: # case 19591 $P1 = $P1.'getLiteralFloat'() 19592 goto __label_3 # break 19593 __label_6: # case 19594 $P1 = $P1.'getLiteralString'() 19595 goto __label_3 # break 19596 __label_2: # default 19597 getattribute $P3, self, 'start' 19598 InternalError("Wrong const", $P3) 19599 __label_3: # switch end 19600 getattribute $P2, self, 'data' 19601 $P2.'setvalue'($P1) 19602 .return(self) 19603 19604.end # optimize 19605 19606 19607.sub 'checkresult' :method 19608.const 'Sub' InternalError = "InternalError" 19609 getattribute $P1, self, 'start' 19610 InternalError("Direct use of const", $P1) 19611 19612.end # checkresult 19613 19614 19615.sub 'emit' :method 19616 .param pmc __ARG_1 19617 $P2 = __ARG_1.'getDebug'() 19618 if_null $P2, __label_1 19619 unless $P2 goto __label_1 19620 getattribute $P3, self, 'data' 19621 $P1 = $P3.'getvalue'() 19622 null $S1 19623 getattribute $P2, self, 'type' 19624 set $S2, $P2 19625 if_null $S2, __label_2 19626 length $I1, $S2 19627 ne $I1, 1, __label_2 19628 ord $I1, $S2 19629 if $I1 == 73 goto __label_4 19630 if $I1 == 78 goto __label_5 19631 if $I1 == 83 goto __label_6 19632 goto __label_2 19633 __label_4: # case 19634 $P3 = $P1.'getIntegerValue'() 19635 set $S1, $P3 19636 goto __label_3 # break 19637 __label_5: # case 19638 $P4 = $P1.'getFloatValue'() 19639 set $S1, $P4 19640 goto __label_3 # break 19641 __label_6: # case 19642 $P5 = $P1.'getPirString'() 19643 set $S1, $P5 19644 goto __label_3 # break 19645 __label_2: # default 19646 __label_3: # switch end 19647 getattribute $P2, self, 'name' 19648 __ARG_1.'comment'("Constant '", $P2, "' set to: ", $S1) 19649 __label_1: # endif 19650 19651.end # emit 19652 19653.sub Winxed_class_init :anon :load :init 19654 newclass $P0, [ 'Winxed'; 'Compiler'; 'ConstStatement' ] 19655 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 19656 addparent $P0, $P1 19657 addattribute $P0, 'type' 19658 addattribute $P0, 'name' 19659 addattribute $P0, 'data' 19660 addattribute $P0, 'value' 19661.end 19662.namespace [ 'Winxed'; 'Compiler' ] 19663 19664.sub 'parseConst' :subid('WSubId_82') 19665 .param pmc __ARG_1 19666 .param pmc __ARG_2 19667 .param pmc __ARG_3 19668.const 'Sub' WSubId_136 = "WSubId_136" 19669.const 'Sub' SyntaxError = "SyntaxError" 19670.const 'Sub' RequireIdentifier = "RequireIdentifier" 19671.const 'Sub' ExpectOp = "ExpectOp" 19672.const 'Sub' bindlast1 = "bindlast1" 19673 $P1 = __ARG_2.'get'() 19674 $P7 = $P1.'isidentifier'() 19675 if_null $P7, __label_2 19676 unless $P7 goto __label_2 19677 $P8 = $P1.'getidentifier'() 19678 $P6 = WSubId_136($P8) 19679 goto __label_1 19680 __label_2: 19681 box $P6, "" 19682 __label_1: 19683 null $S1 19684 if_null $P6, __label_3 19685 set $S1, $P6 19686 __label_3: 19687 eq $S1, "I", __label_4 19688 eq $S1, "N", __label_4 19689 eq $S1, "S", __label_4 19690 SyntaxError("Invalid type for const", $P1) 19691 __label_4: # endif 19692 null $P2 19693 __label_5: # do 19694 $P3 = __ARG_2.'get'() 19695 RequireIdentifier($P3) 19696 ExpectOp("=", __ARG_2) 19697 set $P4, $P2 19698 new $P6, [ 'Winxed'; 'Compiler'; 'ConstStatement' ] 19699 $P6.'ConstStatement'($P3, __ARG_2, __ARG_3, $S1) 19700 set $P5, $P6 19701 if_null $P4, __label_10 19702 isa $I1, $P4, [ 'Winxed'; 'Compiler'; 'MultiStatement' ] 19703 if $I1 goto __label_11 19704 goto __label_9 19705 __label_10: # case 19706 set $P2, $P5 19707 goto __label_12 19708 __label_11: # case 19709 $P2 = $P4.'push'($P5) 19710 goto __label_12 19711 __label_9: # default 19712 new $P7, [ 'Winxed'; 'Compiler'; 'MultiStatement' ] 19713 $P7.'MultiStatement'($P4, $P5) 19714 set $P2, $P7 19715 goto __label_12 19716 __label_8: # switch end 19717 __label_12: 19718 __label_7: # continue 19719 $P1 = __ARG_2.'get'() 19720 $P6 = $P1.'isop'(",") 19721 if_null $P6, __label_6 19722 if $P6 goto __label_5 19723 __label_6: # enddo 19724 bindlast1(";", $P1) 19725 .return($P2) 19726 19727.end # parseConst 19728 19729.namespace [ 'Winxed'; 'Compiler'; 'VarStatement' ] 19730 19731.sub 'VarStatement' :method 19732 .param pmc __ARG_1 19733 .param pmc __ARG_2 19734 .param pmc __ARG_3 19735 .param pmc __ARG_4 19736 .param int __ARG_5 19737.const 'Sub' WSubId_75 = "WSubId_75" 19738.const 'Sub' bindlast1 = "bindlast1" 19739 self.'initvarbase'(__ARG_1, __ARG_3, __ARG_4, __ARG_5) 19740 $P1 = __ARG_2.'get'() 19741 $P2 = $P1.'isop'(":") 19742 if_null $P2, __label_1 19743 unless $P2 goto __label_1 19744 self.'parsemodifiers'($P1, __ARG_2) 19745 $P1 = __ARG_2.'get'() 19746 __label_1: # endif 19747 $P2 = $P1.'isop'("=") 19748 if_null $P2, __label_2 19749 unless $P2 goto __label_2 19750 $P4 = WSubId_75(__ARG_2, self) 19751 setattribute self, 'init', $P4 19752 $P1 = __ARG_2.'get'() 19753 __label_2: # endif 19754 bindlast1(";", $P1) 19755 19756.end # VarStatement 19757 19758 19759.sub 'clone' :method 19760 .param pmc __ARG_1 19761 new $P1, [ 'Winxed'; 'Compiler'; 'VarStatement' ] 19762 $P1.'clonevarbase'(self, __ARG_1) 19763 getattribute $P2, self, 'init' 19764 if_null $P2, __label_1 19765 getattribute $P5, self, 'init' 19766 $P4 = $P5.'clone'($P1) 19767 setattribute $P1, 'init', $P4 19768 __label_1: # endif 19769 getattribute $P2, self, 'modifiers' 19770 if_null $P2, __label_2 19771 getattribute $P5, self, 'modifiers' 19772 $P4 = $P5.'clone'($P1) 19773 setattribute $P1, 'modifiers', $P4 19774 __label_2: # endif 19775 .return($P1) 19776 19777.end # clone 19778 19779 19780.sub 'optimize_init' :method 19781 getattribute $P1, self, 'init' 19782 if_null $P1, __label_1 19783 getattribute $P4, self, 'init' 19784 $P3 = $P4.'optimize'() 19785 setattribute self, 'init', $P3 19786 __label_1: # endif 19787 .return(self) 19788 19789.end # optimize_init 19790 19791 19792.sub 'optimize' :method 19793 self.'optimizemodifiers'() 19794 .tailcall self.'optimize_init'() 19795 19796.end # optimize 19797 19798 19799.sub 'emit' :method 19800 .param pmc __ARG_1 19801.const 'Sub' SyntaxError = "SyntaxError" 19802 self.'annotate'(__ARG_1) 19803 getattribute $P2, self, 'name' 19804 null $S1 19805 if_null $P2, __label_1 19806 set $S1, $P2 19807 __label_1: 19808 getattribute $P2, self, 'reg' 19809 null $S2 19810 if_null $P2, __label_2 19811 set $S2, $P2 19812 __label_2: 19813 getattribute $P1, self, 'init' 19814 $P2 = __ARG_1.'getDebug'() 19815 if_null $P2, __label_3 19816 unless $P2 goto __label_3 19817 __ARG_1.'comment'("var ", $S1, ": ", $S2) 19818 __label_3: # endif 19819 if_null $P1, __label_4 19820 $P2 = $P1.'isnull'() 19821 if_null $P2, __label_5 19822 unless $P2 goto __label_5 19823 null $P1 19824 __label_5: # endif 19825 __label_4: # endif 19826 if_null $P1, __label_6 19827 $P2 = $P1.'checkresult'() 19828 set $S4, $P2 19829 if_null $S4, __label_8 19830 length $I1, $S4 19831 ne $I1, 1, __label_8 19832 ord $I1, $S4 19833 if $I1 == 80 goto __label_10 19834 if $I1 == 83 goto __label_11 19835 if $I1 == 73 goto __label_12 19836 if $I1 == 78 goto __label_13 19837 if $I1 == 118 goto __label_14 19838 goto __label_8 19839 __label_10: # case 19840 $P1.'emit_init'(__ARG_1, $S2) 19841 goto __label_9 # break 19842 __label_11: # case 19843 __label_12: # case 19844 __label_13: # case 19845 $P3 = $P1.'emit_get'(__ARG_1) 19846 null $S3 19847 if_null $P3, __label_15 19848 set $S3, $P3 19849 __label_15: 19850 __ARG_1.'emitbox'($S2, $S3) 19851 goto __label_9 # break 19852 __label_14: # case 19853 SyntaxError("Can't use void function as initializer", self) 19854 __label_8: # default 19855 SyntaxError("Invalid var initializer", self) 19856 __label_9: # switch end 19857 goto __label_7 19858 __label_6: # else 19859 __ARG_1.'emitnull'($S2) 19860 __label_7: # endif 19861 19862.end # emit 19863 19864.sub Winxed_class_init :anon :load :init 19865 newclass $P0, [ 'Winxed'; 'Compiler'; 'VarStatement' ] 19866 get_class $P1, [ 'Winxed'; 'Compiler'; 'VarBaseStatement' ] 19867 addparent $P0, $P1 19868 addattribute $P0, 'init' 19869.end 19870.namespace [ 'Winxed'; 'Compiler'; 'ResizableVarStatement' ] 19871 19872.sub 'ResizableVarStatement' :method 19873 .param pmc __ARG_1 19874 .param pmc __ARG_2 19875 .param pmc __ARG_3 19876 .param pmc __ARG_4 19877.const 'Sub' ExpectOp = "ExpectOp" 19878 self.'initvarbase'(__ARG_1, __ARG_3, __ARG_4) 19879 ExpectOp(";", __ARG_2) 19880 19881.end # ResizableVarStatement 19882 19883 19884.sub 'emit' :method 19885 .param pmc __ARG_1 19886.const 'Sub' sformat = "sformat" 19887 self.'annotate'(__ARG_1) 19888 getattribute $P1, self, 'reg' 19889 null $S1 19890 if_null $P1, __label_1 19891 set $S1, $P1 19892 __label_1: 19893 $P1 = __ARG_1.'getDebug'() 19894 if_null $P1, __label_2 19895 unless $P1 goto __label_2 19896 getattribute $P3, self, 'name' 19897 $P2 = sformat("var %0[] : %1", $P3, $S1) 19898 __ARG_1.'comment'($P2) 19899 __label_2: # endif 19900 $P1 = sformat(" new %0, 'ResizablePMCArray'", $S1) 19901 __ARG_1.'say'($P1) 19902 19903.end # emit 19904 19905.sub Winxed_class_init :anon :load :init 19906 newclass $P0, [ 'Winxed'; 'Compiler'; 'ResizableVarStatement' ] 19907 get_class $P1, [ 'Winxed'; 'Compiler'; 'VarStatement' ] 19908 addparent $P0, $P1 19909.end 19910.namespace [ 'Winxed'; 'Compiler'; 'FixedVarStatement' ] 19911 19912.sub 'FixedVarStatement' :method 19913 .param pmc __ARG_1 19914 .param pmc __ARG_2 19915 .param pmc __ARG_3 19916 .param pmc __ARG_4 19917.const 'Sub' WSubId_75 = "WSubId_75" 19918.const 'Sub' ExpectOp = "ExpectOp" 19919 self.'initvarbase'(__ARG_1, __ARG_3, __ARG_4) 19920 $P2 = WSubId_75(__ARG_2, self) 19921 setattribute self, 'exprsize', $P2 19922 ExpectOp("]", __ARG_2) 19923 ExpectOp(";", __ARG_2) 19924 19925.end # FixedVarStatement 19926 19927 19928.sub 'optimize' :method 19929 getattribute $P3, self, 'exprsize' 19930 $P2 = $P3.'optimize'() 19931 setattribute self, 'exprsize', $P2 19932 .tailcall self.'optimize_init'() 19933 19934.end # optimize 19935 19936 19937.sub 'emit' :method 19938 .param pmc __ARG_1 19939.const 'Sub' sformat = "sformat" 19940 getattribute $P2, self, 'exprsize' 19941 $P1 = $P2.'emit_get'(__ARG_1) 19942 null $S1 19943 if_null $P1, __label_1 19944 set $S1, $P1 19945 __label_1: 19946 self.'annotate'(__ARG_1) 19947 getattribute $P1, self, 'reg' 19948 null $S2 19949 if_null $P1, __label_2 19950 set $S2, $P1 19951 __label_2: 19952 $P1 = __ARG_1.'getDebug'() 19953 if_null $P1, __label_3 19954 unless $P1 goto __label_3 19955 getattribute $P3, self, 'name' 19956 $P2 = sformat("var %0[] : %1", $P3, $S2) 19957 __ARG_1.'comment'($P2) 19958 __label_3: # endif 19959 $P1 = sformat(" new %0, 'FixedPMCArray', %1", $S2, $S1) 19960 __ARG_1.'say'($P1) 19961 19962.end # emit 19963 19964.sub Winxed_class_init :anon :load :init 19965 newclass $P0, [ 'Winxed'; 'Compiler'; 'FixedVarStatement' ] 19966 get_class $P1, [ 'Winxed'; 'Compiler'; 'VarStatement' ] 19967 addparent $P0, $P1 19968 addattribute $P0, 'exprsize' 19969.end 19970.namespace [ 'Winxed'; 'Compiler' ] 19971 19972.sub 'parseVar' :subid('WSubId_84') 19973 .param pmc __ARG_1 19974 .param pmc __ARG_2 19975 .param pmc __ARG_3 19976 .param int __ARG_4 :optional 19977.const 'Sub' RequireIdentifier = "RequireIdentifier" 19978 $P1 = __ARG_2.'get'() 19979 RequireIdentifier($P1) 19980 $P2 = __ARG_2.'get'() 19981 $P3 = $P2.'isop'("[") 19982 if_null $P3, __label_1 19983 unless $P3 goto __label_1 19984 $P2 = __ARG_2.'get'() 19985 $P3 = $P2.'isop'("]") 19986 if_null $P3, __label_3 19987 unless $P3 goto __label_3 19988 new $P5, [ 'Winxed'; 'Compiler'; 'ResizableVarStatement' ] 19989 $P5.'ResizableVarStatement'(__ARG_1, __ARG_2, __ARG_3, $P1) 19990 set $P4, $P5 19991 .return($P4) 19992 goto __label_4 19993 __label_3: # else 19994 __ARG_2.'unget'($P2) 19995 new $P4, [ 'Winxed'; 'Compiler'; 'FixedVarStatement' ] 19996 $P4.'FixedVarStatement'(__ARG_1, __ARG_2, __ARG_3, $P1) 19997 set $P3, $P4 19998 .return($P3) 19999 __label_4: # endif 20000 goto __label_2 20001 __label_1: # else 20002 __ARG_2.'unget'($P2) 20003 new $P4, [ 'Winxed'; 'Compiler'; 'VarStatement' ] 20004 $P4.'VarStatement'(__ARG_1, __ARG_2, __ARG_3, $P1, __ARG_4) 20005 set $P3, $P4 20006 .return($P3) 20007 __label_2: # endif 20008 20009.end # parseVar 20010 20011 20012.sub 'parseVolatile' :subid('WSubId_83') 20013 .param pmc __ARG_1 20014 .param pmc __ARG_2 20015 .param pmc __ARG_3 20016.const 'Sub' SyntaxError = "SyntaxError" 20017.const 'Sub' WSubId_84 = "WSubId_84" 20018 $P1 = __ARG_2.'get'() 20019 $P2 = $P1.'iskeyword'("var") 20020 if $P2 goto __label_1 20021 SyntaxError("invalid volatile type", $P1) 20022 __label_1: # endif 20023 .tailcall WSubId_84(__ARG_1, __ARG_2, __ARG_3, 1) 20024 20025.end # parseVolatile 20026 20027.namespace [ 'Winxed'; 'Compiler'; 'CompoundStatement' ] 20028 20029.sub 'CompoundStatement' :method 20030 .param pmc __ARG_1 20031 .param pmc __ARG_2 20032 .param pmc __ARG_3 20033.const 'Sub' WSubId_134 = "WSubId_134" 20034.const 'Sub' InternalError = "InternalError" 20035 self.'BlockStatement'(__ARG_1, __ARG_3) 20036 root_new $P4, ['parrot';'Hash'] 20037 setattribute self, 'labels', $P4 20038 root_new $P4, ['parrot';'ResizablePMCArray'] 20039 setattribute self, 'statements', $P4 20040 null $P1 20041 __label_2: # while 20042 $P1 = __ARG_2.'get'() 20043 $P3 = $P1.'isop'("}") 20044 if $P3 goto __label_1 20045 __ARG_2.'unget'($P1) 20046 $P2 = WSubId_134(__ARG_2, self) 20047 unless_null $P2, __label_3 20048 InternalError("Unexpected null statement") 20049 __label_3: # endif 20050 getattribute $P3, self, 'statements' 20051 push $P3, $P2 20052 goto __label_2 20053 __label_1: # endwhile 20054 setattribute self, 'end', $P1 20055 20056.end # CompoundStatement 20057 20058 20059.sub 'clone' :method 20060 .param pmc __ARG_1 20061 new $P1, [ 'Winxed'; 'Compiler'; 'CompoundStatement' ] 20062 getattribute $P8, self, 'start' 20063 $P1.'BlockStatement'($P8, __ARG_1) 20064 root_new $P9, ['parrot';'Hash'] 20065 setattribute $P1, 'labels', $P9 20066 getattribute $P9, self, 'end' 20067 setattribute $P1, 'end', $P9 20068 getattribute $P2, self, 'statements' 20069 set $P3, $P1 20070.const 'Sub' bindlast = "bindlast" 20071.const 'Sub' bindmethod = "bindmethod" 20072 set $P4, $P2 20073 root_new $P5, ['parrot';'ResizablePMCArray'] 20074 $P9 = bindmethod("clone") 20075 $P6 = bindlast($P9, $P3) 20076 if_null $P4, __label_2 20077 iter $P11, $P4 20078 set $P11, 0 20079 __label_1: # for iteration 20080 unless $P11 goto __label_2 20081 shift $P7, $P11 20082 $P12 = $P6($P7) 20083 push $P5, $P12 20084 goto __label_1 20085 __label_2: # endfor 20086 set $P10, $P5 20087 set $P8, $P10 20088 setattribute $P1, 'statements', $P8 20089 .return($P1) 20090 20091.end # clone 20092 20093 20094.sub 'last' :method 20095 getattribute $P1, self, 'statements' 20096 elements $I2, $P1 20097 sub $I1, $I2, 1 20098 __label_3: # for condition 20099 lt $I1, 0, __label_2 20100 $P2 = $P1[$I1] 20101 if_null $P2, __label_4 20102 $P3 = $P2.'isempty'() 20103 if $P3 goto __label_4 20104 .return($P2) 20105 __label_4: # endif 20106 __label_1: # for iteration 20107 dec $I1 20108 goto __label_3 20109 __label_2: # for end 20110 null $P3 20111 .return($P3) 20112 20113.end # last 20114 20115 20116.sub 'getlabel' :method 20117 .param string __ARG_1 20118 getattribute $P1, self, 'labels' 20119 $S1 = $P1[__ARG_1] 20120 isnull $I1, $S1 20121 if $I1 goto __label_2 20122 iseq $I1, $S1, "" 20123 __label_2: 20124 unless $I1 goto __label_1 20125 getattribute $P3, self, 'owner' 20126 $P2 = $P3.'getlabel'(__ARG_1) 20127 set $S1, $P2 20128 __label_1: # endif 20129 .return($S1) 20130 20131.end # getlabel 20132 20133 20134.sub 'createlabel' :method 20135 .param pmc __ARG_1 20136.const 'Sub' SyntaxError = "SyntaxError" 20137 null $S1 20138 if_null __ARG_1, __label_1 20139 set $S1, __ARG_1 20140 __label_1: 20141 getattribute $P1, self, 'labels' 20142 $S2 = $P1[$S1] 20143 if_null $S2, __label_2 20144 eq $S2, "", __label_2 20145 SyntaxError("Label already defined", __ARG_1) 20146 __label_2: # endif 20147 $P2 = self.'genlabel'() 20148 null $S3 20149 if_null $P2, __label_3 20150 set $S3, $P2 20151 __label_3: 20152 $P1[$S1] = $S3 20153 .return($S3) 20154 20155.end # createlabel 20156 20157 20158.sub 'getend' :method 20159 getattribute $P1, self, 'end' 20160 .return($P1) 20161 20162.end # getend 20163 20164 20165.sub 'emit' :method 20166 .param pmc __ARG_1 20167 $P2 = __ARG_1.'getDebug'() 20168 set $I1, $P2 20169 unless $I1 goto __label_1 20170 __ARG_1.'comment'("{") 20171 __label_1: # endif 20172 getattribute $P2, self, 'statements' 20173 if_null $P2, __label_3 20174 iter $P3, $P2 20175 set $P3, 0 20176 __label_2: # for iteration 20177 unless $P3 goto __label_3 20178 shift $P1, $P3 20179 $P1.'emit'(__ARG_1) 20180 self.'freetemps'() 20181 goto __label_2 20182 __label_3: # endfor 20183 unless $I1 goto __label_4 20184 __ARG_1.'comment'("}") 20185 __label_4: # endif 20186 20187.end # emit 20188 20189.sub Winxed_class_init :anon :load :init 20190 newclass $P0, [ 'Winxed'; 'Compiler'; 'CompoundStatement' ] 20191 get_class $P1, [ 'Winxed'; 'Compiler'; 'MultiStatementBase' ] 20192 addparent $P0, $P1 20193 get_class $P2, [ 'Winxed'; 'Compiler'; 'BlockStatement' ] 20194 addparent $P0, $P2 20195 addattribute $P0, 'end' 20196 addattribute $P0, 'labels' 20197.end 20198.namespace [ 'Winxed'; 'Compiler'; 'RegisterStore' ] 20199 20200.sub 'RegisterStore' :method 20201 .param string __ARG_1 20202 box $P3, __ARG_1 20203 setattribute self, 'type', $P3 20204 box $P3, 1 20205 setattribute self, 'nreg', $P3 20206 new $P1, ['ResizableStringArray'] 20207 new $P2, ['ResizableStringArray'] 20208 setattribute self, 'tempreg', $P1 20209 setattribute self, 'freereg', $P2 20210 20211.end # RegisterStore 20212 20213 20214.sub 'createreg' :method 20215 getattribute $P1, self, 'nreg' 20216 set $I1, $P1 20217 set $I2, $I1 20218 inc $I1 20219 set $S1, $I2 20220 assign $P1, $I1 20221 getattribute $P2, self, 'type' 20222 set $S2, $P2 20223 concat $S3, "$", $S2 20224 concat $S3, $S3, $S1 20225 .return($S3) 20226 20227.end # createreg 20228 20229 20230.sub 'tempreg' :method 20231 getattribute $P1, self, 'freereg' 20232 getattribute $P2, self, 'tempreg' 20233 null $S1 20234 elements $I1, $P1 20235 unless $I1 goto __label_1 20236 $P3 = $P1.'pop'() 20237 set $S1, $P3 20238 goto __label_2 20239 __label_1: # else 20240 $P4 = self.'createreg'() 20241 set $S1, $P4 20242 __label_2: # endif 20243 push $P2, $S1 20244 .return($S1) 20245 20246.end # tempreg 20247 20248 20249.sub 'freetemps' :method 20250 getattribute $P1, self, 'freereg' 20251 getattribute $P2, self, 'tempreg' 20252 elements $I1, $P2 20253 sub $I2, $I1, 1 20254 __label_3: # for condition 20255 lt $I2, 0, __label_2 20256 $S1 = $P2[$I2] 20257 push $P1, $S1 20258 __label_1: # for iteration 20259 dec $I2 20260 goto __label_3 20261 __label_2: # for end 20262 assign $P2, 0 20263 20264.end # freetemps 20265 20266.sub Winxed_class_init :anon :load :init 20267 newclass $P0, [ 'Winxed'; 'Compiler'; 'RegisterStore' ] 20268 addattribute $P0, 'type' 20269 addattribute $P0, 'nreg' 20270 addattribute $P0, 'tempreg' 20271 addattribute $P0, 'freereg' 20272.end 20273.namespace [ 'Winxed'; 'Compiler'; 'ParameterModifierList' ] 20274 20275.sub 'ParameterModifierList' :method 20276 .param pmc __ARG_1 20277 .param pmc __ARG_2 20278 self.'ModifierList'(__ARG_1, __ARG_2) 20279 20280.end # ParameterModifierList 20281 20282 20283.sub 'clone' :method 20284 .param pmc __ARG_1 20285 new $P1, [ 'Winxed'; 'Compiler'; 'ParameterModifierList' ] 20286 $P3 = self.'clonemodifiers'(__ARG_1) 20287 setattribute $P1, 'list', $P3 20288 .return($P1) 20289 20290.end # clone 20291 20292 20293.sub 'emitmodifiers' :method 20294 .param pmc __ARG_1 20295 .param pmc __ARG_2 20296 .param string __ARG_3 20297.const 'Sub' SyntaxError = "SyntaxError" 20298 null $P1 20299 null $P2 20300 $P3 = self.'getlist'() 20301 if_null $P3, __label_2 20302 iter $P6, $P3 20303 set $P6, 0 20304 __label_1: # for iteration 20305 unless $P6 goto __label_2 20306 shift $P4, $P6 20307 $P7 = $P4.'getname'() 20308 null $S1 20309 if_null $P7, __label_3 20310 set $S1, $P7 20311 __label_3: 20312 if $S1 == "named" goto __label_6 20313 if $S1 == "slurpy" goto __label_7 20314 goto __label_4 20315 __label_6: # case 20316 set $P1, $P4 20317 goto __label_5 # break 20318 __label_7: # case 20319 set $P2, $P4 20320 goto __label_5 # break 20321 __label_4: # default 20322 __ARG_1.'print'(" :", $S1) 20323 __label_5: # switch end 20324 goto __label_1 20325 __label_2: # endfor 20326 isnull $I1, $P1 20327 not $I1 20328 unless $I1 goto __label_11 20329 isnull $I1, $P2 20330 not $I1 20331 __label_11: 20332 if $I1 goto __label_10 20333 unless_null $P1, __label_12 20334 unless_null $P2, __label_13 20335 goto __label_9 20336 __label_10: # case 20337 __ARG_1.'print'(" :named :slurpy") 20338 goto __label_8 # break 20339 __label_12: # case 20340 null $S2 20341 $P7 = $P1.'numargs'() 20342 set $I2, $P7 20343 if $I2 == 0 goto __label_16 20344 if $I2 == 1 goto __label_17 20345 goto __label_14 20346 __label_16: # case 20347 concat $S3, "'", __ARG_3 20348 concat $S3, $S3, "'" 20349 set $S2, $S3 20350 goto __label_15 # break 20351 __label_17: # case 20352 $P5 = $P1.'getarg'(0) 20353 $P8 = $P5.'isstringliteral'() 20354 if $P8 goto __label_18 20355 SyntaxError("Invalid modifier", __ARG_2) 20356 __label_18: # endif 20357 $P9 = $P5.'getPirString'() 20358 set $S2, $P9 20359 goto __label_15 # break 20360 __label_14: # default 20361 SyntaxError("Invalid modifier", __ARG_2) 20362 __label_15: # switch end 20363 __ARG_1.'print'(" :named(", $S2, ")") 20364 goto __label_8 # break 20365 __label_13: # case 20366 __ARG_1.'print'(" :slurpy") 20367 goto __label_8 # break 20368 __label_9: # default 20369 __label_8: # switch end 20370 20371.end # emitmodifiers 20372 20373.sub Winxed_class_init :anon :load :init 20374 newclass $P0, [ 'Winxed'; 'Compiler'; 'ParameterModifierList' ] 20375 get_class $P1, [ 'Winxed'; 'Compiler'; 'ModifierList' ] 20376 addparent $P0, $P1 20377.end 20378.namespace [ 'Winxed'; 'Compiler'; 'FunctionParameter' ] 20379 20380.sub 'FunctionParameter' :method 20381 .param pmc __ARG_1 20382 .param pmc __ARG_2 20383.const 'Sub' WSubId_136 = "WSubId_136" 20384.const 'Sub' RequireIdentifier = "RequireIdentifier" 20385 setattribute self, 'func', __ARG_1 20386 $P1 = __ARG_2.'get'() 20387 null $S1 20388 $P2 = $P1.'isop'(":") 20389 if_null $P2, __label_1 20390 unless $P2 goto __label_1 20391 box $P3, 1 20392 setattribute self, 'want_multi', $P3 20393 $P1 = __ARG_2.'get'() 20394 $P3 = $P1.'checkkeyword'() 20395 $P2 = WSubId_136($P3) 20396 set $S1, $P2 20397 ne $S1, "", __label_3 20398 set $S1, "P" 20399 new $P4, [ 'Winxed'; 'Compiler'; 'ClassSpecifierId' ] 20400 getattribute $P5, __ARG_1, 'owner' 20401 $P4.'ClassSpecifierId'(__ARG_2, $P5, $P1) 20402 set $P3, $P4 20403 setattribute self, 'classtype', $P3 20404 __label_3: # endif 20405 $P1 = __ARG_2.'get'() 20406 goto __label_2 20407 __label_1: # else 20408 $P3 = $P1.'checkkeyword'() 20409 $P2 = WSubId_136($P3) 20410 set $S1, $P2 20411 eq $S1, "", __label_4 20412 $P1 = __ARG_2.'get'() 20413 goto __label_5 20414 __label_4: # else 20415 set $S1, "P" 20416 __label_5: # endif 20417 __label_2: # endif 20418 RequireIdentifier($P1) 20419 box $P2, $S1 20420 setattribute self, 'type', $P2 20421 setattribute self, 'name', $P1 20422 $P1 = __ARG_2.'get'() 20423 $P2 = $P1.'isop'("[") 20424 if_null $P2, __label_6 20425 unless $P2 goto __label_6 20426 new $P5, [ 'Winxed'; 'Compiler'; 'ParameterModifierList' ] 20427 getattribute $P6, __ARG_1, 'owner' 20428 $P5.'ParameterModifierList'(__ARG_2, $P6) 20429 set $P4, $P5 20430 setattribute self, 'modifiers', $P4 20431 $P1 = __ARG_2.'get'() 20432 __label_6: # endif 20433 $P2 = $P1.'isop'("=") 20434 if_null $P2, __label_7 20435 unless $P2 goto __label_7 20436 new $P5, [ 'Winxed'; 'Compiler'; 'FunctionParameterDefault' ] 20437 $P5.'FunctionParameterDefault'(__ARG_2, __ARG_1, self) 20438 set $P4, $P5 20439 setattribute self, 'defaultexpr', $P4 20440 goto __label_8 20441 __label_7: # else 20442 __ARG_2.'unget'($P1) 20443 __label_8: # endif 20444 20445.end # FunctionParameter 20446 20447 20448.sub 'clone' :method 20449 .param pmc __ARG_1 20450 new $P1, [ 'Winxed'; 'Compiler'; 'FunctionParameter' ] 20451 setattribute $P1, 'func', __ARG_1 20452 getattribute $P3, self, 'name' 20453 setattribute $P1, 'name', $P3 20454 getattribute $P3, self, 'type' 20455 setattribute $P1, 'type', $P3 20456 getattribute $P2, self, 'modifiers' 20457 if_null $P2, __label_1 20458 getattribute $P5, self, 'modifiers' 20459 getattribute $P6, __ARG_1, 'owner' 20460 $P4 = $P5.'clone'($P6) 20461 setattribute $P1, 'modifiers', $P4 20462 __label_1: # endif 20463 .return($P1) 20464 20465.end # clone 20466 20467 20468.sub 'optimize' :method 20469 getattribute $P1, self, 'func' 20470 $S2 = $P1.'generateparamnum'() 20471 concat $S1, "__ARG_", $S2 20472 getattribute $P3, self, 'name' 20473 getattribute $P4, self, 'type' 20474 $P1.'createvarnamed'($P3, $P4, $S1) 20475 getattribute $P3, self, 'modifiers' 20476 if_null $P3, __label_1 20477 getattribute $P4, self, 'modifiers' 20478 $P4.'optimize'() 20479 __label_1: # endif 20480 getattribute $P2, self, 'defaultexpr' 20481 if_null $P2, __label_2 20482 $P2.'optimize'() 20483 $P3 = self.'getvar'() 20484 $S2 = $P3.'getreg'() 20485 concat $S3, "__opt_flag", $S2 20486 $P2.'setoptflag'($S3) 20487 __label_2: # endif 20488 .return(self) 20489 20490.end # optimize 20491 20492 20493.sub 'emit' :method 20494 .param pmc __ARG_1 20495.const 'Sub' WSubId_144 = "WSubId_144" 20496 getattribute $P1, self, 'func' 20497 getattribute $P5, self, 'name' 20498 null $S1 20499 if_null $P5, __label_1 20500 set $S1, $P5 20501 __label_1: 20502 $P2 = self.'getvar'() 20503 $P6 = $P2.'gettype'() 20504 $P5 = WSubId_144($P6) 20505 null $S2 20506 if_null $P5, __label_2 20507 set $S2, $P5 20508 __label_2: 20509 $P5 = $P2.'getreg'() 20510 __ARG_1.'print'(" .param ", $S2, " ", $P5) 20511 getattribute $P3, self, 'modifiers' 20512 if_null $P3, __label_3 20513 getattribute $P5, $P1, 'start' 20514 $P3.'emitmodifiers'(__ARG_1, $P5, $S1) 20515 __label_3: # endif 20516 getattribute $P4, self, 'defaultexpr' 20517 if_null $P4, __label_4 20518 $P5 = $P4.'getoptflag'() 20519 __ARG_1.'print'(" :optional\n .param int ", $P5, " :opt_flag") 20520 __label_4: # endif 20521 __ARG_1.'say'("") 20522 20523.end # emit 20524 20525 20526.sub 'emitdefault' :method 20527 .param pmc __ARG_1 20528 getattribute $P1, self, 'defaultexpr' 20529 if_null $P1, __label_1 20530 $P1.'emit'(__ARG_1) 20531 __label_1: # endif 20532 20533.end # emitdefault 20534 20535 20536.sub 'get_type' :method 20537 getattribute $P1, self, 'type' 20538 .return($P1) 20539 20540.end # get_type 20541 20542 20543.sub 'wantMulti' :method 20544 getattribute $P1, self, 'want_multi' 20545 isnull $I1, $P1 20546 not $I1 20547 .return($I1) 20548 20549.end # wantMulti 20550 20551 20552.sub 'get_pir_multi_type' :method 20553.const 'Sub' WSubId_144 = "WSubId_144" 20554.const 'Sub' SyntaxError = "SyntaxError" 20555 getattribute $P1, self, 'classtype' 20556 unless_null $P1, __label_1 20557 getattribute $P3, self, 'type' 20558 .tailcall WSubId_144($P3) 20559 __label_1: # endif 20560 getattribute $P4, self, 'func' 20561 getattribute $P3, $P4, 'owner' 20562 $P2 = $P1.'checknskey'($P3) 20563 unless_null $P2, __label_2 20564 SyntaxError("class not found", $P1) 20565 __label_2: # endif 20566 .tailcall $P2.'getparrotkey'() 20567 20568.end # get_pir_multi_type 20569 20570 20571.sub 'getvar' :method 20572 getattribute $P1, self, 'func' 20573 getattribute $P2, self, 'name' 20574 .tailcall $P1.'getvar'($P2) 20575 20576.end # getvar 20577 20578.sub Winxed_class_init :anon :load :init 20579 newclass $P0, [ 'Winxed'; 'Compiler'; 'FunctionParameter' ] 20580 addattribute $P0, 'func' 20581 addattribute $P0, 'name' 20582 addattribute $P0, 'modifiers' 20583 addattribute $P0, 'type' 20584 addattribute $P0, 'want_multi' 20585 addattribute $P0, 'classtype' 20586 addattribute $P0, 'defaultexpr' 20587.end 20588.namespace [ 'Winxed'; 'Compiler'; 'FunctionParameterDefault' ] 20589 20590.sub 'FunctionParameterDefault' :method 20591 .param pmc __ARG_1 20592 .param pmc __ARG_2 20593 .param pmc __ARG_3 20594.const 'Sub' WSubId_75 = "WSubId_75" 20595 setattribute self, 'owner', __ARG_2 20596 setattribute self, 'param', __ARG_3 20597 $P2 = WSubId_75(__ARG_1, __ARG_2) 20598 setattribute self, 'expr', $P2 20599 20600.end # FunctionParameterDefault 20601 20602 20603.sub 'clone' :method 20604 .param pmc __ARG_1 20605 .param pmc __ARG_2 20606 new $P1, [ 'Winxed'; 'Compiler'; 'FunctionParameterDefault' ] 20607 setattribute $P1, 'owner', __ARG_1 20608 setattribute $P1, 'param', __ARG_2 20609 getattribute $P4, self, 'expr' 20610 $P3 = $P4.'clone'(__ARG_1) 20611 setattribute $P1, 'expr', $P3 20612 .return($P1) 20613 20614.end # clone 20615 20616 20617.sub 'optimize' :method 20618 getattribute $P4, self, 'expr' 20619 $P3 = $P4.'optimize'() 20620 setattribute self, 'expr', $P3 20621 getattribute $P2, self, 'param' 20622 $P1 = $P2.'getvar'() 20623 20624.end # optimize 20625 20626 20627.sub 'setoptflag' :method 20628 .param string __ARG_1 20629 box $P1, __ARG_1 20630 setattribute self, 'reg', $P1 20631 20632.end # setoptflag 20633 20634 20635.sub 'getoptflag' :method 20636.const 'Sub' InternalError = "InternalError" 20637 getattribute $P1, self, 'reg' 20638 unless_null $P1, __label_1 20639 getattribute $P2, self, 'param' 20640 InternalError("Invalid parameter default usage", $P2) 20641 __label_1: # endif 20642 set $S1, $P1 20643 .return($S1) 20644 20645.end # getoptflag 20646 20647 20648.sub 'emit' :method 20649 .param pmc __ARG_1 20650 getattribute $P1, self, 'expr' 20651 $P5 = $P1.'isnull'() 20652 if $P5 goto __label_1 20653 getattribute $P2, self, 'param' 20654 $P3 = $P2.'getvar'() 20655 getattribute $P6, self, 'owner' 20656 $P5 = $P6.'genlabel'() 20657 null $S1 20658 if_null $P5, __label_2 20659 set $S1, $P5 20660 __label_2: 20661 $P5 = self.'getoptflag'() 20662 null $S2 20663 if_null $P5, __label_3 20664 set $S2, $P5 20665 __label_3: 20666 __ARG_1.'emitif'($S2, $S1) 20667 $P5 = $P3.'getreg'() 20668 null $S3 20669 if_null $P5, __label_4 20670 set $S3, $P5 20671 __label_4: 20672 $P5 = $P3.'gettype'() 20673 null $S4 20674 if_null $P5, __label_5 20675 set $S4, $P5 20676 __label_5: 20677 $P5 = $P1.'checkresult'() 20678 set $S5, $P5 20679 ne $S4, $S5, __label_6 20680 $P1.'emit_init'(__ARG_1, $S3) 20681 goto __label_7 20682 __label_6: # else 20683 $P4 = $P1.'emit_get'(__ARG_1) 20684 ne $S4, "P", __label_8 20685 __ARG_1.'emitbox'($S3, $P4) 20686 goto __label_9 20687 __label_8: # else 20688 __ARG_1.'emitset'($S3, $P4) 20689 __label_9: # endif 20690 __label_7: # endif 20691 __ARG_1.'emitlabel'($S1) 20692 __label_1: # endif 20693 20694.end # emit 20695 20696.sub Winxed_class_init :anon :load :init 20697 newclass $P0, [ 'Winxed'; 'Compiler'; 'FunctionParameterDefault' ] 20698 addattribute $P0, 'owner' 20699 addattribute $P0, 'param' 20700 addattribute $P0, 'expr' 20701 addattribute $P0, 'reg' 20702.end 20703.namespace [ 'Winxed'; 'Compiler' ] 20704 20705.sub 'parseParameter' :subid('WSubId_145') 20706 .param pmc __ARG_1 20707 .param pmc __ARG_2 20708 new $P2, [ 'Winxed'; 'Compiler'; 'FunctionParameter' ] 20709 $P2.'FunctionParameter'(__ARG_2, __ARG_1) 20710 set $P1, $P2 20711 .return($P1) 20712 20713.end # parseParameter 20714 20715.namespace [ 'Winxed'; 'Compiler'; 'FunctionParameterList' ] 20716 20717.sub 'FunctionParameterList' :method 20718 .param pmc __ARG_1 20719 .param pmc __ARG_2 20720.const 'Sub' WSubId_74 = "WSubId_74" 20721.const 'Sub' WSubId_145 = "WSubId_145" 20722 $P2 = WSubId_74(__ARG_1, __ARG_2, WSubId_145, ")") 20723 setattribute self, 'paramlist', $P2 20724 20725.end # FunctionParameterList 20726 20727 20728.sub 'clone' :method 20729 .param pmc __ARG_1 20730 new $P1, [ 'Winxed'; 'Compiler'; 'FunctionParameterList' ] 20731 getattribute $P2, self, 'paramlist' 20732 set $P3, __ARG_1 20733.const 'Sub' bindlast = "bindlast" 20734.const 'Sub' bindmethod = "bindmethod" 20735 set $P4, $P2 20736 root_new $P5, ['parrot';'ResizablePMCArray'] 20737 $P10 = bindmethod("clone") 20738 $P6 = bindlast($P10, $P3) 20739 if_null $P4, __label_2 20740 iter $P11, $P4 20741 set $P11, 0 20742 __label_1: # for iteration 20743 unless $P11 goto __label_2 20744 shift $P7, $P11 20745 $P12 = $P6($P7) 20746 push $P5, $P12 20747 goto __label_1 20748 __label_2: # endfor 20749 set $P9, $P5 20750 set $P8, $P9 20751 setattribute $P1, 'paramlist', $P8 20752 .return($P1) 20753 20754.end # clone 20755 20756 20757.sub 'optimize' :method 20758 getattribute $P1, self, 'paramlist' 20759 if_null $P1, __label_2 20760 elements $I1, $P1 20761 goto __label_1 20762 __label_2: 20763 null $I1 20764 __label_1: 20765 null $I2 20766 __label_5: # for condition 20767 ge $I2, $I1, __label_4 20768 $P3 = $P1[$I2] 20769 $P2 = $P3.'optimize'() 20770 $P1[$I2] = $P2 20771 __label_3: # for iteration 20772 inc $I2 20773 goto __label_5 20774 __label_4: # for end 20775 20776.end # optimize 20777 20778 20779.sub 'emit' :method 20780 .param pmc __ARG_1 20781 set $P1, __ARG_1 20782 getattribute $P2, self, 'paramlist' 20783.const 'Sub' bindlast = "bindlast" 20784.const 'Sub' bindmethod = "bindmethod" 20785 set $P3, $P2 20786 $P6 = bindmethod("emit") 20787 $P4 = bindlast($P6, $P1) 20788 if_null $P3, __label_2 20789 iter $P7, $P3 20790 set $P7, 0 20791 __label_1: # for iteration 20792 unless $P7 goto __label_2 20793 shift $P5, $P7 20794 $P4($P5) 20795 goto __label_1 20796 __label_2: # endfor 20797 20798.end # emit 20799 20800 20801.sub 'emitdefault' :method 20802 .param pmc __ARG_1 20803.const 'Sub' bindlast = "bindlast" 20804.const 'Sub' bindmethod = "bindmethod" 20805 getattribute $P1, self, 'paramlist' 20806 $P4 = bindmethod("emitdefault") 20807 $P2 = bindlast($P4, __ARG_1) 20808 if_null $P1, __label_2 20809 iter $P5, $P1 20810 set $P5, 0 20811 __label_1: # for iteration 20812 unless $P5 goto __label_2 20813 shift $P3, $P5 20814 $P2($P3) 20815 goto __label_1 20816 __label_2: # endfor 20817 20818.end # emitdefault 20819 20820 20821.sub 'wantMulti' :method 20822 getattribute $P2, self, 'paramlist' 20823 if_null $P2, __label_2 20824 iter $P3, $P2 20825 set $P3, 0 20826 __label_1: # for iteration 20827 unless $P3 goto __label_2 20828 shift $P1, $P3 20829 $P4 = $P1.'wantMulti'() 20830 if_null $P4, __label_3 20831 unless $P4 goto __label_3 20832 .return(1) 20833 __label_3: # endif 20834 goto __label_1 20835 __label_2: # endfor 20836 .return(0) 20837 20838.end # wantMulti 20839 20840 20841.sub 'addmultisig' :method 20842 .param pmc __ARG_1 20843.const 'Sub' bindmethod = "bindmethod" 20844 getattribute $P1, self, 'paramlist' 20845 set $P2, __ARG_1 20846 $P3 = bindmethod("get_pir_multi_type") 20847 if_null $P1, __label_2 20848 iter $P5, $P1 20849 set $P5, 0 20850 __label_1: # for iteration 20851 unless $P5 goto __label_2 20852 shift $P4, $P5 20853 $P6 = $P3($P4) 20854 push $P2, $P6 20855 goto __label_1 20856 __label_2: # endfor 20857 20858.end # addmultisig 20859 20860.sub Winxed_class_init :anon :load :init 20861 newclass $P0, [ 'Winxed'; 'Compiler'; 'FunctionParameterList' ] 20862 addattribute $P0, 'paramlist' 20863.end 20864.namespace [ 'Winxed'; 'Compiler'; 'FunctionExtern' ] 20865 20866.sub 'FunctionExtern' :method 20867 .param pmc __ARG_1 20868 .param pmc __ARG_2 20869 self.'initbase'(__ARG_1, __ARG_2) 20870 setattribute self, 'name', __ARG_1 20871 20872.end # FunctionExtern 20873 20874 20875.sub 'emit_get' :method 20876 .param pmc __ARG_1 20877 .param pmc __ARG_2 20878 getattribute $P2, self, 'owner' 20879 $P1 = $P2.'getpath'() 20880 $P2 = __ARG_2.'tempreg'("P") 20881 null $S1 20882 if_null $P2, __label_1 20883 set $S1, $P2 20884 __label_1: 20885 self.'annotate'(__ARG_1) 20886 getattribute $P2, self, 'name' 20887 $P1.'emit_get_global'(__ARG_1, __ARG_2, $S1, $P2) 20888 .return($S1) 20889 20890.end # emit_get 20891 20892.sub Winxed_class_init :anon :load :init 20893 newclass $P0, [ 'Winxed'; 'Compiler'; 'FunctionExtern' ] 20894 get_class $P1, [ 'Winxed'; 'Compiler'; 'CommonBase' ] 20895 addparent $P0, $P1 20896 addattribute $P0, 'name' 20897.end 20898.namespace [ 'Winxed'; 'Compiler' ] 20899 20900.sub 'emit_subid' :subid('WSubId_147') 20901 .param string __ARG_1 20902 concat $S1, ".const 'Sub' ", __ARG_1 20903 concat $S1, $S1, " = \"" 20904 concat $S1, $S1, __ARG_1 20905 concat $S1, $S1, "\"\n" 20906 .return($S1) 20907 20908.end # emit_subid 20909 20910.namespace [ 'Winxed'; 'Compiler'; 'FunctionModifierList' ] 20911 20912.sub 'FunctionModifierList' :method 20913 .param pmc __ARG_1 20914 .param pmc __ARG_2 20915 self.'ModifierList'(__ARG_1, __ARG_2) 20916 20917.end # FunctionModifierList 20918 20919 20920.sub 'emit' :method 20921 .param pmc __ARG_1 20922.const 'Sub' SyntaxError = "SyntaxError" 20923 $P3 = self.'getlist'() 20924 if_null $P3, __label_2 20925 iter $P4, $P3 20926 set $P4, 0 20927 __label_1: # for iteration 20928 unless $P4 goto __label_2 20929 shift $P1, $P4 20930 $P5 = $P1.'getname'() 20931 null $S1 20932 if_null $P5, __label_3 20933 set $S1, $P5 20934 __label_3: 20935 ne $S1, "multi", __label_4 20936 goto __label_1 # continue 20937 __label_4: # endif 20938 $P3 = $P1.'numargs'() 20939 set $I1, $P3 20940 __ARG_1.'print'(" :", $S1) 20941 le $I1, 0, __label_5 20942 __ARG_1.'print'("(") 20943 null $I2 20944 __label_8: # for condition 20945 ge $I2, $I1, __label_7 20946 $P2 = $P1.'getarg'($I2) 20947 $P3 = $P2.'isstringliteral'() 20948 if $P3 goto __label_9 20949 SyntaxError("Invalid modifier", $P2) 20950 __label_9: # endif 20951 $P3 = $P2.'getPirString'() 20952 __ARG_1.'print'($P3) 20953 sub $I3, $I1, 1 20954 ge $I2, $I3, __label_10 20955 __ARG_1.'print'(", ") 20956 __label_10: # endif 20957 __label_6: # for iteration 20958 inc $I2 20959 goto __label_8 20960 __label_7: # for end 20961 __ARG_1.'print'(")") 20962 __label_5: # endif 20963 goto __label_1 20964 __label_2: # endfor 20965 20966.end # emit 20967 20968.sub Winxed_class_init :anon :load :init 20969 newclass $P0, [ 'Winxed'; 'Compiler'; 'FunctionModifierList' ] 20970 get_class $P1, [ 'Winxed'; 'Compiler'; 'ModifierList' ] 20971 addparent $P0, $P1 20972.end 20973.namespace [ 'Winxed'; 'Compiler' ] 20974 20975.sub 'multi_sig_from_multi_modifier' :subid('WSubId_146') 20976 .param pmc __ARG_1 20977 .param pmc __ARG_2 20978.const 'Sub' SyntaxError = "SyntaxError" 20979 $P5 = __ARG_2.'numargs'() 20980 set $I1, $P5 20981 null $P1 20982 unless $I1 goto __label_1 20983 root_new $P5, ['parrot';'ResizablePMCArray'] 20984 set $P1, $P5 20985 null $I2 20986 __label_4: # for condition 20987 ge $I2, $I1, __label_3 20988 $P2 = __ARG_2.'getarg'($I2) 20989 $P5 = $P2.'isstringliteral'() 20990 set $I3, $P5 20991 if $I3 goto __label_7 20992 $P6 = $P2.'isidentifier'() 20993 set $I3, $P6 20994 if $I3 goto __label_8 20995 isa $I4, $P2, [ 'Winxed'; 'Compiler'; 'OpClassExpr' ] 20996 if $I4 goto __label_9 20997 goto __label_6 20998 __label_7: # case 20999 $P7 = $P2.'getStringValue'() 21000 push $P1, $P7 21001 goto __label_5 # break 21002 __label_8: # case 21003 $P8 = $P2.'getName'() 21004 null $S1 21005 if_null $P8, __label_10 21006 set $S1, $P8 21007 __label_10: 21008 if $S1 == "int" goto __label_13 21009 if $S1 == "string" goto __label_14 21010 if $S1 == "float" goto __label_15 21011 if $S1 == "var" goto __label_16 21012 goto __label_11 21013 __label_13: # case 21014 __label_14: # case 21015 push $P1, $S1 21016 goto __label_12 # break 21017 __label_15: # case 21018 push $P1, "num" 21019 goto __label_12 # break 21020 __label_16: # case 21021 push $P1, "pmc" 21022 goto __label_12 # break 21023 __label_11: # default 21024 SyntaxError("unsupported multi signature", $P2) 21025 __label_12: # switch end 21026 goto __label_5 # break 21027 __label_9: # case 21028 $P3 = $P2.'get_class_raw_key'() 21029 unless_null $P3, __label_17 21030 SyntaxError("class not found", $P2) 21031 __label_17: # endif 21032 set $P4, $P3 21033 null $S2 21034 elements $I3, $P4 21035 unless $I3 goto __label_18 21036 join $S3, "'; '", $P4 21037 concat $S5, "[ '", $S3 21038 concat $S5, $S5, "' ]" 21039 set $S2, $S5 21040 __label_18: # endif 21041 set $S4, $S2 21042 push $P1, $S4 21043 goto __label_5 # break 21044 __label_6: # default 21045 SyntaxError("unsupported multi signature", $P2) 21046 __label_5: # switch end 21047 __label_2: # for iteration 21048 inc $I2 21049 goto __label_4 21050 __label_3: # for end 21051 __label_1: # endif 21052 .return($P1) 21053 21054.end # multi_sig_from_multi_modifier 21055 21056.namespace [ 'Winxed'; 'Compiler'; 'FunctionBase' ] 21057 21058.sub 'FunctionBase' :method 21059 .param pmc __ARG_1 21060 .param pmc __ARG_2 21061 self.'BlockStatement'(__ARG_1, __ARG_2) 21062 box $P1, 0 21063 setattribute self, 'nlabel', $P1 21064 new $P3, [ 'Winxed'; 'Compiler'; 'RegisterStore' ] 21065 $P3.'RegisterStore'("I") 21066 set $P2, $P3 21067 setattribute self, 'regstI', $P2 21068 new $P3, [ 'Winxed'; 'Compiler'; 'RegisterStore' ] 21069 $P3.'RegisterStore'("N") 21070 set $P2, $P3 21071 setattribute self, 'regstN', $P2 21072 new $P3, [ 'Winxed'; 'Compiler'; 'RegisterStore' ] 21073 $P3.'RegisterStore'("S") 21074 set $P2, $P3 21075 setattribute self, 'regstS', $P2 21076 new $P3, [ 'Winxed'; 'Compiler'; 'RegisterStore' ] 21077 $P3.'RegisterStore'("P") 21078 set $P2, $P3 21079 setattribute self, 'regstP', $P2 21080 21081.end # FunctionBase 21082 21083 21084.sub 'clonebase' :method 21085 .param pmc __ARG_1 21086 .param pmc __ARG_2 21087 getattribute $P1, __ARG_1, 'start' 21088 self.'FunctionBase'($P1, __ARG_2) 21089 21090.end # clonebase 21091 21092 21093.sub 'getouter' :method 21094 .return(self) 21095 21096.end # getouter 21097 21098 21099.sub 'getlexicalouter' :method 21100 .return(self) 21101 21102.end # getlexicalouter 21103 21104 21105.sub 'allowtailcall' :method 21106 .return(1) 21107 21108.end # allowtailcall 21109 21110 21111.sub 'makesubid' :method 21112 getattribute $P1, self, 'subid' 21113 unless_null $P1, __label_1 21114 $P1 = self.'generatesubid'() 21115 setattribute self, 'subid', $P1 21116 __label_1: # endif 21117 .return($P1) 21118 21119.end # makesubid 21120 21121 21122.sub 'usesubid' :method 21123 .param string __ARG_1 21124 getattribute $P1, self, 'usedsubids' 21125 unless_null $P1, __label_1 21126 root_new $P1, ['parrot';'Hash'] 21127 setattribute self, 'usedsubids', $P1 21128 __label_1: # endif 21129 $P1[__ARG_1] = 1 21130 21131.end # usesubid 21132 21133 21134.sub 'same_scope_as' :method 21135 .param pmc __ARG_1 21136 issame $I1, self, __ARG_1 21137 .return($I1) 21138 21139.end # same_scope_as 21140 21141 21142.sub 'parse_parameters' :method 21143 .param pmc __ARG_1 21144.const 'Sub' SyntaxError = "SyntaxError" 21145 $P1 = __ARG_1.'get'() 21146 $P3 = $P1.'isop'(")") 21147 if $P3 goto __label_1 21148 __ARG_1.'unget'($P1) 21149 new $P3, [ 'Winxed'; 'Compiler'; 'FunctionParameterList' ] 21150 $P3.'FunctionParameterList'(__ARG_1, self) 21151 set $P2, $P3 21152 setattribute self, 'params', $P2 21153 $P3 = $P2.'wantMulti'() 21154 if_null $P3, __label_2 21155 unless $P3 goto __label_2 21156 isa $I1, self, [ 'Winxed'; 'Compiler'; 'FunctionStatement' ] 21157 if $I1 goto __label_3 21158 SyntaxError("Can't use multi signatures here", self) 21159 __label_3: # endif 21160 self.'setmulti'() 21161 __label_2: # endif 21162 __label_1: # endif 21163 21164.end # parse_parameters 21165 21166 21167.sub 'addlocalfunction' :method 21168 .param pmc __ARG_1 21169 getattribute $P1, self, 'localfun' 21170 unless_null $P1, __label_1 21171 root_new $P3, ['parrot';'ResizablePMCArray'] 21172 assign $P3, 1 21173 $P3[0] = __ARG_1 21174 setattribute self, 'localfun', $P3 21175 goto __label_2 21176 __label_1: # else 21177 push $P1, __ARG_1 21178 __label_2: # endif 21179 21180.end # addlocalfunction 21181 21182 21183.sub 'usenamespace' :method 21184 .param pmc __ARG_1 21185 getattribute $P1, self, 'usednamespaces' 21186 unless_null $P1, __label_1 21187 root_new $P6, ['parrot';'ResizablePMCArray'] 21188 assign $P6, 1 21189 $P6[0] = __ARG_1 21190 setattribute self, 'usednamespaces', $P6 21191 goto __label_2 21192 __label_1: # else 21193 set $P2, $P1 21194 set $P3, __ARG_1 21195 if_null $P2, __label_5 21196 iter $P8, $P2 21197 set $P8, 0 21198 __label_4: # for iteration 21199 unless $P8 goto __label_5 21200 shift $P4, $P8 21201 ne_addr $P4, $P3, __label_6 21202 set $P7, $P4 21203 goto __label_7 21204 __label_6: # endif 21205 goto __label_4 21206 __label_5: # endfor 21207 null $P7 21208 __label_7: 21209 set $P5, $P7 21210 if_null $P5, __label_3 21211 .return() 21212 __label_3: # endif 21213 push $P1, __ARG_1 21214 __label_2: # endif 21215 21216.end # usenamespace 21217 21218 21219.sub 'scopesearch' :method 21220 .param pmc __ARG_1 21221 .param int __ARG_2 21222 getattribute $P3, self, 'usednamespaces' 21223 if_null $P3, __label_2 21224 iter $P4, $P3 21225 set $P4, 0 21226 __label_1: # for iteration 21227 unless $P4 goto __label_2 21228 shift $P1, $P4 21229 $P2 = $P1.'scopesearch'(__ARG_1, __ARG_2) 21230 if_null $P2, __label_3 21231 .return($P2) 21232 __label_3: # endif 21233 goto __label_1 21234 __label_2: # endfor 21235 getattribute $P3, self, 'owner' 21236 .tailcall $P3.'scopesearch'(__ARG_1, __ARG_2) 21237 21238.end # scopesearch 21239 21240 21241.sub 'optimize' :method 21242.const 'Sub' WSubId_146 = "WSubId_146" 21243.const 'Sub' bindmethod = "bindmethod" 21244 getattribute $P1, self, 'modifiers' 21245 if_null $P1, __label_1 21246 $P2 = $P1.'pick'("multi") 21247 if_null $P2, __label_2 21248 self.'setmulti'() 21249 $P7 = WSubId_146(self, $P2) 21250 setattribute self, 'multi_sig', $P7 21251 __label_2: # endif 21252 __label_1: # endif 21253 getattribute $P6, self, 'params' 21254 if_null $P6, __label_3 21255 getattribute $P7, self, 'params' 21256 $P7.'optimize'() 21257 __label_3: # endif 21258 getattribute $P3, self, 'usednamespaces' 21259 $P4 = bindmethod("fixnamespaces") 21260 if_null $P3, __label_5 21261 iter $P8, $P3 21262 set $P8, 0 21263 __label_4: # for iteration 21264 unless $P8 goto __label_5 21265 shift $P5, $P8 21266 $P4($P5) 21267 goto __label_4 21268 __label_5: # endfor 21269 getattribute $P9, self, 'body' 21270 $P7 = $P9.'optimize'() 21271 setattribute self, 'body', $P7 21272 .return(self) 21273 21274.end # optimize 21275 21276 21277.sub 'setusedlex' :method 21278 .param string __ARG_1 21279 .param string __ARG_2 21280 getattribute $P1, self, 'usedlexicals' 21281 unless_null $P1, __label_1 21282 root_new $P1, ['parrot';'Hash'] 21283 setattribute self, 'usedlexicals', $P1 21284 __label_1: # endif 21285 $P1[__ARG_2] = __ARG_1 21286 21287.end # setusedlex 21288 21289 21290.sub 'setlex' :method 21291 .param string __ARG_1 21292 .param string __ARG_2 21293 getattribute $P1, self, 'lexicals' 21294 unless_null $P1, __label_1 21295 root_new $P1, ['parrot';'Hash'] 21296 setattribute self, 'lexicals', $P1 21297 __label_1: # endif 21298 $P1[__ARG_2] = __ARG_1 21299 21300.end # setlex 21301 21302 21303.sub 'createlex' :method 21304 .param pmc __ARG_1 21305 $P1 = __ARG_1.'getlex'() 21306 null $S1 21307 if_null $P1, __label_1 21308 set $S1, $P1 21309 __label_1: 21310 unless_null $S1, __label_2 21311 $S2 = self.'generatelexnum'() 21312 concat $S3, "'__WLEX_", $S2 21313 concat $S3, $S3, "'" 21314 set $S1, $S3 21315 __ARG_1.'createlex'($S1) 21316 __label_2: # endif 21317 .return($S1) 21318 21319.end # createlex 21320 21321 21322.sub 'createreg' :method 21323 .param string __ARG_1 21324.const 'Sub' InternalError = "InternalError" 21325 null $P1 21326 if_null __ARG_1, __label_1 21327 length $I1, __ARG_1 21328 ne $I1, 1, __label_1 21329 ord $I1, __ARG_1 21330 if $I1 == 73 goto __label_3 21331 if $I1 == 78 goto __label_4 21332 if $I1 == 83 goto __label_5 21333 if $I1 == 80 goto __label_6 21334 goto __label_1 21335 __label_3: # case 21336 getattribute $P1, self, 'regstI' 21337 goto __label_2 # break 21338 __label_4: # case 21339 getattribute $P1, self, 'regstN' 21340 goto __label_2 # break 21341 __label_5: # case 21342 getattribute $P1, self, 'regstS' 21343 goto __label_2 # break 21344 __label_6: # case 21345 getattribute $P1, self, 'regstP' 21346 goto __label_2 # break 21347 __label_1: # default 21348 concat $S2, "Invalid type in createreg: ", __ARG_1 21349 InternalError($S2) 21350 __label_2: # switch end 21351 $P2 = $P1.'createreg'() 21352 null $S1 21353 if_null $P2, __label_7 21354 set $S1, $P2 21355 __label_7: 21356 .return($S1) 21357 21358.end # createreg 21359 21360 21361.sub 'tempreg' :method 21362 .param string __ARG_1 21363.const 'Sub' InternalError = "InternalError" 21364 null $P1 21365 if_null __ARG_1, __label_1 21366 length $I1, __ARG_1 21367 ne $I1, 1, __label_1 21368 ord $I1, __ARG_1 21369 if $I1 == 73 goto __label_3 21370 if $I1 == 78 goto __label_4 21371 if $I1 == 83 goto __label_5 21372 if $I1 == 80 goto __label_6 21373 goto __label_1 21374 __label_3: # case 21375 getattribute $P1, self, 'regstI' 21376 goto __label_2 # break 21377 __label_4: # case 21378 getattribute $P1, self, 'regstN' 21379 goto __label_2 # break 21380 __label_5: # case 21381 getattribute $P1, self, 'regstS' 21382 goto __label_2 # break 21383 __label_6: # case 21384 getattribute $P1, self, 'regstP' 21385 goto __label_2 # break 21386 __label_1: # default 21387 concat $S2, "Invalid type in tempreg: ", __ARG_1 21388 InternalError($S2) 21389 __label_2: # switch end 21390 $P2 = $P1.'tempreg'() 21391 null $S1 21392 if_null $P2, __label_7 21393 set $S1, $P2 21394 __label_7: 21395 .return($S1) 21396 21397.end # tempreg 21398 21399 21400.sub 'freetemps' :method 21401.const 'Sub' bindmethod = "bindmethod" 21402 root_new $P1, ['parrot';'ResizablePMCArray'] 21403 assign $P1, 4 21404 getattribute $P4, self, 'regstI' 21405 $P1[0] = $P4 21406 getattribute $P5, self, 'regstN' 21407 $P1[1] = $P5 21408 getattribute $P6, self, 'regstS' 21409 $P1[2] = $P6 21410 getattribute $P7, self, 'regstP' 21411 $P1[3] = $P7 21412 $P2 = bindmethod("freetemps") 21413 if_null $P1, __label_2 21414 iter $P8, $P1 21415 set $P8, 0 21416 __label_1: # for iteration 21417 unless $P8 goto __label_2 21418 shift $P3, $P8 21419 $P2($P3) 21420 goto __label_1 21421 __label_2: # endfor 21422 21423.end # freetemps 21424 21425 21426.sub 'genlabel' :method 21427 getattribute $P1, self, 'nlabel' 21428 inc $P1 21429 set $I1, $P1 21430 set $S1, $I1 21431 concat $S2, "__label_", $S1 21432 .return($S2) 21433 21434.end # genlabel 21435 21436 21437.sub 'getbreaklabel' :method 21438 .param pmc __ARG_1 21439.const 'Sub' SyntaxError = "SyntaxError" 21440 SyntaxError("break not allowed here", __ARG_1) 21441 21442.end # getbreaklabel 21443 21444 21445.sub 'getcontinuelabel' :method 21446 .param pmc __ARG_1 21447.const 'Sub' SyntaxError = "SyntaxError" 21448 SyntaxError("continue not allowed here", __ARG_1) 21449 21450.end # getcontinuelabel 21451 21452 21453.sub 'emit_extra_modifiers' :method 21454 .param pmc __ARG_1 21455 21456.end # emit_extra_modifiers 21457 21458 21459.sub 'emit' :method 21460 .param pmc __ARG_1 21461.const 'Sub' WSubId_147 = "WSubId_147" 21462.const 'Sub' sformat = "sformat" 21463.const 'Sub' bindlast = "bindlast" 21464.const 'Sub' bindmethod = "bindmethod" 21465 getattribute $P15, self, 'name' 21466 null $S1 21467 if_null $P15, __label_1 21468 set $S1, $P15 21469 __label_1: 21470 __ARG_1.'say'() 21471 __ARG_1.'print'(".sub ") 21472 $P15 = self.'isanonymous'() 21473 if_null $P15, __label_2 21474 unless $P15 goto __label_2 21475 __ARG_1.'print'("'' :anon") 21476 goto __label_3 21477 __label_2: # else 21478 __ARG_1.'print'("'", $S1, "'") 21479 __label_3: # endif 21480 getattribute $P15, self, 'subid' 21481 if_null $P15, __label_4 21482 getattribute $P16, self, 'subid' 21483 __ARG_1.'print'(" :subid('", $P16, "')") 21484 __label_4: # endif 21485 getattribute $P1, self, 'outer' 21486 if_null $P1, __label_5 21487 getattribute $P15, self, 'usedlexicals' 21488 if_null $P15, __label_5 21489 isa $I2, $P1, [ 'Winxed'; 'Compiler'; 'InlinedBlock' ] 21490 unless $I2 goto __label_6 21491 $P1 = $P1.'getlexicalouter'() 21492 __label_6: # endif 21493 getattribute $P2, $P1, 'subid' 21494 if_null $P2, __label_7 21495 __ARG_1.'print'(" :outer('", $P2, "')") 21496 __label_7: # endif 21497 __label_5: # endif 21498 $P15 = self.'ismethod'() 21499 if_null $P15, __label_8 21500 unless $P15 goto __label_8 21501 __ARG_1.'print'(" :method") 21502 __label_8: # endif 21503 getattribute $P3, self, 'modifiers' 21504 if_null $P3, __label_9 21505 $P3.'emit'(__ARG_1) 21506 goto __label_10 21507 __label_9: # else 21508 ne $S1, "main", __label_11 21509 __ARG_1.'print'(" :main") 21510 __label_11: # endif 21511 __label_10: # endif 21512 self.'emit_extra_modifiers'(__ARG_1) 21513 __ARG_1.'say'() 21514 getattribute $P4, self, 'params' 21515 if_null $P4, __label_12 21516 $P4.'emit'(__ARG_1) 21517 __label_12: # endif 21518 getattribute $P5, self, 'usedsubids' 21519 root_new $P6, ['parrot';'ResizablePMCArray'] 21520 set $P7, WSubId_147 21521 if_null $P5, __label_14 21522 iter $P18, $P5 21523 set $P18, 0 21524 __label_13: # for iteration 21525 unless $P18 goto __label_14 21526 shift $P8, $P18 21527 $P15 = $P7($P8) 21528 push $P6, $P15 21529 goto __label_13 21530 __label_14: # endfor 21531 set $P17, $P6 21532 set $P15, $P17 21533 join $S4, "", $P15 21534 __ARG_1.'print'($S4) 21535 if_null $P4, __label_15 21536 $P4.'emitdefault'(__ARG_1) 21537 __label_15: # endif 21538 getattribute $P9, self, 'lexicals' 21539 getattribute $P10, self, 'usedlexicals' 21540 isnull $I2, $P9 21541 not $I2 21542 if $I2 goto __label_17 21543 isnull $I2, $P10 21544 not $I2 21545 __label_17: 21546 unless $I2 goto __label_16 21547 getattribute $P15, self, 'start' 21548 __ARG_1.'annotate'($P15) 21549 if_null $P9, __label_19 21550 iter $P19, $P9 21551 set $P19, 0 21552 __label_18: # for iteration 21553 unless $P19 goto __label_19 21554 shift $S2, $P19 21555 $P16 = $P9[$S2] 21556 $P15 = sformat(".lex %0, %1", $P16, $S2) 21557 __ARG_1.'say'($P15) 21558 goto __label_18 21559 __label_19: # endfor 21560 if_null $P10, __label_21 21561 iter $P20, $P10 21562 set $P20, 0 21563 __label_20: # for iteration 21564 unless $P20 goto __label_21 21565 shift $S3, $P20 21566 substr $S4, $S3, 0, 1 21567 eq $S4, "$", __label_22 21568 concat $S5, " .local pmc ", $S3 21569 __ARG_1.'say'($S5) 21570 __label_22: # endif 21571 $P15 = $P10[$S3] 21572 __ARG_1.'emitfind_lex'($S3, $P15) 21573 goto __label_20 21574 __label_21: # endfor 21575 __label_16: # endif 21576 $P15 = __ARG_1.'getDebug'() 21577 set $I1, $P15 21578 getattribute $P11, self, 'body' 21579 $P15 = $P11.'isempty'() 21580 if_null $P15, __label_23 21581 unless $P15 goto __label_23 21582 unless $I1 goto __label_25 21583 __ARG_1.'comment'("Empty body") 21584 __label_25: # endif 21585 goto __label_24 21586 __label_23: # else 21587 unless $I1 goto __label_26 21588 __ARG_1.'comment'("Body") 21589 __label_26: # endif 21590 $P11.'emit'(__ARG_1) 21591 $P15 = $P11.'getend'() 21592 __ARG_1.'annotate'($P15) 21593 __label_24: # endif 21594 __ARG_1.'say'("\n.end # ", $S1, "\n") 21595 getattribute $P12, self, 'localfun' 21596 $P15 = bindmethod("emit") 21597 $P13 = bindlast($P15, __ARG_1) 21598 if_null $P12, __label_28 21599 iter $P21, $P12 21600 set $P21, 0 21601 __label_27: # for iteration 21602 unless $P21 goto __label_28 21603 shift $P14, $P21 21604 $P13($P14) 21605 goto __label_27 21606 __label_28: # endfor 21607 21608.end # emit 21609 21610.sub Winxed_class_init :anon :load :init 21611 newclass $P0, [ 'Winxed'; 'Compiler'; 'FunctionBase' ] 21612 get_class $P1, [ 'Winxed'; 'Compiler'; 'BlockStatement' ] 21613 addparent $P0, $P1 21614 addattribute $P0, 'name' 21615 addattribute $P0, 'subid' 21616 addattribute $P0, 'modifiers' 21617 addattribute $P0, 'params' 21618 addattribute $P0, 'body' 21619 addattribute $P0, 'regstI' 21620 addattribute $P0, 'regstN' 21621 addattribute $P0, 'regstS' 21622 addattribute $P0, 'regstP' 21623 addattribute $P0, 'nlabel' 21624 addattribute $P0, 'localfun' 21625 addattribute $P0, 'lexicals' 21626 addattribute $P0, 'usedlexicals' 21627 addattribute $P0, 'usedsubids' 21628 addattribute $P0, 'outer' 21629.end 21630.namespace [ 'Winxed'; 'Compiler'; 'FunctionStatement' ] 21631 21632.sub 'FunctionStatement' :method 21633 .param pmc __ARG_1 21634 .param pmc __ARG_2 21635 .param pmc __ARG_3 21636 self.'FunctionBase'(__ARG_1, __ARG_3) 21637 box $P1, 0 21638 setattribute self, 'paramnum', $P1 21639 box $P1, 0 21640 setattribute self, 'lexnum', $P1 21641 new $P2, [ 'Boolean' ] 21642 setattribute self, 'is_multi', $P2 21643 self.'parse'(__ARG_2) 21644 21645.end # FunctionStatement 21646 21647 21648.sub 'isanonymous' :method 21649 .return(0) 21650 21651.end # isanonymous 21652 21653 21654.sub 'generateparamnum' :method 21655 getattribute $P1, self, 'paramnum' 21656 inc $P1 21657 set $I1, $P1 21658 .return($I1) 21659 21660.end # generateparamnum 21661 21662 21663.sub 'generatelexnum' :method 21664 getattribute $P1, self, 'lexnum' 21665 inc $P1 21666 set $I1, $P1 21667 .return($I1) 21668 21669.end # generatelexnum 21670 21671 21672.sub 'ismethod' :method 21673 .return(0) 21674 21675.end # ismethod 21676 21677 21678.sub 'ismulti' :method 21679 getattribute $P1, self, 'is_multi' 21680 if_null $P1, __label_2 21681 unless $P1 goto __label_2 21682 set $I1, 1 21683 goto __label_1 21684 __label_2: 21685 null $I1 21686 __label_1: 21687 .return($I1) 21688 21689.end # ismulti 21690 21691 21692.sub 'setmulti' :method 21693 getattribute $P1, self, 'is_multi' 21694 assign $P1, 1 21695 21696.end # setmulti 21697 21698 21699.sub 'default_multi_sig' :method 21700 root_new $P1, ['parrot';'ResizablePMCArray'] 21701 $P2 = self.'ismethod'() 21702 if_null $P2, __label_1 21703 unless $P2 goto __label_1 21704 push $P1, "_" 21705 __label_1: # endif 21706 getattribute $P2, self, 'params' 21707 if_null $P2, __label_2 21708 getattribute $P3, self, 'params' 21709 $P3.'addmultisig'($P1) 21710 __label_2: # endif 21711 .return($P1) 21712 21713.end # default_multi_sig 21714 21715 21716.sub 'parse' :method 21717 .param pmc __ARG_1 21718.const 'Sub' bindlast1 = "bindlast1" 21719.const 'Sub' WSubId_148 = "WSubId_148" 21720.const 'Sub' WSubId_29 = "WSubId_29" 21721 $P1 = __ARG_1.'get'() 21722 setattribute self, 'name', $P1 21723 $P2 = __ARG_1.'get'() 21724 $P4 = $P2.'isop'("[") 21725 if_null $P4, __label_1 21726 unless $P4 goto __label_1 21727 new $P7, [ 'Winxed'; 'Compiler'; 'FunctionModifierList' ] 21728 getattribute $P8, self, 'owner' 21729 $P7.'FunctionModifierList'(__ARG_1, $P8) 21730 set $P6, $P7 21731 setattribute self, 'modifiers', $P6 21732 $P2 = __ARG_1.'get'() 21733 __label_1: # endif 21734 bindlast1("(", $P2) 21735 self.'parse_parameters'(__ARG_1) 21736 getattribute $P5, self, 'owner' 21737 $P4 = $P5.'getpath'() 21738 $P6 = $P1.'getidentifier'() 21739 $P3 = $P4.'createchild'($P6) 21740 $P4 = $P3.'fullname'() 21741 WSubId_148(self, "__FUNCTION__", $P4) 21742 $P2 = __ARG_1.'get'() 21743 $P4 = $P2.'isop'("{") 21744 if $P4 goto __label_2 21745 WSubId_29("{", $P2) 21746 __label_2: # endif 21747 new $P6, [ 'Winxed'; 'Compiler'; 'CompoundStatement' ] 21748 $P6.'CompoundStatement'($P2, __ARG_1, self) 21749 set $P5, $P6 21750 setattribute self, 'body', $P5 21751 .return(self) 21752 21753.end # parse 21754 21755 21756.sub 'emit_extra_modifiers' :method 21757 .param pmc __ARG_1 21758 getattribute $P2, self, 'is_multi' 21759 if_null $P2, __label_1 21760 unless $P2 goto __label_1 21761 getattribute $P1, self, 'multi_sig' 21762 unless_null $P1, __label_2 21763 $P1 = self.'default_multi_sig'() 21764 __label_2: # endif 21765 join $S1, ", ", $P1 21766 __ARG_1.'print'(" :multi(", $S1, ")") 21767 __label_1: # endif 21768 21769.end # emit_extra_modifiers 21770 21771.sub Winxed_class_init :anon :load :init 21772 newclass $P0, [ 'Winxed'; 'Compiler'; 'FunctionStatement' ] 21773 get_class $P1, [ 'Winxed'; 'Compiler'; 'FunctionBase' ] 21774 addparent $P0, $P1 21775 addattribute $P0, 'paramnum' 21776 addattribute $P0, 'lexnum' 21777 addattribute $P0, 'is_multi' 21778 addattribute $P0, 'multi_sig' 21779.end 21780.namespace [ 'Winxed'; 'Compiler'; 'LocalFunctionStatement' ] 21781 21782.sub 'LocalFunctionStatement' :method 21783 .param pmc __ARG_1 21784 .param pmc __ARG_2 21785 .param pmc __ARG_3 21786.const 'Sub' bindlast1 = "bindlast1" 21787 self.'FunctionBase'(__ARG_1, __ARG_3) 21788 $P1 = __ARG_3.'getouter'() 21789 isa $I2, $P1, [ 'Winxed'; 'Compiler'; 'InlineStatement' ] 21790 not $I1, $I2 21791 unless $I1 goto __label_1 21792 self.'activate'() 21793 __label_1: # endif 21794 self.'parse_parameters'(__ARG_2) 21795 $P2 = __ARG_2.'get'() 21796 bindlast1("{", $P2) 21797 new $P5, [ 'Winxed'; 'Compiler'; 'CompoundStatement' ] 21798 $P5.'CompoundStatement'($P2, __ARG_2, self) 21799 set $P4, $P5 21800 setattribute self, 'body', $P4 21801 unless $I1 goto __label_2 21802 __ARG_3.'addlocalfunction'(self) 21803 __label_2: # endif 21804 21805.end # LocalFunctionStatement 21806 21807 21808.sub 'clone' :method 21809 .param pmc __ARG_1 21810 new $P1, [ 'Winxed'; 'Compiler'; 'LocalFunctionStatement' ] 21811 $P1.'clonebase'(self, __ARG_1) 21812 $P1.'activate'() 21813 getattribute $P2, self, 'params' 21814 if_null $P2, __label_1 21815 getattribute $P5, self, 'params' 21816 $P4 = $P5.'clone'($P1) 21817 setattribute $P1, 'params', $P4 21818 __label_1: # endif 21819 getattribute $P4, self, 'body' 21820 $P3 = $P4.'clone'($P1) 21821 setattribute $P1, 'body', $P3 21822 __ARG_1.'addlocalfunction'($P1) 21823 .return($P1) 21824 21825.end # clone 21826 21827 21828.sub 'activate' :method 21829 getattribute $P2, self, 'owner' 21830 $P1 = $P2.'getouter'() 21831 $P1.'makesubid'() 21832 setattribute self, 'outer', $P1 21833 $P3 = self.'makesubid'() 21834 setattribute self, 'name', $P3 21835 21836.end # activate 21837 21838 21839.sub 'isanonymous' :method 21840 .return(1) 21841 21842.end # isanonymous 21843 21844 21845.sub 'ismethod' :method 21846 .return(0) 21847 21848.end # ismethod 21849 21850 21851.sub 'needclosure' :method 21852.const 'Sub' bindmethod = "bindmethod" 21853 getattribute $P4, self, 'lexicals' 21854 isnull $I1, $P4 21855 not $I1 21856 if $I1 goto __label_2 21857 getattribute $P5, self, 'usedlexicals' 21858 isnull $I1, $P5 21859 not $I1 21860 __label_2: 21861 unless $I1 goto __label_1 21862 .return(1) 21863 __label_1: # endif 21864 getattribute $P1, self, 'localfun' 21865 $P2 = bindmethod("needclosure") 21866 if_null $P1, __label_4 21867 iter $P7, $P1 21868 set $P7, 0 21869 __label_3: # for iteration 21870 unless $P7 goto __label_4 21871 shift $P3, $P7 21872 $P4 = $P2($P3) 21873 if_null $P4, __label_5 21874 unless $P4 goto __label_5 21875 set $P6, $P3 21876 goto __label_6 21877 __label_5: # endif 21878 goto __label_3 21879 __label_4: # endfor 21880 null $P6 21881 __label_6: 21882 set $P4, $P6 21883 isnull $I1, $P4 21884 not $I1 21885 .return($I1) 21886 21887.end # needclosure 21888 21889 21890.sub 'getsubid' :method 21891 getattribute $P1, self, 'subid' 21892 .return($P1) 21893 21894.end # getsubid 21895 21896 21897.sub 'generateparamnum' :method 21898 getattribute $P1, self, 'outer' 21899 .tailcall $P1.'generateparamnum'() 21900 21901.end # generateparamnum 21902 21903 21904.sub 'generatelexnum' :method 21905 getattribute $P1, self, 'outer' 21906 .tailcall $P1.'generatelexnum'() 21907 21908.end # generatelexnum 21909 21910 21911.sub 'checkvarlexical' :method 21912 .param pmc __ARG_1 21913 .param pmc __ARG_2 21914 $P5 = __ARG_2.'isconst'() 21915 if_null $P5, __label_1 21916 unless $P5 goto __label_1 21917 .return(__ARG_2) 21918 __label_1: # endif 21919 $P5 = __ARG_2.'getreg'() 21920 null $S1 21921 if_null $P5, __label_2 21922 set $S1, $P5 21923 __label_2: 21924 substr $S4, $S1, 0, 6 21925 ne $S4, "WSubId", __label_3 21926 self.'usesubid'($S1) 21927 .return(__ARG_2) 21928 __label_3: # endif 21929 $P1 = __ARG_2.'getscope'() 21930 $P2 = $P1.'getouter'() 21931 isa $I2, $P2, [ 'Winxed'; 'Compiler'; 'FunctionBase' ] 21932 if $I2 goto __label_5 21933 isa $I2, $P2, [ 'Winxed'; 'Compiler'; 'InlinedBlock' ] 21934 __label_5: 21935 unless $I2 goto __label_4 21936 isa $I3, $P2, [ 'Winxed'; 'Compiler'; 'InlinedBlock' ] 21937 unless $I3 goto __label_6 21938 $P2 = $P2.'getlexicalouter'() 21939 __label_6: # endif 21940 getattribute $P3, self, 'outer' 21941 isa $I2, $P3, [ 'Winxed'; 'Compiler'; 'InlinedBlock' ] 21942 unless $I2 goto __label_7 21943 $P3 = $P3.'getlexicalouter'() 21944 __label_7: # endif 21945 $P5 = $P2.'same_scope_as'($P3) 21946 if_null $P5, __label_8 21947 unless $P5 goto __label_8 21948 $P6 = $P1.'makelexical'(__ARG_2) 21949 null $S2 21950 if_null $P6, __label_9 21951 set $S2, $P6 21952 __label_9: 21953 $P5 = __ARG_2.'getflags'() 21954 set $I2, $P5 21955 bor $I1, $I2, 2 21956 $P5 = __ARG_2.'gettype'() 21957 null $S3 21958 if_null $P5, __label_10 21959 set $S3, $P5 21960 __label_10: 21961 eq $S3, "P", __label_11 21962 bor $I1, $I1, 1 21963 __label_11: # endif 21964 $P5 = __ARG_2.'gettype'() 21965 $P4 = self.'createvar'(__ARG_1, $P5, $I1) 21966 $P4.'setlex'($S2) 21967 $P5 = $P4.'getreg'() 21968 self.'setusedlex'($S2, $P5) 21969 .return($P4) 21970 __label_8: # endif 21971 __label_4: # endif 21972 .return(__ARG_2) 21973 21974.end # checkvarlexical 21975 21976 21977.sub 'getvar' :method 21978 .param pmc __ARG_1 21979.const 'Sub' InternalError = "InternalError" 21980 $P1 = self.'getlocalvar'(__ARG_1) 21981 unless_null $P1, __label_1 21982 $P1 = self.'getusedvar'(__ARG_1) 21983 __label_1: # endif 21984 unless_null $P1, __label_2 21985 getattribute $P3, self, 'owner' 21986 $P1 = $P3.'getvar'(__ARG_1) 21987 unless_null $P1, __label_3 21988 set $S3, __ARG_1 21989 ne $S3, "self", __label_5 21990 getattribute $P2, self, 'outer' 21991 isa $I1, $P2, [ 'Winxed'; 'Compiler'; 'InlinedBlock' ] 21992 unless $I1 goto __label_6 21993 $P2 = $P2.'getlexicalouter'() 21994 __label_6: # endif 21995 $P3 = $P2.'ismethod'() 21996 if_null $P3, __label_7 21997 unless $P3 goto __label_7 21998 $P4 = $P2.'makelexicalself'() 21999 null $S1 22000 if_null $P4, __label_8 22001 set $S1, $P4 22002 __label_8: 22003 $P1 = self.'createvar'(__ARG_1, "P") 22004 $P3 = $P1.'getreg'() 22005 null $S2 22006 if_null $P3, __label_9 22007 set $S2, $P3 22008 __label_9: 22009 self.'setusedlex'($S1, $S2) 22010 __label_7: # endif 22011 __label_5: # endif 22012 goto __label_4 22013 __label_3: # else 22014 $P1 = self.'checkvarlexical'(__ARG_1, $P1) 22015 __label_4: # endif 22016 __label_2: # endif 22017 if_null $P1, __label_10 22018 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'VarData' ] 22019 if $I1 goto __label_10 22020 InternalError("Incorrect data for variable in LocalFunction") 22021 __label_10: # endif 22022 .return($P1) 22023 22024.end # getvar 22025 22026.sub Winxed_class_init :anon :load :init 22027 newclass $P0, [ 'Winxed'; 'Compiler'; 'LocalFunctionStatement' ] 22028 get_class $P1, [ 'Winxed'; 'Compiler'; 'FunctionBase' ] 22029 addparent $P0, $P1 22030.end 22031.namespace [ 'Winxed'; 'Compiler'; 'MethodStatement' ] 22032 22033.sub 'MethodStatement' :method 22034 .param pmc __ARG_1 22035 .param pmc __ARG_2 22036 .param pmc __ARG_3 22037 self.'FunctionStatement'(__ARG_1, __ARG_2, __ARG_3) 22038 22039.end # MethodStatement 22040 22041 22042.sub 'ismethod' :method 22043 .return(1) 22044 22045.end # ismethod 22046 22047.sub Winxed_class_init :anon :load :init 22048 newclass $P0, [ 'Winxed'; 'Compiler'; 'MethodStatement' ] 22049 get_class $P1, [ 'Winxed'; 'Compiler'; 'FunctionStatement' ] 22050 addparent $P0, $P1 22051.end 22052.namespace [ 'Winxed'; 'Compiler'; 'InlineParam' ] 22053 22054.sub 'InlineParam' :method 22055 .param pmc __ARG_1 22056 .param pmc __ARG_2 22057.const 'Sub' WSubId_136 = "WSubId_136" 22058 null $I1 22059 $P1 = __ARG_1.'get'() 22060 self.'initbase'($P1, __ARG_2) 22061 $P3 = $P1.'getidentifier'() 22062 set $S2, $P3 22063 ne $S2, "const", __label_1 22064 bor $I1, $I1, 1 22065 $P1 = __ARG_1.'get'() 22066 __label_1: # endif 22067 null $S1 22068 $P2 = __ARG_1.'get'() 22069 $P3 = $P2.'isop'(",") 22070 if $P3 goto __label_4 22071 $P3 = $P2.'isop'(")") 22072 __label_4: 22073 if_null $P3, __label_2 22074 unless $P3 goto __label_2 22075 set $S1, "?" 22076 __ARG_1.'unget'($P2) 22077 goto __label_3 22078 __label_2: # else 22079 $P4 = $P1.'getidentifier'() 22080 $P3 = WSubId_136($P4) 22081 set $S1, $P3 22082 set $P1, $P2 22083 __label_3: # endif 22084 box $P3, $I1 22085 setattribute self, 'flags', $P3 22086 box $P3, $S1 22087 setattribute self, 'type', $P3 22088 setattribute self, 'name', $P1 22089 22090.end # InlineParam 22091 22092 22093.sub 'isconst' :method 22094 getattribute $P1, self, 'flags' 22095 set $I2, $P1 22096 band $I1, $I2, 1 22097 .return($I1) 22098 22099.end # isconst 22100 22101 22102.sub 'getname' :method 22103 getattribute $P1, self, 'name' 22104 .return($P1) 22105 22106.end # getname 22107 22108 22109.sub 'gettype' :method 22110 getattribute $P1, self, 'type' 22111 .return($P1) 22112 22113.end # gettype 22114 22115.sub Winxed_class_init :anon :load :init 22116 newclass $P0, [ 'Winxed'; 'Compiler'; 'InlineParam' ] 22117 get_class $P1, [ 'Winxed'; 'Compiler'; 'CommonBase' ] 22118 addparent $P0, $P1 22119 addattribute $P0, 'flags' 22120 addattribute $P0, 'type' 22121 addattribute $P0, 'name' 22122.end 22123.namespace [ 'Winxed'; 'Compiler'; 'InlineStatement' ] 22124 22125.sub 'InlineStatement' :subid('WSubId_15') :method 22126 .param pmc __ARG_1 22127 .param pmc __ARG_2 22128 .param pmc __ARG_3 22129.const 'Sub' ExpectOp = "ExpectOp" 22130.const 'Sub' WSubId_74 = "WSubId_74" 22131.const 'Sub' WSubId_16 = "WSubId_16" 22132.const 'Sub' WSubId_136 = "WSubId_136" 22133.const 'Sub' SyntaxError = "SyntaxError" 22134.const 'Sub' bindlast1 = "bindlast1" 22135.const 'Sub' WSubId_134 = "WSubId_134" 22136.lex '__WLEX_self', self 22137 self.'BlockStatement'(__ARG_1, __ARG_3) 22138 $P1 = __ARG_2.'get'() 22139 ExpectOp("(", __ARG_2) 22140 $P2 = __ARG_2.'get'() 22141 $P3 = $P2.'isop'(")") 22142 if $P3 goto __label_1 22143 __ARG_2.'unget'($P2) 22144 newclosure $P5, WSubId_16 22145 $P4 = WSubId_74(__ARG_2, __ARG_3, $P5, ")") 22146 setattribute self, 'params', $P4 22147 __label_1: # endif 22148 $P2 = __ARG_2.'get'() 22149 null $S1 22150 $P3 = $P2.'iskeyword'("return") 22151 if_null $P3, __label_2 22152 unless $P3 goto __label_2 22153 $P2 = __ARG_2.'get'() 22154 $P3 = $P2.'getidentifier'() 22155 null $S2 22156 if_null $P3, __label_4 22157 set $S2, $P3 22158 __label_4: 22159 $P3 = WSubId_136($S2) 22160 set $S1, $P3 22161 ne $S1, "", __label_5 22162 SyntaxError("Invalid return type", $P2) 22163 __label_5: # endif 22164 $P2 = __ARG_2.'get'() 22165 goto __label_3 22166 __label_2: # else 22167 set $S1, "v" 22168 __label_3: # endif 22169 bindlast1("{", $P2) 22170 __ARG_2.'unget'($P2) 22171 $P4 = WSubId_134(__ARG_2, self) 22172 setattribute self, 'body', $P4 22173 setattribute self, 'name', $P1 22174 box $P3, $S1 22175 setattribute self, 'rettype', $P3 22176 22177.end # InlineStatement 22178 22179 22180.sub '' :anon :subid('WSubId_16') :outer('WSubId_15') 22181 .param pmc __ARG_4 22182 .param pmc __ARG_5 22183 find_lex $P1, '__WLEX_self' 22184 new $P3, [ 'Winxed'; 'Compiler'; 'InlineParam' ] 22185 $P3.'InlineParam'(__ARG_4, $P1) 22186 set $P2, $P3 22187 .return($P2) 22188 22189.end # WSubId_16 22190 22191 22192.sub 'getouter' :method 22193 .return(self) 22194 22195.end # getouter 22196 22197 22198.sub 'getlexicalouter' :method 22199 null $P1 22200 .return($P1) 22201 22202.end # getlexicalouter 22203 22204 22205.sub 'createreg' :method 22206 .param string __ARG_1 22207 .return("FAKEREG") 22208 22209.end # createreg 22210 22211.sub Winxed_class_init :anon :load :init 22212 newclass $P0, [ 'Winxed'; 'Compiler'; 'InlineStatement' ] 22213 get_class $P1, [ 'Winxed'; 'Compiler'; 'BlockStatement' ] 22214 addparent $P0, $P1 22215 get_class $P2, [ 'Winxed'; 'Compiler'; 'VarContainer' ] 22216 addparent $P0, $P2 22217 addattribute $P0, 'name' 22218 addattribute $P0, 'rettype' 22219 addattribute $P0, 'body' 22220 addattribute $P0, 'params' 22221.end 22222.namespace [ 'Winxed'; 'Compiler'; 'InlinedBlock' ] 22223 22224.sub 'InlinedBlock' :method 22225 .param pmc __ARG_1 22226 .param pmc __ARG_2 22227 .param pmc __ARG_3 22228.const 'Sub' SyntaxError = "SyntaxError" 22229 getattribute $P7, __ARG_2, 'start' 22230 self.'BlockStatement'($P7, __ARG_1) 22231 setattribute self, 'inliner', __ARG_2 22232 setattribute self, 'inlined', __ARG_1 22233 getattribute $P1, __ARG_1, 'params' 22234 unless_null $P1, __label_2 22235 null $I1 22236 goto __label_1 22237 __label_2: 22238 elements $I1, $P1 22239 __label_1: 22240 unless_null __ARG_3, __label_4 22241 null $I2 22242 goto __label_3 22243 __label_4: 22244 $P7 = __ARG_3.'numargs'() 22245 set $I2, $P7 22246 __label_3: 22247 eq $I1, $I2, __label_5 22248 SyntaxError("Wrong arguments in inline expansion", __ARG_2) 22249 __label_5: # endif 22250 null $I3 22251 __label_8: # for condition 22252 ge $I3, $I1, __label_7 22253 $P2 = $P1[$I3] 22254 $P3 = $P2.'getname'() 22255 $P4 = __ARG_3.'getfreearg'($I3) 22256 $P7 = $P2.'gettype'() 22257 null $S1 22258 if_null $P7, __label_9 22259 set $S1, $P7 22260 __label_9: 22261 ne $S1, "?", __label_10 22262 $P7 = $P4.'checkresult'() 22263 set $S1, $P7 22264 __label_10: # endif 22265 $P7 = $P2.'isconst'() 22266 set $I4, $P7 22267 unless $I4 goto __label_11 22268 $P7 = $P4.'hascompilevalue'() 22269 unless $P7 goto __label_11 22270 $P5 = self.'createconst'($P3, $S1) 22271 $P5.'setvalue'($P4) 22272 goto __label_12 22273 __label_11: # else 22274 self.'createvar'($P3, $S1, 0) 22275 __label_12: # endif 22276 __label_6: # for iteration 22277 inc $I3 22278 goto __label_8 22279 __label_7: # for end 22280 setattribute self, 'params', $P1 22281 setattribute self, 'args', __ARG_3 22282 getattribute $P6, __ARG_1, 'body' 22283 $P6 = $P6.'clone'(self) 22284 $P6 = $P6.'optimize'() 22285 setattribute self, 'body', $P6 22286 22287.end # InlinedBlock 22288 22289 22290.sub 'getouter' :method 22291 .return(self) 22292 22293.end # getouter 22294 22295 22296.sub 'getlexicalouter' :method 22297 getattribute $P2, self, 'inliner' 22298 getattribute $P1, $P2, 'owner' 22299 .tailcall $P1.'getouter'() 22300 22301.end # getlexicalouter 22302 22303 22304.sub 'islaststatement' :method 22305 .param pmc __ARG_1 22306 getattribute $P1, self, 'body' 22307 __label_2: # while 22308 if_null $P1, __label_1 22309 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'CompoundStatement' ] 22310 unless $I1 goto __label_1 22311 $P1 = $P1.'last'() 22312 goto __label_2 22313 __label_1: # endwhile 22314 issame $I1, $P1, __ARG_1 22315 .return($I1) 22316 22317.end # islaststatement 22318 22319 22320.sub 'generateparamnum' :method 22321 $P1 = self.'getlexicalouter'() 22322 .tailcall $P1.'generateparamnum'() 22323 22324.end # generateparamnum 22325 22326 22327.sub 'addlocalfunction' :method 22328 .param pmc __ARG_1 22329 getattribute $P1, self, 'inliner' 22330 $P1.'addlocalfunction'(__ARG_1) 22331 22332.end # addlocalfunction 22333 22334 22335.sub 'setlex' :method 22336 .param string __ARG_1 22337 .param string __ARG_2 22338 $P1 = self.'getlexicalouter'() 22339 $P1.'setlex'(__ARG_1, __ARG_2) 22340 22341.end # setlex 22342 22343 22344.sub 'createreg' :method 22345 .param string __ARG_1 22346 getattribute $P2, self, 'inliner' 22347 getattribute $P1, $P2, 'owner' 22348 .tailcall $P1.'createreg'(__ARG_1) 22349 22350.end # createreg 22351 22352 22353.sub 'tempreg' :method 22354 .param string __ARG_1 22355 getattribute $P1, self, 'inliner' 22356 .tailcall $P1.'tempreg'(__ARG_1) 22357 22358.end # tempreg 22359 22360 22361.sub 'freetemps' :method 22362 getattribute $P2, self, 'inliner' 22363 getattribute $P1, $P2, 'owner' 22364 $P1.'freetemps'() 22365 22366.end # freetemps 22367 22368 22369.sub 'makesubid' :method 22370 $P1 = self.'getlexicalouter'() 22371 $P1.'makesubid'() 22372 22373.end # makesubid 22374 22375 22376.sub 'usesubid' :method 22377 .param string __ARG_1 22378 getattribute $P1, self, 'usedsubids' 22379 unless_null $P1, __label_1 22380 root_new $P1, ['parrot';'Hash'] 22381 setattribute self, 'usedsubids', $P1 22382 __label_1: # endif 22383 $P1[__ARG_1] = 1 22384 22385.end # usesubid 22386 22387 22388.sub 'genlabel' :method 22389 getattribute $P1, self, 'inliner' 22390 .tailcall $P1.'genlabel'() 22391 22392.end # genlabel 22393 22394 22395.sub 'getendlabel' :method 22396 getattribute $P1, self, 'endlabel' 22397 unless_null $P1, __label_1 22398 $P1 = self.'genlabel'() 22399 setattribute self, 'endlabel', $P1 22400 __label_1: # endif 22401 set $S1, $P1 22402 .return($S1) 22403 22404.end # getendlabel 22405 22406 22407.sub 'getrettype' :method 22408 getattribute $P2, self, 'inlined' 22409 getattribute $P1, $P2, 'rettype' 22410 .return($P1) 22411 22412.end # getrettype 22413 22414 22415.sub 'checkresult' :method 22416 getattribute $P2, self, 'inlined' 22417 getattribute $P1, $P2, 'rettype' 22418 .return($P1) 22419 22420.end # checkresult 22421 22422 22423.sub 'getretreg' :method 22424 getattribute $P1, self, 'retreg' 22425 .return($P1) 22426 22427.end # getretreg 22428 22429 22430.sub 'emitret' :method 22431 .param pmc __ARG_1 22432 .param pmc __ARG_2 22433 $P2 = self.'getrettype'() 22434 null $S1 22435 if_null $P2, __label_1 22436 set $S1, $P2 22437 __label_1: 22438 if_null __ARG_2, __label_2 22439 $P1 = self.'getretreg'() 22440 unless_null $P1, __label_3 22441 __ARG_2.'emit_void'(__ARG_1) 22442 goto __label_4 22443 __label_3: # else 22444 $P2 = __ARG_2.'isnull'() 22445 if_null $P2, __label_5 22446 unless $P2 goto __label_5 22447 __ARG_1.'emitnull'($P1) 22448 goto __label_6 22449 __label_5: # else 22450 $P3 = __ARG_2.'checkresult'() 22451 null $S2 22452 if_null $P3, __label_7 22453 set $S2, $P3 22454 __label_7: 22455 ne $S2, $S1, __label_8 22456 __ARG_2.'emit'(__ARG_1, $P1) 22457 goto __label_9 22458 __label_8: # else 22459 $P2 = __ARG_2.'emit_get'(__ARG_1) 22460 null $S3 22461 if_null $P2, __label_10 22462 set $S3, $P2 22463 __label_10: 22464 self.'annotate'(__ARG_1) 22465 ne $S1, "P", __label_11 22466 __ARG_1.'emitbox'($P1, $S3) 22467 goto __label_12 22468 __label_11: # else 22469 __ARG_1.'emitset'($P1, $S3) 22470 __label_12: # endif 22471 __label_9: # endif 22472 __label_6: # endif 22473 __label_4: # endif 22474 __label_2: # endif 22475 22476.end # emitret 22477 22478 22479.sub 'emit_it' :method 22480 .param pmc __ARG_1 22481.const 'Sub' WSubId_147 = "WSubId_147" 22482 $P10 = __ARG_1.'getDebug'() 22483 if_null $P10, __label_1 22484 unless $P10 goto __label_1 22485 __ARG_1.'comment'("inlined start") 22486 __label_1: # endif 22487 getattribute $P1, self, 'params' 22488 getattribute $P2, self, 'args' 22489 unless_null $P1, __label_3 22490 null $I1 22491 goto __label_2 22492 __label_3: 22493 elements $I1, $P1 22494 __label_2: 22495 null $I2 22496 __label_6: # for condition 22497 ge $I2, $I1, __label_5 22498 $P3 = $P1[$I2] 22499 $P4 = $P2.'getfreearg'($I2) 22500 $P10 = $P3.'isconst'() 22501 unless $P10 goto __label_7 22502 $P11 = $P4.'hascompilevalue'() 22503 unless $P11 goto __label_7 22504 goto __label_4 # continue 22505 __label_7: # endif 22506 $P10 = $P3.'gettype'() 22507 null $S1 22508 if_null $P10, __label_8 22509 set $S1, $P10 22510 __label_8: 22511 $P10 = $P4.'checkresult'() 22512 null $S2 22513 if_null $P10, __label_9 22514 set $S2, $P10 22515 __label_9: 22516 $P12 = $P3.'getname'() 22517 $P11 = self.'getvar'($P12) 22518 $P10 = $P11.'getreg'() 22519 null $S3 22520 if_null $P10, __label_10 22521 set $S3, $P10 22522 __label_10: 22523 iseq $I3, $S1, "?" 22524 if $I3 goto __label_13 22525 iseq $I3, $S2, $S1 22526 __label_13: 22527 unless $I3 goto __label_11 22528 $P4.'emit_init'(__ARG_1, $S3) 22529 goto __label_12 22530 __label_11: # else 22531 $P10 = $P4.'emit_get'(__ARG_1) 22532 null $S4 22533 if_null $P10, __label_14 22534 set $S4, $P10 22535 __label_14: 22536 ne $S1, "P", __label_15 22537 __ARG_1.'emitbox'($S3, $S4) 22538 goto __label_16 22539 __label_15: # else 22540 __ARG_1.'emitset'($S3, $S4) 22541 __label_16: # endif 22542 __label_12: # endif 22543 __label_4: # for iteration 22544 inc $I2 22545 goto __label_6 22546 __label_5: # for end 22547 getattribute $P5, self, 'usedsubids' 22548 root_new $P6, ['parrot';'ResizablePMCArray'] 22549 set $P7, WSubId_147 22550 if_null $P5, __label_18 22551 iter $P14, $P5 22552 set $P14, 0 22553 __label_17: # for iteration 22554 unless $P14 goto __label_18 22555 shift $P8, $P14 22556 $P10 = $P7($P8) 22557 push $P6, $P10 22558 goto __label_17 22559 __label_18: # endfor 22560 set $P13, $P6 22561 set $P10, $P13 22562 join $S5, "", $P10 22563 __ARG_1.'print'($S5) 22564 getattribute $P10, self, 'body' 22565 $P10.'emit'(__ARG_1) 22566 getattribute $P9, self, 'endlabel' 22567 if_null $P9, __label_19 22568 __ARG_1.'emitlabel'($P9) 22569 __label_19: # endif 22570 22571.end # emit_it 22572 22573 22574.sub 'emit' :method 22575 .param pmc __ARG_1 22576 .param string __ARG_2 22577 $P1 = self.'getrettype'() 22578 null $S1 22579 if_null $P1, __label_1 22580 set $S1, $P1 22581 __label_1: 22582 box $P1, __ARG_2 22583 setattribute self, 'retreg', $P1 22584 $P1 = __ARG_1.'getDebug'() 22585 set $I1, $P1 22586 self.'emit_it'(__ARG_1) 22587 $P1 = __ARG_1.'getDebug'() 22588 if_null $P1, __label_2 22589 unless $P1 goto __label_2 22590 __ARG_1.'comment'("inlined end") 22591 __label_2: # endif 22592 22593.end # emit 22594 22595 22596.sub 'emit_void' :method 22597 .param pmc __ARG_1 22598 self.'emit_it'(__ARG_1) 22599 $P1 = __ARG_1.'getDebug'() 22600 if_null $P1, __label_1 22601 unless $P1 goto __label_1 22602 __ARG_1.'comment'("inlined end") 22603 __label_1: # endif 22604 22605.end # emit_void 22606 22607 22608.sub 'emit_get' :method 22609 .param pmc __ARG_1 22610.const 'Sub' SyntaxError = "SyntaxError" 22611 $P2 = self.'checkresult'() 22612 null $S1 22613 if_null $P2, __label_1 22614 set $S1, $P2 22615 __label_1: 22616 ne $S1, "v", __label_2 22617 SyntaxError("Cannot get a result from a void inline", self) 22618 __label_2: # endif 22619 $P2 = self.'createreg'($S1) 22620 null $S2 22621 if_null $P2, __label_3 22622 set $S2, $P2 22623 __label_3: 22624 box $P2, $S2 22625 setattribute self, 'retreg', $P2 22626 self.'emit_it'(__ARG_1) 22627 ne $S1, "P", __label_4 22628 $P1 = self.'tempreg'("P") 22629 __ARG_1.'emitset'($P1, $S2) 22630 set $S2, $P1 22631 __label_4: # endif 22632 $P2 = __ARG_1.'getDebug'() 22633 if_null $P2, __label_5 22634 unless $P2 goto __label_5 22635 __ARG_1.'comment'("inlined end") 22636 __label_5: # endif 22637 .return($S2) 22638 22639.end # emit_get 22640 22641.sub Winxed_class_init :anon :load :init 22642 newclass $P0, [ 'Winxed'; 'Compiler'; 'InlinedBlock' ] 22643 get_class $P1, [ 'Winxed'; 'Compiler'; 'BlockStatement' ] 22644 addparent $P0, $P1 22645 addattribute $P0, 'inliner' 22646 addattribute $P0, 'inlined' 22647 addattribute $P0, 'usedsubids' 22648 addattribute $P0, 'params' 22649 addattribute $P0, 'args' 22650 addattribute $P0, 'body' 22651 addattribute $P0, 'endlabel' 22652 addattribute $P0, 'retreg' 22653.end 22654.namespace [ 'Winxed'; 'Compiler'; 'InlineRef' ] 22655 22656.sub 'InlineRef' :method 22657 .param pmc __ARG_1 22658 .param pmc __ARG_2 22659 .param pmc __ARG_3 22660 self.'Expr'(__ARG_1, __ARG_2) 22661 setattribute self, 'inlined', __ARG_3 22662 22663.end # InlineRef 22664 22665 22666.sub 'checkresult' :method 22667 .return("v") 22668 22669.end # checkresult 22670 22671 22672.sub 'misused' :method 22673.const 'Sub' SyntaxError = "SyntaxError" 22674 getattribute $P1, self, 'start' 22675 SyntaxError("inline used by reference", $P1) 22676 22677.end # misused 22678 22679 22680.sub 'emit_void' :method 22681 .param pmc __ARG_1 22682 self.'misused'() 22683 22684.end # emit_void 22685 22686 22687.sub 'emit_get' :method 22688 .param pmc __ARG_1 22689 self.'misused'() 22690 22691.end # emit_get 22692 22693 22694.sub 'emit' :method 22695 .param pmc __ARG_1 22696 .param string __ARG_2 22697 self.'misused'() 22698 22699.end # emit 22700 22701.sub Winxed_class_init :anon :load :init 22702 newclass $P0, [ 'Winxed'; 'Compiler'; 'InlineRef' ] 22703 get_class $P1, [ 'Winxed'; 'Compiler'; 'FinalExpr' ] 22704 addparent $P0, $P1 22705 addattribute $P0, 'inlined' 22706.end 22707.namespace [ 'Winxed'; 'Compiler'; 'CallInlineExpr' ] 22708 22709.sub 'CallInlineExpr' :method 22710 .param pmc __ARG_1 22711 .param pmc __ARG_2 22712 .param pmc __ARG_3 22713 getattribute $P1, __ARG_2, 'start' 22714 self.'Expr'(__ARG_1, $P1) 22715 new $P3, [ 'Winxed'; 'Compiler'; 'InlinedBlock' ] 22716 getattribute $P4, __ARG_2, 'inlined' 22717 $P3.'InlinedBlock'($P4, __ARG_1, __ARG_3) 22718 set $P2, $P3 22719 setattribute self, 'block', $P2 22720 22721.end # CallInlineExpr 22722 22723 22724.sub 'checkresult' :method 22725 getattribute $P1, self, 'block' 22726 .tailcall $P1.'checkresult'() 22727 22728.end # checkresult 22729 22730 22731.sub 'emit_void' :method 22732 .param pmc __ARG_1 22733 getattribute $P1, self, 'block' 22734 $P1.'emit_void'(__ARG_1) 22735 22736.end # emit_void 22737 22738 22739.sub 'emit_get' :method 22740 .param pmc __ARG_1 22741 getattribute $P1, self, 'block' 22742 .tailcall $P1.'emit_get'(__ARG_1) 22743 22744.end # emit_get 22745 22746 22747.sub 'emit' :method 22748 .param pmc __ARG_1 22749 .param string __ARG_2 22750 getattribute $P1, self, 'block' 22751 $P1.'emit'(__ARG_1, __ARG_2) 22752 22753.end # emit 22754 22755.sub Winxed_class_init :anon :load :init 22756 newclass $P0, [ 'Winxed'; 'Compiler'; 'CallInlineExpr' ] 22757 get_class $P1, [ 'Winxed'; 'Compiler'; 'FinalExpr' ] 22758 addparent $P0, $P1 22759 addattribute $P0, 'block' 22760.end 22761.namespace [ 'Winxed'; 'Compiler'; 'SigParameter' ] 22762 22763.sub 'SigParameter' :method 22764 .param pmc __ARG_1 22765 .param pmc __ARG_2 22766.const 'Sub' bindlast0 = "bindlast0" 22767.const 'Sub' WSubId_136 = "WSubId_136" 22768 setattribute self, 'owner', __ARG_2 22769 $P1 = __ARG_1.'get'() 22770 $P3 = $P1.'isidentifier'() 22771 if $P3 goto __label_1 22772 bindlast0($P1) 22773 __label_1: # endif 22774 $P2 = __ARG_1.'get'() 22775 $P3 = $P2.'isidentifier'() 22776 if_null $P3, __label_2 22777 unless $P3 goto __label_2 22778 $P5 = $P1.'checkkeyword'() 22779 $P4 = WSubId_136($P5) 22780 null $S1 22781 if_null $P4, __label_3 22782 set $S1, $P4 22783 __label_3: 22784 box $P3, $S1 22785 setattribute self, 'type', $P3 22786 set $P1, $P2 22787 $P2 = __ARG_1.'get'() 22788 __label_2: # endif 22789 setattribute self, 'name', $P1 22790 $P3 = $P2.'isop'("[") 22791 if_null $P3, __label_4 22792 unless $P3 goto __label_4 22793 new $P6, [ 'Winxed'; 'Compiler'; 'ParameterModifierList' ] 22794 $P6.'ParameterModifierList'(__ARG_1, __ARG_2) 22795 set $P5, $P6 22796 setattribute self, 'modifiers', $P5 22797 $P2 = __ARG_1.'get'() 22798 __label_4: # endif 22799 $P3 = $P2.'isop'("=") 22800 if_null $P3, __label_5 22801 unless $P3 goto __label_5 22802 new $P6, [ 'Winxed'; 'Compiler'; 'FunctionParameterDefault' ] 22803 $P6.'FunctionParameterDefault'(__ARG_1, __ARG_2, self) 22804 set $P5, $P6 22805 setattribute self, 'defaultexpr', $P5 22806 goto __label_6 22807 __label_5: # else 22808 __ARG_1.'unget'($P2) 22809 __label_6: # endif 22810 22811.end # SigParameter 22812 22813 22814.sub 'clone' :method 22815 .param pmc __ARG_1 22816 new $P1, [ 'Winxed'; 'Compiler'; 'SigParameter' ] 22817 setattribute $P1, 'owner', __ARG_1 22818 getattribute $P2, self, 'name' 22819 setattribute $P1, 'name', $P2 22820 getattribute $P3, self, 'type' 22821 if_null $P3, __label_1 22822 setattribute $P1, 'type', $P3 22823 __label_1: # endif 22824 getattribute $P4, self, 'modifiers' 22825 if_null $P4, __label_2 22826 getattribute $P7, self, 'modifiers' 22827 $P6 = $P7.'clone'(__ARG_1) 22828 setattribute $P1, 'modifiers', $P6 22829 __label_2: # endif 22830 getattribute $P4, self, 'defaultexpr' 22831 if_null $P4, __label_3 22832 getattribute $P7, self, 'defaultexpr' 22833 $P6 = $P7.'clone'(__ARG_1, $P1) 22834 setattribute $P1, 'defaultexpr', $P6 22835 __label_3: # endif 22836 .return($P1) 22837 22838.end # clone 22839 22840 22841.sub 'getvar' :method 22842 getattribute $P1, self, 'owner' 22843 getattribute $P2, self, 'name' 22844 .tailcall $P1.'getvar'($P2) 22845 22846.end # getvar 22847 22848 22849.sub 'optimize' :method 22850 getattribute $P1, self, 'owner' 22851 getattribute $P2, self, 'type' 22852 if_null $P2, __label_1 22853 getattribute $P4, self, 'name' 22854 $P1.'createvar'($P4, $P2) 22855 __label_1: # endif 22856 getattribute $P4, self, 'modifiers' 22857 if_null $P4, __label_2 22858 getattribute $P5, self, 'modifiers' 22859 $P5.'optimize'() 22860 __label_2: # endif 22861 getattribute $P3, self, 'defaultexpr' 22862 if_null $P3, __label_3 22863 $P3.'optimize'() 22864 $P4 = $P1.'createreg'("I") 22865 $P3.'setoptflag'($P4) 22866 __label_3: # endif 22867 .return(self) 22868 22869.end # optimize 22870 22871 22872.sub 'emit' :method 22873 .param pmc __ARG_1 22874.const 'Sub' WSubId_102 = "WSubId_102" 22875 getattribute $P1, self, 'name' 22876 getattribute $P6, self, 'owner' 22877 $P2 = $P6.'getvar'($P1) 22878 unless_null $P2, __label_1 22879 WSubId_102($P1, $P1) 22880 __label_1: # endif 22881 $P3 = $P2.'getreg'() 22882 __ARG_1.'print'($P3) 22883 getattribute $P4, self, 'modifiers' 22884 if_null $P4, __label_2 22885 $P4.'emitmodifiers'(__ARG_1, $P1, $P1) 22886 __label_2: # endif 22887 getattribute $P5, self, 'defaultexpr' 22888 if_null $P5, __label_3 22889 $P6 = $P5.'getoptflag'() 22890 __ARG_1.'print'(" :optional, ", $P6, " :opt_flag") 22891 __label_3: # endif 22892 22893.end # emit 22894 22895 22896.sub 'emitdefault' :method 22897 .param pmc __ARG_1 22898 getattribute $P1, self, 'defaultexpr' 22899 if_null $P1, __label_1 22900 $P1.'emit'(__ARG_1) 22901 __label_1: # endif 22902 22903.end # emitdefault 22904 22905.sub Winxed_class_init :anon :load :init 22906 newclass $P0, [ 'Winxed'; 'Compiler'; 'SigParameter' ] 22907 addattribute $P0, 'owner' 22908 addattribute $P0, 'name' 22909 addattribute $P0, 'type' 22910 addattribute $P0, 'modifiers' 22911 addattribute $P0, 'defaultexpr' 22912.end 22913.namespace [ 'Winxed'; 'Compiler' ] 22914 22915.sub 'parseSigParameter' :subid('WSubId_149') 22916 .param pmc __ARG_1 22917 .param pmc __ARG_2 22918 new $P2, [ 'Winxed'; 'Compiler'; 'SigParameter' ] 22919 $P2.'SigParameter'(__ARG_1, __ARG_2) 22920 set $P1, $P2 22921 .return($P1) 22922 22923.end # parseSigParameter 22924 22925.namespace [ 'Winxed'; 'Compiler'; 'SigParameterList' ] 22926 22927.sub 'SigParameterList' :method 22928 .param pmc __ARG_1 22929 .param pmc __ARG_2 22930.const 'Sub' WSubId_74 = "WSubId_74" 22931.const 'Sub' WSubId_149 = "WSubId_149" 22932 $P2 = WSubId_74(__ARG_1, __ARG_2, WSubId_149, ")") 22933 setattribute self, 'params', $P2 22934 22935.end # SigParameterList 22936 22937 22938.sub 'clone' :method 22939 .param pmc __ARG_1 22940 new $P1, [ 'Winxed'; 'Compiler'; 'SigParameterList' ] 22941 getattribute $P2, self, 'params' 22942 set $P3, __ARG_1 22943.const 'Sub' bindlast = "bindlast" 22944.const 'Sub' bindmethod = "bindmethod" 22945 set $P4, $P2 22946 root_new $P5, ['parrot';'ResizablePMCArray'] 22947 $P10 = bindmethod("clone") 22948 $P6 = bindlast($P10, $P3) 22949 if_null $P4, __label_2 22950 iter $P11, $P4 22951 set $P11, 0 22952 __label_1: # for iteration 22953 unless $P11 goto __label_2 22954 shift $P7, $P11 22955 $P12 = $P6($P7) 22956 push $P5, $P12 22957 goto __label_1 22958 __label_2: # endfor 22959 set $P9, $P5 22960 set $P8, $P9 22961 setattribute $P1, 'params', $P8 22962 .return($P1) 22963 22964.end # clone 22965 22966 22967.sub 'optimize' :method 22968 getattribute $P1, self, 'params' 22969 if_null $P1, __label_2 22970 elements $I1, $P1 22971 goto __label_1 22972 __label_2: 22973 null $I1 22974 __label_1: 22975 null $I2 22976 __label_5: # for condition 22977 ge $I2, $I1, __label_4 22978 $P3 = $P1[$I2] 22979 $P2 = $P3.'optimize'() 22980 $P1[$I2] = $P2 22981 __label_3: # for iteration 22982 inc $I2 22983 goto __label_5 22984 __label_4: # for end 22985 22986.end # optimize 22987 22988 22989.sub 'emit' :method 22990 .param pmc __ARG_1 22991 __ARG_1.'print'("(") 22992 set $S1, "" 22993 getattribute $P2, self, 'params' 22994 if_null $P2, __label_2 22995 iter $P3, $P2 22996 set $P3, 0 22997 __label_1: # for iteration 22998 unless $P3 goto __label_2 22999 shift $P1, $P3 23000 __ARG_1.'print'($S1) 23001 $P1.'emit'(__ARG_1) 23002 set $S1, ", " 23003 goto __label_1 23004 __label_2: # endfor 23005 __ARG_1.'print'(")") 23006 23007.end # emit 23008 23009 23010.sub 'emitdefaults' :method 23011 .param pmc __ARG_1 23012.const 'Sub' bindlast = "bindlast" 23013.const 'Sub' bindmethod = "bindmethod" 23014 getattribute $P1, self, 'params' 23015 $P4 = bindmethod("emitdefault") 23016 $P2 = bindlast($P4, __ARG_1) 23017 if_null $P1, __label_2 23018 iter $P5, $P1 23019 set $P5, 0 23020 __label_1: # for iteration 23021 unless $P5 goto __label_2 23022 shift $P3, $P5 23023 $P2($P3) 23024 goto __label_1 23025 __label_2: # endfor 23026 23027.end # emitdefaults 23028 23029.sub Winxed_class_init :anon :load :init 23030 newclass $P0, [ 'Winxed'; 'Compiler'; 'SigParameterList' ] 23031 addattribute $P0, 'params' 23032.end 23033.namespace [ 'Winxed'; 'Compiler'; 'MultiAssignStatement' ] 23034 23035.sub 'MultiAssignStatement' :method 23036 .param pmc __ARG_1 23037 .param pmc __ARG_2 23038 .param pmc __ARG_3 23039 .param pmc __ARG_4 23040 self.'Statement'(__ARG_1, __ARG_2) 23041 setattribute self, 'params', __ARG_3 23042 setattribute self, 'expr', __ARG_4 23043 23044.end # MultiAssignStatement 23045 23046 23047.sub 'clone' :method 23048 .param pmc __ARG_1 23049 new $P2, [ 'Winxed'; 'Compiler'; 'MultiAssignStatement' ] 23050 getattribute $P3, self, 'start' 23051 getattribute $P5, self, 'params' 23052 $P4 = $P5.'clone'(__ARG_1) 23053 getattribute $P7, self, 'expr' 23054 $P6 = $P7.'clone'(__ARG_1) 23055 $P2.'MultiAssignStatement'($P3, __ARG_1, $P4, $P6) 23056 set $P1, $P2 23057 .return($P1) 23058 23059.end # clone 23060 23061 23062.sub 'optimize' :method 23063 getattribute $P3, self, 'expr' 23064 $P2 = $P3.'optimize'() 23065 setattribute self, 'expr', $P2 23066 getattribute $P1, self, 'params' 23067 $P1.'optimize'() 23068 .return(self) 23069 23070.end # optimize 23071 23072 23073.sub 'emit' :method 23074 .param pmc __ARG_1 23075.const 'Sub' SyntaxError = "SyntaxError" 23076 getattribute $P1, self, 'expr' 23077 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'CallExpr' ] 23078 if $I1 goto __label_1 23079 SyntaxError("multi assignment used with non function call", $P1) 23080 __label_1: # endif 23081 $P2 = $P1.'emitcall'(__ARG_1) 23082 $P1.'prepareargs'(__ARG_1) 23083 getattribute $P3, self, 'params' 23084 __ARG_1.'print'(" ") 23085 $P3.'emit'(__ARG_1) 23086 __ARG_1.'print'(" = ", $P2) 23087 $P1.'emitargs'(__ARG_1) 23088 __ARG_1.'say'() 23089 $P3.'emitdefaults'(__ARG_1) 23090 23091.end # emit 23092 23093.sub Winxed_class_init :anon :load :init 23094 newclass $P0, [ 'Winxed'; 'Compiler'; 'MultiAssignStatement' ] 23095 get_class $P1, [ 'Winxed'; 'Compiler'; 'Statement' ] 23096 addparent $P0, $P1 23097 addattribute $P0, 'params' 23098 addattribute $P0, 'expr' 23099.end 23100.namespace [ 'Winxed'; 'Compiler' ] 23101.namespace [ 'Winxed'; 'Compiler'; 'ClassSpecifier' ] 23102 23103.sub 'ClassSpecifier' :method 23104 .param pmc __ARG_1 23105 .param pmc __ARG_2 23106 self.'initbase'(__ARG_2, __ARG_1) 23107 23108.end # ClassSpecifier 23109 23110 23111.sub 'reftype' :method 23112 .return(0) 23113 23114.end # reftype 23115 23116 23117.sub 'annotate' :method 23118 .param pmc __ARG_1 23119 getattribute $P1, self, 'start' 23120 __ARG_1.'annotate'($P1) 23121 23122.end # annotate 23123 23124.sub Winxed_class_init :anon :load :init 23125 newclass $P0, [ 'Winxed'; 'Compiler'; 'ClassSpecifier' ] 23126 get_class $P1, [ 'Winxed'; 'Compiler'; 'CommonBase' ] 23127 addparent $P0, $P1 23128.end 23129.namespace [ 'Winxed'; 'Compiler'; 'ClassSpecifierStr' ] 23130 23131.sub 'ClassSpecifierStr' :method 23132 .param pmc __ARG_1 23133 .param pmc __ARG_2 23134 self.'ClassSpecifier'(__ARG_1, __ARG_2) 23135 setattribute self, 'name', __ARG_2 23136 23137.end # ClassSpecifierStr 23138 23139 23140.sub 'reftype' :method 23141 .return(1) 23142 23143.end # reftype 23144 23145 23146.sub 'emit' :method 23147 .param pmc __ARG_1 23148 .param pmc __ARG_2 23149 getattribute $P2, self, 'name' 23150 $P1 = $P2.'getPirString'() 23151 null $S1 23152 if_null $P1, __label_1 23153 set $S1, $P1 23154 __label_1: 23155 __ARG_1.'print'($S1) 23156 23157.end # emit 23158 23159.sub Winxed_class_init :anon :load :init 23160 newclass $P0, [ 'Winxed'; 'Compiler'; 'ClassSpecifierStr' ] 23161 get_class $P1, [ 'Winxed'; 'Compiler'; 'ClassSpecifier' ] 23162 addparent $P0, $P1 23163 addattribute $P0, 'name' 23164.end 23165.namespace [ 'Winxed'; 'Compiler'; 'ClassSpecifierParrotKey' ] 23166 23167.sub 'ClassSpecifierParrotKey' :method 23168 .param pmc __ARG_1 23169 .param pmc __ARG_2 23170 .param pmc __ARG_3 23171.const 'Sub' Expected = "Expected" 23172.const 'Sub' WSubId_80 = "WSubId_80" 23173.const 'Sub' bindlast1 = "bindlast1" 23174 self.'ClassSpecifier'(__ARG_2, __ARG_3) 23175 root_new $P1, ['parrot';'ResizablePMCArray'] 23176 $P2 = __ARG_1.'get'() 23177 $P3 = $P2.'isstring'() 23178 if $P3 goto __label_1 23179 Expected("literal string", $P2) 23180 __label_1: # endif 23181 $P3 = $P2.'rawstring'() 23182 push $P1, $P3 23183 $P2 = __ARG_1.'get'() 23184 $P3 = $P2.'isop'("]") 23185 if $P3 goto __label_2 23186 $P4 = $P2.'checkop'() 23187 set $S1, $P4 23188 if_null $S1, __label_3 23189 length $I1, $S1 23190 ne $I1, 1, __label_3 23191 ord $I1, $S1 23192 if $I1 == 58 goto __label_5 23193 if $I1 == 44 goto __label_6 23194 goto __label_3 23195 __label_5: # case 23196 box $P5, 1 23197 setattribute self, 'hll', $P5 23198 __label_6: # case 23199 goto __label_4 # break 23200 __label_3: # default 23201 WSubId_80("token in class key", $P2) 23202 __label_4: # switch end 23203 __label_7: # do 23204 $P2 = __ARG_1.'get'() 23205 $P3 = $P2.'isstring'() 23206 if $P3 goto __label_10 23207 Expected("literal string", $P2) 23208 __label_10: # endif 23209 $P3 = $P2.'rawstring'() 23210 push $P1, $P3 23211 __label_9: # continue 23212 $P2 = __ARG_1.'get'() 23213 $P3 = $P2.'isop'(",") 23214 if_null $P3, __label_8 23215 if $P3 goto __label_7 23216 __label_8: # enddo 23217 bindlast1("]", $P2) 23218 __label_2: # endif 23219 setattribute self, 'key', $P1 23220 23221.end # ClassSpecifierParrotKey 23222 23223 23224.sub 'reftype' :method 23225 .return(2) 23226 23227.end # reftype 23228 23229 23230.sub 'hasHLL' :method 23231 getattribute $P1, self, 'hll' 23232 isnull $I1, $P1 23233 not $I1 23234 .return($I1) 23235 23236.end # hasHLL 23237 23238 23239.sub 'checknskey' :method 23240 .param pmc __ARG_1 23241 getattribute $P2, self, 'key' 23242 $P1 = __ARG_1.'scopesearch'($P2, 2) 23243 if_null $P1, __label_2 23244 $P2 = $P1.'getpath'() 23245 goto __label_1 23246 __label_2: 23247 null $P2 23248 __label_1: 23249 .return($P2) 23250 23251.end # checknskey 23252 23253 23254.sub 'emit' :method 23255 .param pmc __ARG_1 23256 .param pmc __ARG_2 23257 getattribute $P1, self, 'key' 23258 null $S1 23259 elements $I1, $P1 23260 unless $I1 goto __label_1 23261 join $S3, "'; '", $P1 23262 concat $S4, "[ '", $S3 23263 concat $S4, $S4, "' ]" 23264 set $S1, $S4 23265 __label_1: # endif 23266 set $S2, $S1 23267 __ARG_1.'print'($S2) 23268 23269.end # emit 23270 23271.sub Winxed_class_init :anon :load :init 23272 newclass $P0, [ 'Winxed'; 'Compiler'; 'ClassSpecifierParrotKey' ] 23273 get_class $P1, [ 'Winxed'; 'Compiler'; 'ClassSpecifier' ] 23274 addparent $P0, $P1 23275 addattribute $P0, 'key' 23276 addattribute $P0, 'hll' 23277.end 23278.namespace [ 'Winxed'; 'Compiler'; 'ClassSpecifierId' ] 23279 23280.sub 'ClassSpecifierId' :method 23281 .param pmc __ARG_1 23282 .param pmc __ARG_2 23283 .param pmc __ARG_3 23284 self.'ClassSpecifier'(__ARG_2, __ARG_3) 23285 root_new $P1, ['parrot';'ResizablePMCArray'] 23286 assign $P1, 1 23287 set $S1, __ARG_3 23288 $P1[0] = $S1 23289 null $P2 23290 __label_2: # while 23291 $P2 = __ARG_1.'get'() 23292 $P3 = $P2.'isop'(".") 23293 if_null $P3, __label_1 23294 unless $P3 goto __label_1 23295 $P2 = __ARG_1.'get'() 23296 set $S1, $P2 23297 push $P1, $S1 23298 goto __label_2 23299 __label_1: # endwhile 23300 __ARG_1.'unget'($P2) 23301 setattribute self, 'key', $P1 23302 23303.end # ClassSpecifierId 23304 23305 23306.sub 'clone' :method 23307 .param pmc __ARG_1 23308 new $P1, [ 'Winxed'; 'Compiler'; 'ClassSpecifierId' ] 23309 getattribute $P2, self, 'start' 23310 $P1.'ClassSpecifier'(__ARG_1, $P2) 23311 getattribute $P3, self, 'key' 23312 setattribute $P1, 'key', $P3 23313 .return($P1) 23314 23315.end # clone 23316 23317 23318.sub 'reftype' :method 23319 .return(3) 23320 23321.end # reftype 23322 23323 23324.sub 'last' :method 23325 getattribute $P1, self, 'key' 23326 $P2 = $P1[-1] 23327 .return($P2) 23328 23329.end # last 23330 23331 23332.sub 'checknskey' :method 23333 .param pmc __ARG_1 23334 getattribute $P2, self, 'key' 23335 $P1 = __ARG_1.'scopesearch'($P2, 2) 23336 if_null $P1, __label_2 23337 $P2 = $P1.'getpath'() 23338 goto __label_1 23339 __label_2: 23340 null $P2 23341 __label_1: 23342 .return($P2) 23343 23344.end # checknskey 23345 23346 23347.sub 'emit' :method 23348 .param pmc __ARG_1 23349 .param pmc __ARG_2 23350.const 'Sub' WSubId_109 = "WSubId_109" 23351 getattribute $P3, self, 'key' 23352 $P1 = __ARG_2.'scopesearch'($P3, 2) 23353 unless_null $P1, __label_1 23354 getattribute $P3, self, 'key' 23355 join $S2, ".", $P3 23356 getattribute $P4, self, 'start' 23357 WSubId_109(__ARG_1, $S2, $P4) 23358 getattribute $P2, self, 'key' 23359 null $S1 23360 elements $I1, $P2 23361 unless $I1 goto __label_3 23362 join $S2, "'; '", $P2 23363 concat $S4, "[ '", $S2 23364 concat $S4, $S4, "' ]" 23365 set $S1, $S4 23366 __label_3: # endif 23367 set $S3, $S1 23368 __ARG_1.'print'($S3) 23369 goto __label_2 23370 __label_1: # else 23371 $P3 = $P1.'getclasskey'() 23372 __ARG_1.'print'($P3) 23373 __label_2: # endif 23374 23375.end # emit 23376 23377 23378.sub 'emit_new' :method 23379 .param pmc __ARG_1 23380 .param pmc __ARG_2 23381 .param string __ARG_3 23382.const 'Sub' WSubId_109 = "WSubId_109" 23383 $P1 = self.'checknskey'(__ARG_2) 23384 unless_null $P1, __label_1 23385 getattribute $P3, self, 'key' 23386 join $S2, ".", $P3 23387 getattribute $P4, self, 'start' 23388 WSubId_109(__ARG_1, $S2, $P4) 23389 getattribute $P2, self, 'key' 23390 null $S1 23391 elements $I1, $P2 23392 unless $I1 goto __label_3 23393 join $S2, "'; '", $P2 23394 concat $S4, "[ '", $S2 23395 concat $S4, $S4, "' ]" 23396 set $S1, $S4 23397 __label_3: # endif 23398 set $S3, $S1 23399 __ARG_1.'say'("new ", __ARG_3, ", ", $S3) 23400 goto __label_2 23401 __label_1: # else 23402 $P1.'emit_new'(__ARG_1, __ARG_2, __ARG_3) 23403 __label_2: # endif 23404 23405.end # emit_new 23406 23407.sub Winxed_class_init :anon :load :init 23408 newclass $P0, [ 'Winxed'; 'Compiler'; 'ClassSpecifierId' ] 23409 get_class $P1, [ 'Winxed'; 'Compiler'; 'ClassSpecifier' ] 23410 addparent $P0, $P1 23411 addattribute $P0, 'key' 23412.end 23413.namespace [ 'Winxed'; 'Compiler'; 'ClassBase' ] 23414 23415.sub 'ClassBase' :method 23416 .param pmc __ARG_1 23417 .param pmc __ARG_2 23418 .param pmc __ARG_3 23419 self.'initbase'(__ARG_1, __ARG_3) 23420 setattribute self, 'name', __ARG_2 23421 $P2 = __ARG_3.'getpath'() 23422 $P3 = __ARG_2.'getidentifier'() 23423 $P1 = $P2.'createchild'($P3) 23424 setattribute self, 'classns', $P1 23425 23426.end # ClassBase 23427 23428 23429.sub 'getpath' :method 23430 getattribute $P1, self, 'classns' 23431 .return($P1) 23432 23433.end # getpath 23434 23435 23436.sub 'getclasskey' :method 23437 getattribute $P1, self, 'classns' 23438 .tailcall $P1.'getparrotkey'() 23439 23440.end # getclasskey 23441 23442.sub Winxed_class_init :anon :load :init 23443 newclass $P0, [ 'Winxed'; 'Compiler'; 'ClassBase' ] 23444 get_class $P1, [ 'Winxed'; 'Compiler'; 'CommonBase' ] 23445 addparent $P0, $P1 23446 addattribute $P0, 'name' 23447 addattribute $P0, 'classns' 23448.end 23449.namespace [ 'Winxed'; 'Compiler'; 'FunctionContainer' ] 23450 23451.sub 'FunctionContainer' :method 23452 root_new $P2, ['parrot';'Hash'] 23453 setattribute self, 'functions', $P2 23454 23455.end # FunctionContainer 23456 23457 23458.sub 'addfunction' :method 23459 .param pmc __ARG_1 23460 getattribute $P1, self, 'functions' 23461 getattribute $P3, __ARG_1, 'name' 23462 null $S1 23463 if_null $P3, __label_1 23464 set $S1, $P3 23465 __label_1: 23466 $P2 = $P1[$S1] 23467 unless_null $P2, __label_2 23468 $P1[$S1] = __ARG_1 23469 goto __label_3 23470 __label_2: # else 23471 isa $I1, $P2, [ 'Winxed'; 'Compiler'; 'FunctionStatement' ] 23472 unless $I1 goto __label_4 23473 $P2.'setmulti'() 23474 __label_4: # endif 23475 isa $I1, __ARG_1, [ 'Winxed'; 'Compiler'; 'FunctionStatement' ] 23476 unless $I1 goto __label_5 23477 __ARG_1.'setmulti'() 23478 __label_5: # endif 23479 __label_3: # endif 23480 23481.end # addfunction 23482 23483 23484.sub 'find' :method 23485 .param string __ARG_1 23486 getattribute $P1, self, 'functions' 23487 $P2 = $P1[__ARG_1] 23488 .return($P2) 23489 23490.end # find 23491 23492.sub Winxed_class_init :anon :load :init 23493 newclass $P0, [ 'Winxed'; 'Compiler'; 'FunctionContainer' ] 23494 addattribute $P0, 'functions' 23495.end 23496.namespace [ 'Winxed'; 'Compiler'; 'ClassStatement' ] 23497 23498.sub 'ClassStatement' :method 23499 .param pmc __ARG_1 23500 .param pmc __ARG_2 23501 .param pmc __ARG_3 23502 .param pmc __ARG_4 23503.const 'Sub' WSubId_74 = "WSubId_74" 23504.const 'Sub' WSubId_103 = "WSubId_103" 23505.const 'Sub' bindlast1 = "bindlast1" 23506.const 'Sub' WSubId_148 = "WSubId_148" 23507.const 'Sub' Expected = "Expected" 23508.const 'Sub' WSubId_82 = "WSubId_82" 23509.const 'Sub' WSubId_80 = "WSubId_80" 23510 self.'ClassBase'(__ARG_1, __ARG_2, __ARG_3) 23511 self.'VarContainer'() 23512 new $P8, [ 'Winxed'; 'Compiler'; 'FunctionContainer' ] 23513 $P8.'FunctionContainer'() 23514 set $P8, $P8 23515 setattribute self, 'funcont', $P8 23516 setattribute self, 'parent', __ARG_3 23517 root_new $P1, ['parrot';'ResizablePMCArray'] 23518 setattribute self, 'items', $P1 23519 root_new $P2, ['parrot';'ResizablePMCArray'] 23520 setattribute self, 'members', $P2 23521 $P3 = __ARG_4.'get'() 23522 $P7 = $P3.'isop'(":") 23523 if_null $P7, __label_1 23524 unless $P7 goto __label_1 23525 $P9 = WSubId_74(__ARG_4, self, WSubId_103) 23526 setattribute self, 'bases', $P9 23527 $P3 = __ARG_4.'get'() 23528 __label_1: # endif 23529 bindlast1("{", $P3) 23530 getattribute $P8, self, 'classns' 23531 $P7 = $P8.'fullname'() 23532 WSubId_148(self, "__CLASS__", $P7) 23533 $P3 = __ARG_4.'get'() 23534 __label_4: # for condition 23535 $P7 = $P3.'isop'("}") 23536 if $P7 goto __label_3 23537 $P8 = $P3.'checkkeyword'() 23538 set $S1, $P8 23539 if $S1 == "function" goto __label_7 23540 if $S1 == "var" goto __label_8 23541 if $S1 == "const" goto __label_9 23542 goto __label_5 23543 __label_7: # case 23544 new $P9, [ 'Winxed'; 'Compiler'; 'MethodStatement' ] 23545 $P9.'MethodStatement'($P3, __ARG_4, self) 23546 set $P4, $P9 23547 self.'addmethod'($P4) 23548 push $P1, $P4 23549 goto __label_6 # break 23550 __label_8: # case 23551 $P5 = __ARG_4.'get'() 23552 $P10 = $P5.'isidentifier'() 23553 if $P10 goto __label_10 23554 Expected("member identifier", $P5) 23555 __label_10: # endif 23556 push $P2, $P5 23557 $P3 = __ARG_4.'get'() 23558 $P11 = $P3.'isop'(";") 23559 if $P11 goto __label_11 23560 Expected("';' in member declaration", $P3) 23561 __label_11: # endif 23562 goto __label_6 # break 23563 __label_9: # case 23564 $P6 = WSubId_82($P3, __ARG_4, self) 23565 push $P1, $P6 23566 goto __label_6 # break 23567 __label_5: # default 23568 WSubId_80("item in class", $P3) 23569 __label_6: # switch end 23570 __label_2: # for iteration 23571 $P3 = __ARG_4.'get'() 23572 goto __label_4 23573 __label_3: # for end 23574 23575.end # ClassStatement 23576 23577 23578.sub 'getlabel' :method 23579 .param string __ARG_1 23580 null $S1 23581 .return($S1) 23582 23583.end # getlabel 23584 23585 23586.sub 'addmethod' :method 23587 .param pmc __ARG_1 23588 getattribute $P1, self, 'funcont' 23589 $P1.'addfunction'(__ARG_1) 23590 23591.end # addmethod 23592 23593 23594.sub 'generatesubid' :method 23595 getattribute $P1, self, 'owner' 23596 .tailcall $P1.'generatesubid'() 23597 23598.end # generatesubid 23599 23600 23601.sub 'checkclass' :method 23602 .param string __ARG_1 23603 getattribute $P1, self, 'parent' 23604 .tailcall $P1.'checkclass'(__ARG_1) 23605 23606.end # checkclass 23607 23608 23609.sub 'scopesearch' :method 23610 .param pmc __ARG_1 23611 .param int __ARG_2 23612 getattribute $P1, self, 'parent' 23613 .tailcall $P1.'scopesearch'(__ARG_1, __ARG_2) 23614 23615.end # scopesearch 23616 23617 23618.sub 'use_builtin' :method 23619 .param string __ARG_1 23620 getattribute $P1, self, 'owner' 23621 .tailcall $P1.'use_builtin'(__ARG_1) 23622 23623.end # use_builtin 23624 23625 23626.sub 'optimize' :method 23627 getattribute $P1, self, 'items' 23628 if_null $P1, __label_2 23629 elements $I1, $P1 23630 goto __label_1 23631 __label_2: 23632 null $I1 23633 __label_1: 23634 null $I2 23635 __label_5: # for condition 23636 ge $I2, $I1, __label_4 23637 $P3 = $P1[$I2] 23638 $P2 = $P3.'optimize'() 23639 $P1[$I2] = $P2 23640 __label_3: # for iteration 23641 inc $I2 23642 goto __label_5 23643 __label_4: # for end 23644 .return(self) 23645 23646.end # optimize 23647 23648 23649.sub 'emit' :method 23650 .param pmc __ARG_1 23651 getattribute $P8, self, 'classns' 23652 $P8.'emitnamespace'(__ARG_1) 23653 set $P1, __ARG_1 23654 getattribute $P2, self, 'items' 23655.const 'Sub' bindlast = "bindlast" 23656.const 'Sub' bindmethod = "bindmethod" 23657 set $P3, $P2 23658 $P8 = bindmethod("emit") 23659 $P4 = bindlast($P8, $P1) 23660 if_null $P3, __label_2 23661 iter $P9, $P3 23662 set $P9, 0 23663 __label_1: # for iteration 23664 unless $P9 goto __label_2 23665 shift $P5, $P9 23666 $P4($P5) 23667 goto __label_1 23668 __label_2: # endfor 23669 __ARG_1.'say'(".sub Winxed_class_init :anon :load :init") 23670 $P8 = self.'getclasskey'() 23671 __ARG_1.'say'(" ", "newclass $P0, ", $P8) 23672 set $I1, 1 23673 getattribute $P8, self, 'bases' 23674 if_null $P8, __label_4 23675 iter $P10, $P8 23676 set $P10, 0 23677 __label_3: # for iteration 23678 unless $P10 goto __label_4 23679 shift $P6, $P10 23680 $P6.'annotate'(__ARG_1) 23681 set $I2, $I1 23682 inc $I1 23683 set $S2, $I2 23684 concat $S1, "$P", $S2 23685 __ARG_1.'print'(" ", "get_class ", $S1, ", ") 23686 getattribute $P8, self, 'parent' 23687 $P6.'emit'(__ARG_1, $P8) 23688 __ARG_1.'say'() 23689 __ARG_1.'say'(" ", "addparent $P0, ", $S1) 23690 goto __label_3 23691 __label_4: # endfor 23692 getattribute $P8, self, 'members' 23693 if_null $P8, __label_6 23694 iter $P11, $P8 23695 set $P11, 0 23696 __label_5: # for iteration 23697 unless $P11 goto __label_6 23698 shift $P7, $P11 23699 __ARG_1.'annotate'($P7) 23700 __ARG_1.'say'(" ", "addattribute $P0, '", $P7, "'") 23701 goto __label_5 23702 __label_6: # endfor 23703 __ARG_1.'say'(".end") 23704 23705.end # emit 23706 23707.sub Winxed_class_init :anon :load :init 23708 newclass $P0, [ 'Winxed'; 'Compiler'; 'ClassStatement' ] 23709 get_class $P1, [ 'Winxed'; 'Compiler'; 'ClassBase' ] 23710 addparent $P0, $P1 23711 get_class $P2, [ 'Winxed'; 'Compiler'; 'VarContainer' ] 23712 addparent $P0, $P2 23713 addattribute $P0, 'parent' 23714 addattribute $P0, 'bases' 23715 addattribute $P0, 'constants' 23716 addattribute $P0, 'items' 23717 addattribute $P0, 'members' 23718 addattribute $P0, 'funcont' 23719.end 23720.namespace [ 'Winxed'; 'Compiler'; 'DeclareClassStatement' ] 23721 23722.sub 'DeclareClassStatement' :method 23723 .param pmc __ARG_1 23724 .param pmc __ARG_2 23725 .param pmc __ARG_3 23726 self.'ClassBase'(__ARG_1, __ARG_2, __ARG_3) 23727 23728.end # DeclareClassStatement 23729 23730 23731.sub 'optimize' :method 23732 .return(self) 23733 23734.end # optimize 23735 23736 23737.sub 'emit' :method 23738 .param pmc __ARG_1 23739 23740.end # emit 23741 23742.sub Winxed_class_init :anon :load :init 23743 newclass $P0, [ 'Winxed'; 'Compiler'; 'DeclareClassStatement' ] 23744 get_class $P1, [ 'Winxed'; 'Compiler'; 'ClassBase' ] 23745 addparent $P0, $P1 23746.end 23747.namespace [ 'Winxed'; 'Compiler' ] 23748 23749.sub 'parseClass' :subid('WSubId_152') 23750 .param pmc __ARG_1 23751 .param pmc __ARG_2 23752 .param pmc __ARG_3 23753 $P1 = __ARG_2.'get'() 23754 $P2 = __ARG_2.'get'() 23755 root_new $P3, ['parrot';'ResizablePMCArray'] 23756 null $P4 23757 __label_3: # for condition 23758 $P5 = $P2.'isop'(".") 23759 if_null $P5, __label_2 23760 unless $P5 goto __label_2 23761 $P3.'push'($P1) 23762 $P1 = __ARG_2.'get'() 23763 __label_1: # for iteration 23764 $P2 = __ARG_2.'get'() 23765 goto __label_3 23766 __label_2: # for end 23767 $P5 = $P2.'isop'(";") 23768 if_null $P5, __label_4 23769 unless $P5 goto __label_4 23770 if_null $P3, __label_7 23771 iter $P6, $P3 23772 set $P6, 0 23773 __label_6: # for iteration 23774 unless $P6 goto __label_7 23775 shift $P4, $P6 23776 set $S1, $P4 23777 __ARG_3 = __ARG_3.'declarenamespace'($P4, $S1) 23778 goto __label_6 23779 __label_7: # endfor 23780 new $P7, [ 'Winxed'; 'Compiler'; 'DeclareClassStatement' ] 23781 $P7.'DeclareClassStatement'(__ARG_1, $P1, __ARG_3) 23782 set $P5, $P7 23783 __ARG_3.'declareclass'($P5) 23784 goto __label_5 23785 __label_4: # else 23786 __ARG_2.'unget'($P2) 23787 if_null $P3, __label_9 23788 iter $P8, $P3 23789 set $P8, 0 23790 __label_8: # for iteration 23791 unless $P8 goto __label_9 23792 shift $P4, $P8 23793 null $P5 23794 __ARG_3 = __ARG_3.'childnamespace'(__ARG_1, $P4, $P5) 23795 goto __label_8 23796 __label_9: # endfor 23797 new $P7, [ 'Winxed'; 'Compiler'; 'ClassStatement' ] 23798 $P7.'ClassStatement'(__ARG_1, $P1, __ARG_3, __ARG_2) 23799 set $P5, $P7 23800 __ARG_3.'addclass'($P5) 23801 __label_5: # endif 23802 23803.end # parseClass 23804 23805 23806.sub 'open_include' :subid('WSubId_150') 23807 .param string __ARG_1 23808 .param pmc __ARG_2 23809.const 'Sub' SyntaxError = "SyntaxError" 23810 getinterp $P1 23811 $P2 = $P1[9] 23812 $P3 = $P2[0] 23813 null $P4 23814 if_null $P3, __label_2 23815 iter $P5, $P3 23816 set $P5, 0 23817 __label_1: # for iteration 23818 unless $P5 goto __label_2 23819 shift $S1, $P5 23820 concat $S2, $S1, __ARG_1 23821 new $P6, 'ExceptionHandler' 23822 set_label $P6, __label_3 23823 push_eh $P6 23824 root_new $P4, ["parrot";"FileHandle"] 23825 $P4."open"($S2,"r") 23826 if_null $P4, __label_5 23827 $P6 = $P4.'is_closed'() 23828 if $P6 goto __label_5 23829 goto __label_2 # break 23830 __label_5: # endif 23831 pop_eh 23832 goto __label_4 23833 __label_3: 23834 .get_results($P7) 23835 finalize $P7 23836 pop_eh 23837 __label_4: 23838 goto __label_1 23839 __label_2: # endfor 23840 isnull $I1, $P4 23841 box $P6, $I1 23842 if $P6 goto __label_7 23843 $P6 = $P4.'is_closed'() 23844 __label_7: 23845 if_null $P6, __label_6 23846 unless $P6 goto __label_6 23847 SyntaxError("File not found", __ARG_2) 23848 __label_6: # endif 23849 $P4.'encoding'("utf8") 23850 .return($P4) 23851 23852.end # open_include 23853 23854 23855.sub 'include_parrot' :subid('WSubId_154') 23856 .param pmc __ARG_1 23857 .param pmc __ARG_2 23858 .param pmc __ARG_3 23859.const 'Sub' Expected = "Expected" 23860.const 'Sub' ExpectOp = "ExpectOp" 23861.const 'Sub' WSubId_150 = "WSubId_150" 23862.const 'Sub' integerValue = "integerValue" 23863 $P1 = __ARG_2.'get'() 23864 $P6 = $P1.'isstring'() 23865 if $P6 goto __label_1 23866 Expected("literal string", $P1) 23867 __label_1: # endif 23868 ExpectOp(";", __ARG_2) 23869 getattribute $P2, __ARG_1, 'file' 23870 getattribute $P6, __ARG_1, 'line' 23871 set $I1, $P6 23872 $P6 = $P1.'rawstring'() 23873 null $S1 23874 if_null $P6, __label_2 23875 set $S1, $P6 23876 __label_2: 23877 $P3 = WSubId_150($S1, __ARG_1) 23878 $P6 = $P3.'readline'() 23879 null $S2 23880 if_null $P6, __label_6 23881 set $S2, $P6 23882 __label_6: 23883 __label_5: # for condition 23884 $P7 = $P3.'eof'() 23885 if $P7 goto __label_4 23886 substr $S6, $S2, 0, 12 23887 ne $S6, ".macro_const", __label_7 23888 set $I2, 12 23889 null $S3 23890 __label_9: # while 23891 substr $S3, $S2, $I2, 1 23892 iseq $I5, $S3, " " 23893 if $I5 goto __label_10 23894 iseq $I5, $S3, "\t" 23895 __label_10: 23896 unless $I5 goto __label_8 23897 inc $I2 23898 goto __label_9 23899 __label_8: # endwhile 23900 set $I3, $I2 23901 __label_12: # while 23902 substr $S3, $S2, $I3, 1 23903 eq $S3, " ", __label_11 23904 eq $S3, "\t", __label_11 23905 eq $S3, "\n", __label_11 23906 eq $S3, "\r", __label_11 23907 eq $S3, "", __label_11 23908 inc $I3 23909 goto __label_12 23910 __label_11: # endwhile 23911 ne $I3, $I2, __label_13 23912 goto __label_3 # continue 23913 __label_13: # endif 23914 sub $I5, $I3, $I2 23915 substr $S4, $S2, $I2, $I5 23916 __label_15: # while 23917 substr $S3, $S2, $I3, 1 23918 iseq $I5, $S3, " " 23919 if $I5 goto __label_16 23920 iseq $I5, $S3, "\t" 23921 __label_16: 23922 unless $I5 goto __label_14 23923 inc $I3 23924 goto __label_15 23925 __label_14: # endwhile 23926 set $I2, $I3 23927 __label_18: # while 23928 substr $S3, $S2, $I3, 1 23929 eq $S3, " ", __label_17 23930 eq $S3, "\t", __label_17 23931 eq $S3, "\n", __label_17 23932 eq $S3, "\r", __label_17 23933 eq $S3, "", __label_17 23934 inc $I3 23935 goto __label_18 23936 __label_17: # endwhile 23937 ne $I3, $I2, __label_19 23938 goto __label_3 # continue 23939 __label_19: # endif 23940 sub $I5, $I3, $I2 23941 substr $S5, $S2, $I2, $I5 23942 null $I4 23943 substr $S6, $S5, 0, 2 23944 iseq $I5, $S6, "0x" 23945 if $I5 goto __label_22 23946 substr $S7, $S5, 0, 2 23947 iseq $I5, $S7, "0X" 23948 __label_22: 23949 unless $I5 goto __label_20 23950 substr $S8, $S5, 2 23951 box $P7, $S8 23952 $P6 = $P7.'to_int'(16) 23953 set $I4, $P6 23954 goto __label_21 23955 __label_20: # else 23956 set $I4, $S5 23957 __label_21: # endif 23958 new $P6, [ 'Winxed'; 'Compiler'; 'TokenIdentifier' ] 23959 $P6.'TokenIdentifier'($P2, $I1, $S4) 23960 set $P4, $P6 23961 $P5 = __ARG_3.'createconst'($P4, "I", 4) 23962 $P6 = integerValue(__ARG_3, $P4, $I4) 23963 $P5.'setvalue'($P6) 23964 __label_7: # endif 23965 __label_3: # for iteration 23966 $P6 = $P3.'readline'() 23967 set $S2, $P6 23968 goto __label_5 23969 __label_4: # for end 23970 $P3.'close'() 23971 23972.end # include_parrot 23973 23974 23975.sub 'include_winxed' :subid('WSubId_155') 23976 .param pmc __ARG_1 23977 .param pmc __ARG_2 23978 .param pmc __ARG_3 23979.const 'Sub' SyntaxError = "SyntaxError" 23980.const 'Sub' Expected = "Expected" 23981.const 'Sub' ExpectOp = "ExpectOp" 23982.const 'Sub' WSubId_150 = "WSubId_150" 23983 isa $I1, __ARG_3, [ 'Winxed'; 'Compiler'; 'RootNamespace' ] 23984 if $I1 goto __label_1 23985 SyntaxError("Must be used at root namespace level", __ARG_1) 23986 __label_1: # endif 23987 $P1 = __ARG_2.'get'() 23988 $P4 = $P1.'isstring'() 23989 if $P4 goto __label_2 23990 Expected("literal string", $P1) 23991 __label_2: # endif 23992 ExpectOp(";", __ARG_2) 23993 $P4 = $P1.'rawstring'() 23994 null $S1 23995 if_null $P4, __label_3 23996 set $S1, $P4 23997 __label_3: 23998 $P2 = WSubId_150($S1, __ARG_1) 23999 new $P4, [ 'Winxed'; 'Compiler'; 'Tokenizer' ] 24000 $P4.'Tokenizer'($P2, $S1, 0) 24001 set $P3, $P4 24002 __ARG_3.'parse'($P3) 24003 $P2.'close'() 24004 24005.end # include_winxed 24006 24007 24008.sub 'parsensUsing' :subid('WSubId_153') 24009 .param pmc __ARG_1 24010 .param pmc __ARG_2 24011 .param pmc __ARG_3 24012.const 'Sub' WSubId_97 = "WSubId_97" 24013.const 'Sub' ExpectOp = "ExpectOp" 24014.const 'Sub' parseDotted = "parseDotted" 24015.const 'Sub' SyntaxError = "SyntaxError" 24016.const 'Sub' parseListOrEmpty = "parseListOrEmpty" 24017.const 'Sub' parseIdentifier = "parseIdentifier" 24018.const 'Sub' toModuleFilename = "toModuleFilename" 24019.const 'Sub' Expected = "Expected" 24020 $P1 = __ARG_2.'get'() 24021 $P5 = $P1.'iskeyword'("namespace") 24022 if_null $P5, __label_1 24023 unless $P5 goto __label_1 24024 WSubId_97(__ARG_1, __ARG_2, __ARG_3) 24025 ExpectOp(";", __ARG_2) 24026 .return() 24027 __label_1: # endif 24028 $P5 = $P1.'iskeyword'("extern") 24029 if $P5 goto __label_2 24030 __ARG_2.'unget'($P1) 24031 $P2 = parseDotted(__ARG_2) 24032 elements $I1, $P2 24033 ge $I1, 1, __label_3 24034 SyntaxError("Unsupported at namespace level", $P1) 24035 __label_3: # endif 24036 ExpectOp(";", __ARG_2) 24037 __ARG_3.'use'($P2) 24038 .return() 24039 __label_2: # endif 24040 $P1 = __ARG_2.'get'() 24041 $P5 = $P1.'isstring'() 24042 set $I2, $P5 24043 if $I2 goto __label_6 24044 $P6 = $P1.'isidentifier'() 24045 set $I2, $P6 24046 if $I2 goto __label_7 24047 goto __label_5 24048 __label_6: # case 24049 __ARG_2.'warn'("using extern 'file'; is deprecated, use $loadlib instead.", $P1) 24050 null $S1 24051 if_null $P1, __label_8 24052 set $S1, $P1 24053 __label_8: 24054 __ARG_3.'addlib'($S1) 24055 ExpectOp(";", __ARG_2) 24056 goto __label_4 # break 24057 __label_7: # case 24058 __ARG_2.'unget'($P1) 24059 $P3 = parseDotted(__ARG_2) 24060 null $P7 24061 $P4 = parseListOrEmpty(__ARG_2, $P7, parseIdentifier, ";") 24062 if_null $P4, __label_9 24063 __ARG_3.'addextern'($P3, $P4) 24064 __label_9: # endif 24065 $P8 = toModuleFilename($P3) 24066 __ARG_3.'addload'($P8) 24067 goto __label_4 # break 24068 __label_5: # default 24069 Expected("string literal or identifier", $P1) 24070 __label_4: # switch end 24071 24072.end # parsensUsing 24073 24074.namespace [ 'Winxed'; 'Compiler'; 'External' ] 24075 24076.sub 'External' :method 24077 .param pmc __ARG_1 24078 .param pmc __ARG_2 24079 setattribute self, 'module', __ARG_1 24080 setattribute self, 'names', __ARG_2 24081 24082.end # External 24083 24084 24085.sub 'emit' :subid('WSubId_17') :method 24086 .param pmc __ARG_1 24087.const 'Sub' WSubId_18 = "WSubId_18" 24088.lex '__WLEX_1', __ARG_1 24089 __ARG_1.'say'(".sub 'importextern' :anon :load :init\n .local pmc ex, curns, srcns, symbols\n ex = new ['Exporter']\n curns = get_namespace\n symbols = new ['ResizableStringArray']\n") 24090 getattribute $P4, self, 'module' 24091 join $S1, "'; '", $P4 24092 concat $S2, "['parrot'; '", $S1 24093 concat $S2, $S2, "']" 24094 __ARG_1.'emitget_root_namespace'("srcns", $S2) 24095 getattribute $P1, self, 'names' 24096 newclosure $P2, WSubId_18 24097 if_null $P1, __label_2 24098 iter $P5, $P1 24099 set $P5, 0 24100 __label_1: # for iteration 24101 unless $P5 goto __label_2 24102 shift $P3, $P5 24103 $P2($P3) 24104 goto __label_1 24105 __label_2: # endfor 24106 __ARG_1.'say'(" ex.'destination'(curns)\n ex.'import'(srcns :named('source'), curns :named('destination'), symbols :named('globals'))\n.end\n") 24107 24108.end # emit 24109 24110 24111.sub '' :anon :subid('WSubId_18') :outer('WSubId_17') 24112 .param string __ARG_2 24113 find_lex $P1, '__WLEX_1' 24114 $P1.'say'(" push symbols, '", __ARG_2, "'") 24115 24116.end # WSubId_18 24117 24118.sub Winxed_class_init :anon :load :init 24119 newclass $P0, [ 'Winxed'; 'Compiler'; 'External' ] 24120 addattribute $P0, 'module' 24121 addattribute $P0, 'names' 24122.end 24123.namespace [ 'Winxed'; 'Compiler'; 'NamespacePath' ] 24124 24125.sub 'NamespacePath' :method 24126 .param string __ARG_1 :optional 24127 .param int __ARG_2 :optional 24128 new $P1, ['ResizableStringArray'] 24129 unless __ARG_2 goto __label_1 24130 box $P2, __ARG_1 24131 setattribute self, 'hll', $P2 24132 goto __label_2 24133 __label_1: # else 24134 if_null __ARG_1, __label_3 24135 push $P1, __ARG_1 24136 __label_3: # endif 24137 __label_2: # endif 24138 setattribute self, 'path', $P1 24139 24140.end # NamespacePath 24141 24142 24143.sub 'createchild' :method 24144 .param string __ARG_1 24145 new $P1, [ 'Winxed'; 'Compiler'; 'NamespacePath' ] 24146 getattribute $P4, self, 'hll' 24147 setattribute $P1, 'hll', $P4 24148 getattribute $P3, self, 'path' 24149 clone $P2, $P3 24150 push $P2, __ARG_1 24151 setattribute $P1, 'path', $P2 24152 .return($P1) 24153 24154.end # createchild 24155 24156 24157.sub 'samehllas' :method 24158 .param pmc __ARG_1 24159 $P1 = __ARG_1.'getpath'() 24160 getattribute $P2, self, 'hll' 24161 if_null $P1, __label_2 24162 getattribute $P3, $P1, 'hll' 24163 goto __label_1 24164 __label_2: 24165 null $P3 24166 __label_1: 24167 unless_null $P2, __label_3 24168 isnull $I1, $P3 24169 .return($I1) 24170 goto __label_4 24171 __label_3: # else 24172 unless_null $P3, __label_6 24173 null $I2 24174 goto __label_5 24175 __label_6: 24176 iseq $I2, $P2, $P3 24177 __label_5: 24178 .return($I2) 24179 __label_4: # endif 24180 24181.end # samehllas 24182 24183 24184.sub 'fullname' :method 24185 getattribute $P1, self, 'path' 24186 join $S1, ".", $P1 24187 getattribute $P1, self, 'hll' 24188 if_null $P1, __label_1 24189 getattribute $P2, self, 'hll' 24190 set $S2, $P2 24191 concat $S3, $S2, "." 24192 concat $S3, $S3, $S1 24193 .return($S3) 24194 goto __label_2 24195 __label_1: # else 24196 .return($S1) 24197 __label_2: # endif 24198 24199.end # fullname 24200 24201 24202.sub 'getparrotkey' :method 24203 getattribute $P1, self, 'path' 24204 null $S1 24205 elements $I1, $P1 24206 unless $I1 goto __label_1 24207 join $S2, "'; '", $P1 24208 concat $S3, "[ '", $S2 24209 concat $S3, $S3, "' ]" 24210 set $S1, $S3 24211 __label_1: # endif 24212 .return($S1) 24213 24214.end # getparrotkey 24215 24216 24217.sub 'getparrotrootkey' :method 24218 getattribute $P1, self, 'path' 24219 getattribute $P2, self, 'hll' 24220 set $S1, "[ '" 24221 if_null $P2, __label_1 24222 set $S3, $P2 24223 downcase $S2, $S3 24224 concat $S1, $S1, $S2 24225 goto __label_2 24226 __label_1: # else 24227 concat $S1, $S1, "parrot" 24228 __label_2: # endif 24229 concat $S1, $S1, "'" 24230 elements $I1, $P1 24231 unless $I1 goto __label_3 24232 join $S2, "'; '", $P1 24233 concat $S1, $S1, "; '" 24234 concat $S1, $S1, $S2 24235 concat $S1, $S1, "'" 24236 __label_3: # endif 24237 concat $S1, $S1, " ]" 24238 .return($S1) 24239 24240.end # getparrotrootkey 24241 24242 24243.sub 'emitnamespace' :method 24244 .param pmc __ARG_1 24245 getattribute $P1, self, 'path' 24246 __ARG_1.'print'(".namespace [ ") 24247 elements $I1, $P1 24248 unless $I1 goto __label_1 24249 join $S1, "'; '", $P1 24250 __ARG_1.'print'("'", $S1, "' ") 24251 __label_1: # endif 24252 __ARG_1.'say'("]") 24253 24254.end # emitnamespace 24255 24256 24257.sub 'emit_new' :method 24258 .param pmc __ARG_1 24259 .param pmc __ARG_2 24260 .param string __ARG_3 24261 .param string __ARG_4 :optional 24262.const 'Sub' sformat = "sformat" 24263 $P1 = self.'samehllas'(__ARG_2) 24264 if_null $P1, __label_1 24265 unless $P1 goto __label_1 24266 $P3 = self.'getparrotkey'() 24267 $P2 = sformat(" new %0, %1", __ARG_3, $P3) 24268 __ARG_1.'print'($P2) 24269 goto __label_2 24270 __label_1: # else 24271 $P5 = self.'getparrotrootkey'() 24272 $P4 = sformat(" root_new %0, %1", __ARG_3, $P5) 24273 __ARG_1.'print'($P4) 24274 __label_2: # endif 24275 if_null __ARG_4, __label_3 24276 eq __ARG_4, "", __label_3 24277 __ARG_1.'print'(__ARG_4) 24278 __label_3: # endif 24279 __ARG_1.'say'() 24280 24281.end # emit_new 24282 24283 24284.sub 'emit_get_namespace' :method 24285 .param pmc __ARG_1 24286 .param pmc __ARG_2 24287 .param string __ARG_3 24288 $P1 = self.'samehllas'(__ARG_2) 24289 if_null $P1, __label_1 24290 unless $P1 goto __label_1 24291 $P2 = self.'getparrotkey'() 24292 __ARG_1.'emitget_hll_namespace'(__ARG_3, $P2) 24293 goto __label_2 24294 __label_1: # else 24295 $P3 = self.'getparrotrootkey'() 24296 __ARG_1.'emitget_root_namespace'(__ARG_3, $P3) 24297 __label_2: # endif 24298 24299.end # emit_get_namespace 24300 24301 24302.sub 'emit_get_class' :method 24303 .param pmc __ARG_1 24304 .param pmc __ARG_2 24305 .param string __ARG_3 24306.const 'Sub' sformat = "sformat" 24307 $P3 = self.'samehllas'(__ARG_2) 24308 if_null $P3, __label_1 24309 unless $P3 goto __label_1 24310 $P5 = self.'getparrotkey'() 24311 $P4 = sformat(" get_class %0, %1", __ARG_3, $P5) 24312 __ARG_1.'say'($P4) 24313 goto __label_2 24314 __label_1: # else 24315 getattribute $P1, self, 'hll' 24316 getattribute $P3, self, 'path' 24317 clone $P2, $P3 24318 $P3 = $P2.'pop'() 24319 null $S1 24320 if_null $P3, __label_3 24321 set $S1, $P3 24322 __label_3: 24323 if_null $P1, __label_5 24324 set $S3, $P1 24325 downcase $S2, $S3 24326 goto __label_4 24327 __label_5: 24328 set $S2, "parrot" 24329 __label_4: 24330 elements $I1, $P2 24331 unless $I1 goto __label_6 24332 join $S3, "'; '", $P2 24333 $P3 = sformat(" get_root_global %0, ['%1'; '%2'], '%3'", __ARG_3, $S2, $S3, $S1) 24334 __ARG_1.'say'($P3) 24335 goto __label_7 24336 __label_6: # else 24337 $P4 = sformat(" get_root_global %0, ['%1'], '%2'", __ARG_3, $S2, $S1) 24338 __ARG_1.'say'($P4) 24339 __label_7: # endif 24340 $P3 = sformat(" get_class %0, %0", __ARG_3) 24341 __ARG_1.'say'($P3) 24342 __label_2: # endif 24343 24344.end # emit_get_class 24345 24346 24347.sub 'emit_get_global' :method 24348 .param pmc __ARG_1 24349 .param pmc __ARG_2 24350 .param string __ARG_3 24351 .param string __ARG_4 24352 $P1 = self.'samehllas'(__ARG_2) 24353 if_null $P1, __label_1 24354 unless $P1 goto __label_1 24355 $P2 = self.'getparrotkey'() 24356 __ARG_1.'emitget_hll_global'(__ARG_3, __ARG_4, $P2) 24357 goto __label_2 24358 __label_1: # else 24359 $P3 = self.'getparrotrootkey'() 24360 __ARG_1.'emitget_root_global'(__ARG_3, __ARG_4, $P3) 24361 __label_2: # endif 24362 24363.end # emit_get_global 24364 24365.sub Winxed_class_init :anon :load :init 24366 newclass $P0, [ 'Winxed'; 'Compiler'; 'NamespacePath' ] 24367 addattribute $P0, 'hll' 24368 addattribute $P0, 'path' 24369.end 24370.namespace [ 'Winxed'; 'Compiler'; 'NamespaceBase' ] 24371 24372.sub 'NamespaceBase' :method 24373 .param pmc __ARG_1 24374 .param pmc __ARG_2 24375.const 'Sub' WSubId_148 = "WSubId_148" 24376 self.'VarContainer'() 24377 setattribute self, 'nspath', __ARG_1 24378 unless_null __ARG_2, __label_1 24379 root_new $P2, ['parrot';'ResizablePMCArray'] 24380 setattribute self, 'namespaces', $P2 24381 root_new $P2, ['parrot';'ResizablePMCArray'] 24382 setattribute self, 'usednamespaces', $P2 24383 root_new $P2, ['parrot';'ResizablePMCArray'] 24384 setattribute self, 'classes', $P2 24385 new $P2, [ 'Winxed'; 'Compiler'; 'FunctionContainer' ] 24386 $P2.'FunctionContainer'() 24387 set $P2, $P2 24388 setattribute self, 'funcont', $P2 24389 $P1 = __ARG_1.'fullname'() 24390 WSubId_148(self, "__NAMESPACE__", $P1) 24391 goto __label_2 24392 __label_1: # else 24393 getattribute $P2, __ARG_2, 'locals' 24394 setattribute self, 'locals', $P2 24395 getattribute $P2, __ARG_2, 'namespaces' 24396 setattribute self, 'namespaces', $P2 24397 getattribute $P2, __ARG_2, 'usednamespaces' 24398 setattribute self, 'usednamespaces', $P2 24399 getattribute $P2, __ARG_2, 'classes' 24400 setattribute self, 'classes', $P2 24401 getattribute $P2, __ARG_2, 'funcont' 24402 setattribute self, 'funcont', $P2 24403 __label_2: # endif 24404 root_new $P2, ['parrot';'ResizablePMCArray'] 24405 setattribute self, 'items', $P2 24406 24407.end # NamespaceBase 24408 24409 24410.sub 'getlabel' :method 24411 .param string __ARG_1 24412 null $S1 24413 .return($S1) 24414 24415.end # getlabel 24416 24417 24418.sub 'addfunction' :method 24419 .param pmc __ARG_1 24420 getattribute $P1, self, 'funcont' 24421 $P1.'addfunction'(__ARG_1) 24422 24423.end # addfunction 24424 24425 24426.sub 'fixnamespaces' :subid('fixnamespaces') :method 24427.const 'Sub' bindmethod = "bindmethod" 24428.const 'Sub' method_fun = "method_fun" 24429.const 'Sub' WSubId_20 = "WSubId_20" 24430.lex '__WLEX_1', $P4 24431 getattribute $P1, self, 'namespaces' 24432 $P2 = bindmethod("fixnamespaces") 24433 if_null $P1, __label_2 24434 iter $P8, $P1 24435 set $P8, 0 24436 __label_1: # for iteration 24437 unless $P8 goto __label_2 24438 shift $P3, $P8 24439 $P2($P3) 24440 goto __label_1 24441 __label_2: # endfor 24442 $P4 = method_fun(self, "usenamespace") 24443 getattribute $P5, self, 'usednamespaces' 24444 newclosure $P6, WSubId_20 24445 if_null $P5, __label_4 24446 iter $P9, $P5 24447 set $P9, 0 24448 __label_3: # for iteration 24449 unless $P9 goto __label_4 24450 shift $P7, $P9 24451 $P6($P7) 24452 goto __label_3 24453 __label_4: # endfor 24454 24455.end # fixnamespaces 24456 24457 24458.sub '' :anon :subid('WSubId_20') :outer('fixnamespaces') 24459 .param pmc __ARG_1 24460 find_lex $P1, '__WLEX_1' 24461 getattribute $P2, __ARG_1, 'usednamespaces' 24462 set $P3, $P1 24463 if_null $P2, __label_2 24464 iter $P5, $P2 24465 set $P5, 0 24466 __label_1: # for iteration 24467 unless $P5 goto __label_2 24468 shift $P4, $P5 24469 $P3($P4) 24470 goto __label_1 24471 __label_2: # endfor 24472 24473.end # WSubId_20 24474 24475 24476.sub 'getpath' :method 24477 getattribute $P1, self, 'nspath' 24478 .return($P1) 24479 24480.end # getpath 24481 24482 24483.sub 'usenamespace' :method 24484 .param pmc __ARG_1 24485 ne_addr __ARG_1, self, __label_1 24486 .return() 24487 __label_1: # endif 24488 getattribute $P1, self, 'usednamespaces' 24489 set $P2, $P1 24490 set $P3, __ARG_1 24491 if_null $P2, __label_4 24492 iter $P6, $P2 24493 set $P6, 0 24494 __label_3: # for iteration 24495 unless $P6 goto __label_4 24496 shift $P4, $P6 24497 ne_addr $P4, $P3, __label_5 24498 set $P5, $P4 24499 goto __label_6 24500 __label_5: # endif 24501 goto __label_3 24502 __label_4: # endfor 24503 null $P5 24504 __label_6: 24505 set $P7, $P5 24506 if_null $P7, __label_2 24507 .return() 24508 __label_2: # endif 24509 push $P1, __ARG_1 24510 24511.end # usenamespace 24512 24513 24514.sub 'use' :method 24515 .param pmc __ARG_1 24516 $P1 = self.'scopesearch'(__ARG_1, 0) 24517 if_null $P1, __label_1 24518 isa $I1, $P1, [ 'Winxed'; 'Compiler'; 'FunctionStatement' ] 24519 unless $I1 goto __label_3 24520 self.'addfunction'($P1) 24521 __label_3: # endif 24522 goto __label_2 24523 __label_1: # else 24524 $P3 = __ARG_1.'pop'() 24525 null $S1 24526 if_null $P3, __label_4 24527 set $S1, $P3 24528 __label_4: 24529 $P2 = self.'scopesearch'(__ARG_1, 1) 24530 if_null $P2, __label_5 24531 $P1 = $P2.'getvar'($S1) 24532 if_null $P1, __label_6 24533 self.'createvarused'($S1, $P1) 24534 __label_6: # endif 24535 __label_5: # endif 24536 __label_2: # endif 24537 24538.end # use 24539 24540 24541.sub 'getusedns' :subid('WSubId_21') :method 24542 .param string __ARG_1 24543.const 'Sub' WSubId_22 = "WSubId_22" 24544.lex '__WLEX_1', __ARG_1 24545 getattribute $P1, self, 'usednamespaces' 24546 newclosure $P2, WSubId_22 24547 if_null $P1, __label_2 24548 iter $P5, $P1 24549 set $P5, 0 24550 __label_1: # for iteration 24551 unless $P5 goto __label_2 24552 shift $P3, $P5 24553 $P6 = $P2($P3) 24554 if_null $P6, __label_3 24555 unless $P6 goto __label_3 24556 set $P4, $P3 24557 goto __label_4 24558 __label_3: # endif 24559 goto __label_1 24560 __label_2: # endfor 24561 null $P4 24562 __label_4: 24563 set $P6, $P4 24564 .return($P6) 24565 24566.end # getusedns 24567 24568 24569.sub '' :anon :subid('WSubId_22') :outer('WSubId_21') 24570 .param pmc __ARG_2 24571 find_lex $S1, '__WLEX_1' 24572 getattribute $P1, __ARG_2, 'name' 24573 find_lex $S2, '__WLEX_1' 24574 set $S3, $P1 24575 iseq $I1, $S3, $S2 24576 .return($I1) 24577 24578.end # WSubId_22 24579 24580 24581.sub 'getlocalns' :subid('WSubId_23') :method 24582 .param string __ARG_1 24583.const 'Sub' WSubId_24 = "WSubId_24" 24584.lex '__WLEX_1', __ARG_1 24585 getattribute $P2, self, 'namespaces' 24586 newclosure $P3, WSubId_24 24587 if_null $P2, __label_2 24588 iter $P5, $P2 24589 set $P5, 0 24590 __label_1: # for iteration 24591 unless $P5 goto __label_2 24592 shift $P4, $P5 24593 $P6 = $P3($P4) 24594 if_null $P6, __label_3 24595 unless $P6 goto __label_3 24596 set $P1, $P4 24597 goto __label_4 24598 __label_3: # endif 24599 goto __label_1 24600 __label_2: # endfor 24601 null $P1 24602 __label_4: 24603 if_null $P1, __label_5 24604 .return($P1) 24605 __label_5: # endif 24606 .tailcall self.'getusedns'(__ARG_1) 24607 24608.end # getlocalns 24609 24610 24611.sub '' :anon :subid('WSubId_24') :outer('WSubId_23') 24612 .param pmc __ARG_2 24613 find_lex $S1, '__WLEX_1' 24614 getattribute $P1, __ARG_2, 'name' 24615 find_lex $S2, '__WLEX_1' 24616 set $S3, $P1 24617 iseq $I1, $S3, $S2 24618 .return($I1) 24619 24620.end # WSubId_24 24621 24622 24623.sub 'addextern' :method 24624 .param pmc __ARG_1 24625 .param pmc __ARG_2 24626 new $P3, [ 'Winxed'; 'Compiler'; 'External' ] 24627 $P3.'External'(__ARG_1, __ARG_2) 24628 set $P1, $P3 24629 getattribute $P2, self, 'externals' 24630 unless_null $P2, __label_1 24631 root_new $P4, ['parrot';'ResizablePMCArray'] 24632 assign $P4, 1 24633 $P4[0] = $P1 24634 set $P2, $P4 24635 setattribute self, 'externals', $P2 24636 goto __label_2 24637 __label_1: # else 24638 push $P2, $P1 24639 __label_2: # endif 24640 24641.end # addextern 24642 24643 24644.sub 'checkclass_base' :subid('WSubId_25') :method 24645 .param string __ARG_1 24646.const 'Sub' WSubId_26 = "WSubId_26" 24647.lex '__WLEX_1', __ARG_1 24648 getattribute $P2, self, 'classes' 24649 newclosure $P3, WSubId_26 24650 if_null $P2, __label_2 24651 iter $P6, $P2 24652 set $P6, 0 24653 __label_1: # for iteration 24654 unless $P6 goto __label_2 24655 shift $P4, $P6 24656 $P7 = $P3($P4) 24657 if_null $P7, __label_3 24658 unless $P7 goto __label_3 24659 set $P1, $P4 24660 goto __label_4 24661 __label_3: # endif 24662 goto __label_1 24663 __label_2: # endfor 24664 null $P1 24665 __label_4: 24666 if_null $P1, __label_5 24667 .return($P1) 24668 __label_5: # endif 24669 getattribute $P7, self, 'usednamespaces' 24670 if_null $P7, __label_7 24671 iter $P8, $P7 24672 set $P8, 0 24673 __label_6: # for iteration 24674 unless $P8 goto __label_7 24675 shift $P5, $P8 24676 $P1 = $P5.'checkclass_base'(__ARG_1) 24677 if_null $P1, __label_8 24678 .return($P1) 24679 __label_8: # endif 24680 goto __label_6 24681 __label_7: # endfor 24682 null $P7 24683 .return($P7) 24684 24685.end # checkclass_base 24686 24687 24688.sub '' :anon :subid('WSubId_26') :outer('WSubId_25') 24689 .param pmc __ARG_2 24690 find_lex $S1, '__WLEX_1' 24691 getattribute $P1, __ARG_2, 'name' 24692 find_lex $S2, '__WLEX_1' 24693 set $S3, $P1 24694 iseq $I1, $S3, $S2 24695 .return($I1) 24696 24697.end # WSubId_26 24698 24699 24700.sub 'findsymbolbyname' :method 24701 .param string __ARG_1 24702 $P1 = self.'checkclass_base'(__ARG_1) 24703 if_null $P1, __label_1 24704 .return($P1) 24705 __label_1: # endif 24706 getattribute $P2, self, 'funcont' 24707 $P1 = $P2.'find'(__ARG_1) 24708 if_null $P1, __label_2 24709 .return($P1) 24710 __label_2: # endif 24711 $P1 = self.'getlocalvar'(__ARG_1) 24712 if_null $P1, __label_3 24713 .return($P1) 24714 __label_3: # endif 24715 null $P3 24716 .return($P3) 24717 24718.end # findsymbolbyname 24719 24720 24721.sub 'scopesearchlocal' :method 24722 .param pmc __ARG_1 24723 .param int __ARG_2 24724 .param int __ARG_3 24725 elements $I1, __ARG_1 24726 null $S1 24727 null $P1 24728 null $P2 24729 sub $I2, $I1, __ARG_3 24730 if $I2 == 0 goto __label_3 24731 if $I2 == 1 goto __label_4 24732 goto __label_1 24733 __label_3: # case 24734 goto __label_2 # break 24735 __label_4: # case 24736 sub $I4, $I1, 1 24737 $S1 = __ARG_1[$I4] 24738 if __ARG_2 == 1 goto __label_7 24739 if __ARG_2 == 2 goto __label_8 24740 goto __label_5 24741 __label_7: # case 24742 .tailcall self.'getlocalns'($S1) 24743 __label_8: # case 24744 .tailcall self.'checkclass_base'($S1) 24745 __label_5: # default 24746 $P1 = self.'findsymbolbyname'($S1) 24747 if_null $P1, __label_9 24748 .return($P1) 24749 __label_9: # endif 24750 getattribute $P3, self, 'usednamespaces' 24751 if_null $P3, __label_11 24752 iter $P4, $P3 24753 set $P4, 0 24754 __label_10: # for iteration 24755 unless $P4 goto __label_11 24756 shift $P2, $P4 24757 $P1 = $P2.'findsymbolbyname'($S1) 24758 if_null $P1, __label_12 24759 .return($P1) 24760 __label_12: # endif 24761 goto __label_10 24762 __label_11: # endfor 24763 __label_6: # switch end 24764 goto __label_2 # break 24765 __label_1: # default 24766 $S1 = __ARG_1[__ARG_3] 24767 $P2 = self.'getlocalns'($S1) 24768 if_null $P2, __label_13 24769 add $I6, __ARG_3, 1 24770 $P1 = $P2.'scopesearchlocal'(__ARG_1, __ARG_2, $I6) 24771 if_null $P1, __label_13 24772 .return($P1) 24773 __label_13: # endif 24774 $P2 = self.'getusedns'($S1) 24775 if_null $P2, __label_14 24776 add $I7, __ARG_3, 1 24777 $P1 = $P2.'scopesearchlocal'(__ARG_1, __ARG_2, $I7) 24778 if_null $P1, __label_14 24779 .return($P1) 24780 __label_14: # endif 24781 __label_2: # switch end 24782 null $P3 24783 .return($P3) 24784 24785.end # scopesearchlocal 24786 24787 24788.sub 'declarenamespace' :method 24789 .param pmc __ARG_1 24790 .param string __ARG_2 24791 .param pmc __ARG_3 :optional 24792 $P1 = self.'getlocalns'(__ARG_2) 24793 new $P3, [ 'Winxed'; 'Compiler'; 'NamespaceStatement' ] 24794 $P3.'NamespaceStatement'(self, __ARG_1, $P1, __ARG_2, __ARG_3) 24795 set $P2, $P3 24796 getattribute $P3, self, 'namespaces' 24797 push $P3, $P2 24798 .return($P2) 24799 24800.end # declarenamespace 24801 24802 24803.sub 'childnamespace' :method 24804 .param pmc __ARG_1 24805 .param string __ARG_2 24806 .param pmc __ARG_3 24807 $P1 = self.'declarenamespace'(__ARG_1, __ARG_2, __ARG_3) 24808 getattribute $P2, self, 'items' 24809 push $P2, $P1 24810 .return($P1) 24811 24812.end # childnamespace 24813 24814 24815.sub 'declareclass' :method 24816 .param pmc __ARG_1 24817 getattribute $P1, self, 'classes' 24818 push $P1, __ARG_1 24819 24820.end # declareclass 24821 24822 24823.sub 'addclass' :method 24824 .param pmc __ARG_1 24825 getattribute $P1, self, 'classes' 24826 push $P1, __ARG_1 24827 getattribute $P1, self, 'items' 24828 push $P1, __ARG_1 24829 24830.end # addclass 24831 24832 24833.sub 'parsenamespace' :method 24834 .param pmc __ARG_1 24835 .param pmc __ARG_2 24836.const 'Sub' bindlast1 = "bindlast1" 24837 $P1 = __ARG_2.'get'() 24838 null $S1 24839 if_null $P1, __label_1 24840 set $S1, $P1 24841 __label_1: 24842 $P1 = __ARG_2.'get'() 24843 set $P2, self 24844 __label_4: # for condition 24845 $P5 = $P1.'isop'(".") 24846 if_null $P5, __label_3 24847 unless $P5 goto __label_3 24848 null $P6 24849 $P2 = $P2.'childnamespace'(__ARG_1, $S1, $P6) 24850 $P5 = __ARG_2.'get'() 24851 set $S1, $P5 24852 __label_2: # for iteration 24853 $P1 = __ARG_2.'get'() 24854 goto __label_4 24855 __label_3: # for end 24856 null $P3 24857 $P5 = $P1.'isop'("[") 24858 if_null $P5, __label_5 24859 unless $P5 goto __label_5 24860 new $P6, [ 'Winxed'; 'Compiler'; 'ModifierList' ] 24861 $P6.'ModifierList'(__ARG_2, self) 24862 set $P3, $P6 24863 $P1 = __ARG_2.'get'() 24864 __label_5: # endif 24865 bindlast1("{", $P1) 24866 $P4 = $P2.'childnamespace'(__ARG_1, $S1, $P3) 24867 $P4.'parse'(__ARG_2) 24868 24869.end # parsenamespace 24870 24871 24872.sub 'parseextern' :method 24873 .param pmc __ARG_1 24874.const 'Sub' SyntaxError = "SyntaxError" 24875.const 'Sub' RequireIdentifier = "RequireIdentifier" 24876.const 'Sub' ExpectOp = "ExpectOp" 24877 $P1 = __ARG_1.'get'() 24878 $P3 = $P1.'iskeyword'("function") 24879 if $P3 goto __label_1 24880 SyntaxError("Unsupported extern", $P1) 24881 __label_1: # endif 24882 $P1 = __ARG_1.'get'() 24883 RequireIdentifier($P1) 24884 ExpectOp(";", __ARG_1) 24885 new $P3, [ 'Winxed'; 'Compiler'; 'FunctionExtern' ] 24886 $P3.'FunctionExtern'($P1, self) 24887 set $P2, $P3 24888 self.'addfunction'($P2) 24889 24890.end # parseextern 24891 24892 24893.sub 'parse' :method 24894 .param pmc __ARG_1 24895.const 'Sub' WSubId_82 = "WSubId_82" 24896.const 'Sub' WSubId_152 = "WSubId_152" 24897.const 'Sub' WSubId_153 = "WSubId_153" 24898.const 'Sub' WSubId_154 = "WSubId_154" 24899.const 'Sub' WSubId_155 = "WSubId_155" 24900.const 'Sub' Expected = "Expected" 24901.const 'Sub' ExpectOp = "ExpectOp" 24902.const 'Sub' WSubId_80 = "WSubId_80" 24903 getattribute $P1, self, 'items' 24904 null $P2 24905 $P2 = __ARG_1.'get'() 24906 __label_3: # for condition 24907 $P6 = $P2.'iseof'() 24908 if $P6 goto __label_4 24909 $P6 = $P2.'isop'("}") 24910 __label_4: 24911 if $P6 goto __label_2 24912 $P7 = $P2.'checkkeyword'() 24913 set $S1, $P7 24914 if $S1 == "namespace" goto __label_7 24915 if $S1 == "const" goto __label_8 24916 if $S1 == "function" goto __label_9 24917 if $S1 == "inline" goto __label_10 24918 if $S1 == "class" goto __label_11 24919 if $S1 == "extern" goto __label_12 24920 if $S1 == "using" goto __label_13 24921 if $S1 == "$include_const" goto __label_14 24922 if $S1 == "$include" goto __label_15 24923 if $S1 == "$load" goto __label_16 24924 if $S1 == "$loadlib" goto __label_17 24925 goto __label_5 24926 __label_7: # case 24927 self.'parsenamespace'($P2, __ARG_1) 24928 goto __label_6 # break 24929 __label_8: # case 24930 $P3 = WSubId_82($P2, __ARG_1, self) 24931 push $P1, $P3 24932 goto __label_6 # break 24933 __label_9: # case 24934 new $P8, [ 'Winxed'; 'Compiler'; 'FunctionStatement' ] 24935 $P8.'FunctionStatement'($P2, __ARG_1, self) 24936 set $P4, $P8 24937 self.'addfunction'($P4) 24938 push $P1, $P4 24939 goto __label_6 # break 24940 __label_10: # case 24941 new $P9, [ 'Winxed'; 'Compiler'; 'InlineStatement' ] 24942 $P9.'InlineStatement'($P2, __ARG_1, self) 24943 set $P5, $P9 24944 self.'addfunction'($P5) 24945 goto __label_6 # break 24946 __label_11: # case 24947 WSubId_152($P2, __ARG_1, self) 24948 goto __label_6 # break 24949 __label_12: # case 24950 self.'parseextern'(__ARG_1) 24951 goto __label_6 # break 24952 __label_13: # case 24953 WSubId_153($P2, __ARG_1, self) 24954 goto __label_6 # break 24955 __label_14: # case 24956 WSubId_154($P2, __ARG_1, self) 24957 goto __label_6 # break 24958 __label_15: # case 24959 WSubId_155($P2, __ARG_1, self) 24960 goto __label_6 # break 24961 __label_16: # case 24962 $P2 = __ARG_1.'get'() 24963 $P10 = $P2.'isstring'() 24964 if $P10 goto __label_18 24965 Expected("string literal", $P2) 24966 __label_18: # endif 24967 ExpectOp(";", __ARG_1) 24968 new $P13, [ 'Winxed'; 'Compiler'; 'StringLiteral' ] 24969 $P13.'StringLiteral'(self, $P2) 24970 set $P12, $P13 24971 $P11 = $P12.'getPirString'() 24972 self.'addload'($P11) 24973 goto __label_6 # break 24974 __label_17: # case 24975 $P2 = __ARG_1.'get'() 24976 $P14 = $P2.'isstring'() 24977 if $P14 goto __label_19 24978 Expected("string literal", $P2) 24979 __label_19: # endif 24980 ExpectOp(";", __ARG_1) 24981 new $P17, [ 'Winxed'; 'Compiler'; 'StringLiteral' ] 24982 $P17.'StringLiteral'(self, $P2) 24983 set $P16, $P17 24984 $P15 = $P16.'getPirString'() 24985 self.'addlib'($P15) 24986 goto __label_6 # break 24987 __label_5: # default 24988 WSubId_80("token", $P2) 24989 __label_6: # switch end 24990 __label_1: # for iteration 24991 $P2 = __ARG_1.'get'() 24992 goto __label_3 24993 __label_2: # for end 24994 $P6 = $P2.'iseof'() 24995 if_null $P6, __label_20 24996 unless $P6 goto __label_20 24997 self.'unclosed_ns'() 24998 goto __label_21 24999 __label_20: # else 25000 self.'close_ns'($P2) 25001 __label_21: # endif 25002 25003.end # parse 25004 25005 25006.sub 'optimize_base' :method 25007 getattribute $P1, self, 'items' 25008 if_null $P1, __label_2 25009 elements $I1, $P1 25010 goto __label_1 25011 __label_2: 25012 null $I1 25013 __label_1: 25014 null $I2 25015 __label_5: # for condition 25016 ge $I2, $I1, __label_4 25017 $P3 = $P1[$I2] 25018 $P2 = $P3.'optimize'() 25019 $P1[$I2] = $P2 25020 __label_3: # for iteration 25021 inc $I2 25022 goto __label_5 25023 __label_4: # for end 25024 25025.end # optimize_base 25026 25027 25028.sub 'emit_base' :method 25029 .param pmc __ARG_1 25030 $P1 = self.'getpath'() 25031 set $I1, 1 25032 getattribute $P2, self, 'externals' 25033 if_null $P2, __label_1 25034 $P1.'emitnamespace'(__ARG_1) 25035 null $I1 25036 set $P3, __ARG_1 25037 set $P4, $P2 25038.const 'Sub' bindlast = "bindlast" 25039.const 'Sub' bindmethod = "bindmethod" 25040 set $P5, $P4 25041 $P9 = bindmethod("emit") 25042 $P6 = bindlast($P9, $P3) 25043 if_null $P5, __label_3 25044 iter $P10, $P5 25045 set $P10, 0 25046 __label_2: # for iteration 25047 unless $P10 goto __label_3 25048 shift $P7, $P10 25049 $P6($P7) 25050 goto __label_2 25051 __label_3: # endfor 25052 __label_1: # endif 25053 getattribute $P9, self, 'items' 25054 if_null $P9, __label_5 25055 iter $P11, $P9 25056 set $P11, 0 25057 __label_4: # for iteration 25058 unless $P11 goto __label_5 25059 shift $P8, $P11 25060 isa $I2, $P8, [ 'Winxed'; 'Compiler'; 'NamespaceStatement' ] 25061 if $I2 goto __label_8 25062 isa $I2, $P8, [ 'Winxed'; 'Compiler'; 'ClassStatement' ] 25063 __label_8: 25064 unless $I2 goto __label_6 25065 set $I1, 1 25066 goto __label_7 25067 __label_6: # else 25068 unless $I1 goto __label_9 25069 $P1.'emitnamespace'(__ARG_1) 25070 null $I1 25071 __label_9: # endif 25072 __label_7: # endif 25073 $P8.'emit'(__ARG_1) 25074 goto __label_4 25075 __label_5: # endfor 25076 25077.end # emit_base 25078 25079.sub Winxed_class_init :anon :load :init 25080 newclass $P0, [ 'Winxed'; 'Compiler'; 'NamespaceBase' ] 25081 get_class $P1, [ 'Winxed'; 'Compiler'; 'VarContainer' ] 25082 addparent $P0, $P1 25083 addattribute $P0, 'nspath' 25084 addattribute $P0, 'externals' 25085 addattribute $P0, 'namespaces' 25086 addattribute $P0, 'classes' 25087 addattribute $P0, 'funcont' 25088 addattribute $P0, 'items' 25089 addattribute $P0, 'owner' 25090.end 25091.namespace [ 'Winxed'; 'Compiler'; 'NamespaceStatement' ] 25092 25093.sub 'NamespaceStatement' :method 25094 .param pmc __ARG_1 25095 .param pmc __ARG_2 25096 .param pmc __ARG_3 25097 .param string __ARG_4 25098 .param pmc __ARG_5 25099 setattribute self, 'modifier', __ARG_5 25100 null $I1 25101 if_null __ARG_5, __label_1 25102 $P2 = __ARG_5.'pick'("HLL") 25103 if_null $P2, __label_2 25104 box $P3, __ARG_4 25105 setattribute self, 'hll', $P3 25106 set $I1, 1 25107 __label_2: # endif 25108 __label_1: # endif 25109 unless $I1 goto __label_4 25110 new $P2, [ 'Winxed'; 'Compiler'; 'NamespacePath' ] 25111 $P2.'NamespacePath'(__ARG_4, 1) 25112 set $P1, $P2 25113 goto __label_3 25114 __label_4: 25115 $P4 = __ARG_1.'getpath'() 25116 $P3 = $P4.'createchild'(__ARG_4) 25117 set $P1, $P3 25118 __label_3: 25119 self.'NamespaceBase'($P1, __ARG_3) 25120 setattribute self, 'parent', __ARG_1 25121 setattribute self, 'start', __ARG_2 25122 setattribute self, 'owner', __ARG_1 25123 box $P2, __ARG_4 25124 setattribute self, 'name', $P2 25125 25126.end # NamespaceStatement 25127 25128 25129.sub 'dowarnings' :method 25130 getattribute $P1, self, 'parent' 25131 .tailcall $P1.'dowarnings'() 25132 25133.end # dowarnings 25134 25135 25136.sub 'generatesubid' :method 25137 getattribute $P1, self, 'owner' 25138 .tailcall $P1.'generatesubid'() 25139 25140.end # generatesubid 25141 25142 25143.sub 'use_builtin' :method 25144 .param string __ARG_1 25145 getattribute $P1, self, 'owner' 25146 $P1.'use_builtin'(__ARG_1) 25147 25148.end # use_builtin 25149 25150 25151.sub 'addlib' :method 25152 .param string __ARG_1 25153 getattribute $P1, self, 'parent' 25154 $P1.'addlib'(__ARG_1) 25155 25156.end # addlib 25157 25158 25159.sub 'addload' :method 25160 .param string __ARG_1 25161 getattribute $P1, self, 'parent' 25162 $P1.'addload'(__ARG_1) 25163 25164.end # addload 25165 25166 25167.sub 'checkclass' :method 25168 .param string __ARG_1 25169 $P1 = self.'checkclass_base'(__ARG_1) 25170 unless_null $P1, __label_1 25171 getattribute $P2, self, 'parent' 25172 .tailcall $P2.'checkclass'(__ARG_1) 25173 __label_1: # endif 25174 .return($P1) 25175 25176.end # checkclass 25177 25178 25179.sub 'scopesearch' :method 25180 .param pmc __ARG_1 25181 .param int __ARG_2 25182 .param int __ARG_3 :optional 25183 $P1 = self.'scopesearchlocal'(__ARG_1, __ARG_2, __ARG_3) 25184 unless_null $P1, __label_1 25185 gt __ARG_3, 0, __label_1 25186 getattribute $P2, self, 'parent' 25187 .tailcall $P2.'scopesearch'(__ARG_1, __ARG_2, __ARG_3) 25188 __label_1: # endif 25189 .return($P1) 25190 25191.end # scopesearch 25192 25193 25194.sub 'unclosed_ns' :method 25195.const 'Sub' SyntaxError = "SyntaxError" 25196 getattribute $P1, self, 'start' 25197 SyntaxError("unclosed namespace", $P1) 25198 25199.end # unclosed_ns 25200 25201 25202.sub 'close_ns' :method 25203 .param pmc __ARG_1 25204 25205.end # close_ns 25206 25207 25208.sub 'optimize' :method 25209 getattribute $P1, self, 'modifier' 25210 if_null $P1, __label_1 25211 $P3 = $P1.'optimize'() 25212 setattribute self, 'modifier', $P3 25213 __label_1: # endif 25214 self.'optimize_base'() 25215 .return(self) 25216 25217.end # optimize 25218 25219 25220.sub 'emit' :method 25221 .param pmc __ARG_1 25222.const 'Sub' sformat = "sformat" 25223 getattribute $P1, self, 'hll' 25224 if_null $P1, __label_1 25225 $P2 = sformat(".HLL '%0'", $P1) 25226 __ARG_1.'say'($P2) 25227 __label_1: # endif 25228 self.'emit_base'(__ARG_1) 25229 if_null $P1, __label_2 25230 __ARG_1.'say'(".HLL 'parrot'") 25231 __label_2: # endif 25232 25233.end # emit 25234 25235.sub Winxed_class_init :anon :load :init 25236 newclass $P0, [ 'Winxed'; 'Compiler'; 'NamespaceStatement' ] 25237 get_class $P1, [ 'Winxed'; 'Compiler'; 'NamespaceBase' ] 25238 addparent $P0, $P1 25239 addattribute $P0, 'parent' 25240 addattribute $P0, 'start' 25241 addattribute $P0, 'name' 25242 addattribute $P0, 'modifier' 25243 addattribute $P0, 'hll' 25244.end 25245.namespace [ 'Winxed'; 'Compiler'; 'RootNamespace' ] 25246 25247.sub 'RootNamespace' :method 25248 .param pmc __ARG_1 25249 new $P1, [ 'Winxed'; 'Compiler'; 'NamespacePath' ] 25250 $P1.'NamespacePath'() 25251 set $P1, $P1 25252 null $P2 25253 self.'NamespaceBase'($P1, $P2) 25254 setattribute self, 'unit', __ARG_1 25255 root_new $P2, ['parrot';'Hash'] 25256 setattribute self, 'bultins_used', $P2 25257 box $P1, 0 25258 setattribute self, 'subidgen', $P1 25259 25260.end # RootNamespace 25261 25262 25263.sub 'use_builtin' :method 25264 .param string __ARG_1 25265 getattribute $P1, self, 'bultins_used' 25266 $P1[__ARG_1] = 1 25267 25268.end # use_builtin 25269 25270 25271.sub 'generatesubid' :method 25272 getattribute $P1, self, 'subidgen' 25273 inc $P1 25274 set $I1, $P1 25275 set $S1, $I1 25276 concat $S2, "WSubId_", $S1 25277 .return($S2) 25278 25279.end # generatesubid 25280 25281 25282.sub 'addlib' :method 25283 .param string __ARG_1 25284 getattribute $P1, self, 'libs' 25285 unless_null $P1, __label_1 25286 root_new $P1, ['parrot';'Hash'] 25287 setattribute self, 'libs', $P1 25288 __label_1: # endif 25289 $P1[__ARG_1] = 1 25290 25291.end # addlib 25292 25293 25294.sub 'addload' :method 25295 .param string __ARG_1 25296 getattribute $P1, self, 'loads' 25297 unless_null $P1, __label_1 25298 root_new $P1, ['parrot';'Hash'] 25299 setattribute self, 'loads', $P1 25300 __label_1: # endif 25301 $P1[__ARG_1] = 1 25302 25303.end # addload 25304 25305 25306.sub 'checkclass' :method 25307 .param string __ARG_1 25308 .tailcall self.'checkclass_base'(__ARG_1) 25309 25310.end # checkclass 25311 25312 25313.sub 'scopesearch' :method 25314 .param pmc __ARG_1 25315 .param int __ARG_2 25316 .param int __ARG_3 :optional 25317 .tailcall self.'scopesearchlocal'(__ARG_1, __ARG_2, __ARG_3) 25318 25319.end # scopesearch 25320 25321 25322.sub 'unclosed_ns' :method 25323 25324.end # unclosed_ns 25325 25326 25327.sub 'close_ns' :method 25328 .param pmc __ARG_1 25329.const 'Sub' SyntaxError = "SyntaxError" 25330 SyntaxError("Cannot close root namespace", __ARG_1) 25331 25332.end # close_ns 25333 25334 25335.sub 'dowarnings' :method 25336 getattribute $P1, self, 'unit' 25337 .tailcall $P1.'dowarnings'() 25338 25339.end # dowarnings 25340 25341 25342.sub 'optimize' :method 25343 self.'optimize_base'() 25344 .return(self) 25345 25346.end # optimize 25347 25348 25349.sub 'emit' :method 25350 .param pmc __ARG_1 25351.const 'Sub' WSubId_9 = "WSubId_9" 25352.const 'Sub' sformat = "sformat" 25353 getattribute $P1, self, 'bultins_used' 25354 $P12 = $P1["chomp"] 25355 if_null $P12, __label_1 25356 self.'addload'("\"String/Utils.pbc\"") 25357 __label_1: # endif 25358 split $P12, " ", "acos asin atan cos exp ln sin tan pow sinh cosh tanh" 25359 if_null $P12, __label_3 25360 iter $P13, $P12 25361 set $P13, 0 25362 __label_2: # for iteration 25363 unless $P13 goto __label_3 25364 shift $S1, $P13 25365 $P14 = $P1[$S1] 25366 if_null $P14, __label_4 25367 self.'addlib'("'trans_ops'") 25368 goto __label_3 # break 25369 __label_4: # endif 25370 goto __label_2 25371 __label_3: # endfor 25372 getattribute $P2, self, 'libs' 25373 if_null $P2, __label_5 25374 set $P3, $P2 25375 root_new $P4, ['parrot';'ResizablePMCArray'] 25376 $P5 = WSubId_9(".loadlib ") 25377 if_null $P3, __label_7 25378 iter $P16, $P3 25379 set $P16, 0 25380 __label_6: # for iteration 25381 unless $P16 goto __label_7 25382 shift $P6, $P16 25383 $P12 = $P5($P6) 25384 push $P4, $P12 25385 goto __label_6 25386 __label_7: # endfor 25387 set $P15, $P4 25388 set $P12, $P15 25389 join $S2, "\n", $P12 25390 __ARG_1.'say'($S2) 25391 __label_5: # endif 25392 getattribute $P7, self, 'loads' 25393 if_null $P7, __label_8 25394 set $P8, $P7 25395 root_new $P9, ['parrot';'ResizablePMCArray'] 25396 $P10 = WSubId_9(" load_bytecode ") 25397 if_null $P8, __label_10 25398 iter $P18, $P8 25399 set $P18, 0 25400 __label_9: # for iteration 25401 unless $P18 goto __label_10 25402 shift $P11, $P18 25403 $P14 = $P10($P11) 25404 push $P9, $P14 25405 goto __label_9 25406 __label_10: # endfor 25407 set $P17, $P9 25408 set $P12, $P17 25409 join $S2, "\n", $P12 25410 $P12 = sformat(".sub initial_load_bytecode :anon :load :init\n%0\n.end\n", $S2) 25411 __ARG_1.'say'($P12) 25412 __label_8: # endif 25413 isnull $I1, $P2 25414 not $I1 25415 if $I1 goto __label_12 25416 isnull $I1, $P7 25417 not $I1 25418 __label_12: 25419 unless $I1 goto __label_11 25420 __ARG_1.'comment'("end libs") 25421 __label_11: # endif 25422 self.'emit_base'(__ARG_1) 25423 25424.end # emit 25425 25426 25427.sub 'emitinclude' :method 25428 .param pmc __ARG_1 25429 getattribute $P1, self, 'locals' 25430 if_null $P1, __label_2 25431 iter $P4, $P1 25432 set $P4, 0 25433 __label_1: # for iteration 25434 unless $P4 goto __label_2 25435 shift $S1, $P4 25436 $P2 = $P1[$S1] 25437 isa $I2, $P2, [ 'Winxed'; 'Compiler'; 'VarData' ] 25438 not $I1, $I2 25439 if $I1 goto __label_5 25440 $P5 = $P2.'gettype'() 25441 set $S2, $P5 25442 isne $I1, $S2, "I" 25443 __label_5: 25444 if $I1 goto __label_4 25445 $P6 = $P2.'getflags'() 25446 set $I3, $P6 25447 band $I1, $I3, 4 25448 __label_4: 25449 unless $I1 goto __label_3 25450 goto __label_1 # continue 25451 __label_3: # endif 25452 $P3 = $P2.'getvalue'() 25453 $P5 = $P3.'getIntegerValue'() 25454 __ARG_1.'say'(".macro_const ", $S1, " ", $P5) 25455 goto __label_1 25456 __label_2: # endfor 25457 25458.end # emitinclude 25459 25460.sub Winxed_class_init :anon :load :init 25461 newclass $P0, [ 'Winxed'; 'Compiler'; 'RootNamespace' ] 25462 get_class $P1, [ 'Winxed'; 'Compiler'; 'NamespaceBase' ] 25463 addparent $P0, $P1 25464 addattribute $P0, 'unit' 25465 addattribute $P0, 'bultins_used' 25466 addattribute $P0, 'libs' 25467 addattribute $P0, 'loads' 25468 addattribute $P0, 'subidgen' 25469.end 25470.namespace [ 'Winxed'; 'Compiler'; 'Builtin' ] 25471 25472.sub 'Builtin' :method 25473 .param string __ARG_1 25474 .param pmc __ARG_2 25475 new $P3, [ 'Winxed'; 'Compiler'; 'TokenIdentifier' ] 25476 $P3.'TokenIdentifier'("__builtins__", 0, __ARG_1) 25477 set $P2, $P3 25478 setattribute self, 'name', $P2 25479 root_new $P2, ['parrot';'ResizablePMCArray'] 25480 assign $P2, 1 25481 $P2[0] = __ARG_2 25482 setattribute self, 'variants', $P2 25483 25484.end # Builtin 25485 25486 25487.sub 'getname' :method 25488 getattribute $P1, self, 'name' 25489 .return($P1) 25490 25491.end # getname 25492 25493 25494.sub 'addvariant' :method 25495 .param pmc __ARG_1 25496 getattribute $P1, self, 'variants' 25497 push $P1, __ARG_1 25498 25499.end # addvariant 25500 25501.sub Winxed_class_init :anon :load :init 25502 newclass $P0, [ 'Winxed'; 'Compiler'; 'Builtin' ] 25503 addattribute $P0, 'name' 25504 addattribute $P0, 'variants' 25505.end 25506.namespace [ 'Winxed'; 'Compiler' ] 25507.namespace [ 'Winxed'; 'Compiler'; 'BuiltinBuilder' ] 25508 25509.sub 'BuiltinBuilder' :method 25510 root_new $P2, ['parrot';'Hash'] 25511 setattribute self, 'entries', $P2 25512 25513.end # BuiltinBuilder 25514 25515 25516.sub 'add' :method 25517 .param pmc __ARG_1 25518 getattribute $P1, self, 'entries' 25519 getattribute $P2, __ARG_1, 'name' 25520 null $S1 25521 if_null $P2, __label_1 25522 set $S1, $P2 25523 __label_1: 25524 $P2 = $P1[$S1] 25525 if_null $P2, __label_2 25526 $P3 = $P1[$S1] 25527 $P3.'addvariant'(__ARG_1) 25528 goto __label_3 25529 __label_2: # else 25530 new $P5, [ 'Winxed'; 'Compiler'; 'Builtin' ] 25531 $P5.'Builtin'($S1, __ARG_1) 25532 set $P4, $P5 25533 $P1[$S1] = $P4 25534 __label_3: # endif 25535 25536.end # add 25537 25538 25539.sub 'put' :method 25540 .param pmc __ARG_1 25541 getattribute $P1, self, 'entries' 25542 if_null $P1, __label_2 25543 iter $P2, $P1 25544 set $P2, 0 25545 __label_1: # for iteration 25546 unless $P2 goto __label_2 25547 shift $S1, $P2 25548 $P3 = $P1[$S1] 25549 __ARG_1.'addfunction'($P3) 25550 goto __label_1 25551 __label_2: # endfor 25552 25553.end # put 25554 25555.sub Winxed_class_init :anon :load :init 25556 newclass $P0, [ 'Winxed'; 'Compiler'; 'BuiltinBuilder' ] 25557 addattribute $P0, 'entries' 25558.end 25559.namespace [ 'Winxed'; 'Compiler'; 'WinxedCompileUnit' ] 25560 25561.sub 'WinxedCompileUnit' :method 25562 .param string __ARG_1 25563 .param int __ARG_2 25564 .param int __ARG_3 25565.const 'Sub' WSubId_156 = "WSubId_156" 25566.const 'Sub' WSubId_148 = "WSubId_148" 25567.const 'Sub' WSubId_157 = "WSubId_157" 25568 box $P4, __ARG_1 25569 setattribute self, 'sourcefile', $P4 25570 not $I1, __ARG_2 25571 box $P4, $I1 25572 setattribute self, 'warnings', $P4 25573 new $P4, [ 'Winxed'; 'Compiler'; 'RootNamespace' ] 25574 $P4.'RootNamespace'(self) 25575 set $P1, $P4 25576 WSubId_156($P1, "false", 0) 25577 WSubId_156($P1, "true", 1) 25578 WSubId_148($P1, "__STAGE__", "4") 25579 WSubId_156($P1, "__DEBUG__", __ARG_3) 25580 WSubId_156($P1, "__WINXED_ERROR__", 567) 25581 new $P5, [ 'Winxed'; 'Compiler'; 'TokenEof' ] 25582 $P5.'TokenEof'("__builtins__") 25583 set $P4, $P5 25584 null $P6 25585 $P2 = $P1.'childnamespace'($P4, "Winxed_Builtins", $P6) 25586 new $P3, [ 'Winxed'; 'Compiler'; 'BuiltinBuilder' ] 25587 $P3.'BuiltinBuilder'() 25588 set $P3, $P3 25589 WSubId_157($P3) 25590 $P3.'put'($P2) 25591 $P1.'usenamespace'($P2) 25592 setattribute self, 'rootns', $P1 25593 25594.end # WinxedCompileUnit 25595 25596 25597.sub 'dowarnings' :method 25598 getattribute $P1, self, 'warnings' 25599 set $I1, $P1 25600 .return($I1) 25601 25602.end # dowarnings 25603 25604 25605.sub 'parse' :method 25606 .param pmc __ARG_1 25607 getattribute $P1, self, 'rootns' 25608 $P1.'parse'(__ARG_1) 25609 getattribute $P1, self, 'rootns' 25610 $P1.'fixnamespaces'() 25611 25612.end # parse 25613 25614 25615.sub 'optimize' :method 25616 getattribute $P3, self, 'rootns' 25617 $P2 = $P3.'optimize'() 25618 setattribute self, 'rootns', $P2 25619 25620.end # optimize 25621 25622 25623.sub 'emit' :method 25624 .param pmc __ARG_1 25625.const 'Sub' getVersionString = "getVersionString" 25626 __ARG_1.'comment'("THIS IS A GENERATED FILE! DO NOT EDIT!") 25627 $S2 = getVersionString() 25628 __ARG_1.'comment'("Compiled with ", $S2) 25629 getattribute $P1, self, 'sourcefile' 25630 null $S1 25631 if_null $P1, __label_1 25632 set $S1, $P1 25633 __label_1: 25634 if_null $S1, __label_2 25635 eq $S1, "", __label_2 25636 __ARG_1.'comment'("Source file: ", $S1) 25637 __label_2: # endif 25638 __ARG_1.'comment'("Begin generated code") 25639 __ARG_1.'say'("") 25640 getattribute $P1, self, 'rootns' 25641 $P1.'emit'(__ARG_1) 25642 __ARG_1.'comment'("End generated code") 25643 25644.end # emit 25645 25646 25647.sub 'emitinclude' :method 25648 .param pmc __ARG_1 25649 __ARG_1.'comment'("DO NOT EDIT THIS FILE") 25650 __ARG_1.'comment'("Generated automatically from Winxed sources") 25651 getattribute $P1, self, 'rootns' 25652 $P1.'emitinclude'(__ARG_1) 25653 __ARG_1.'comment'("End") 25654 25655.end # emitinclude 25656 25657.sub Winxed_class_init :anon :load :init 25658 newclass $P0, [ 'Winxed'; 'Compiler'; 'WinxedCompileUnit' ] 25659 addattribute $P0, 'rootns' 25660 addattribute $P0, 'warnings' 25661 addattribute $P0, 'sourcefile' 25662.end 25663.namespace [ 'Winxed'; 'Compiler'; 'WinxedHLL' ] 25664 25665.sub 'version' :method 25666.const 'Sub' getVersion = "getVersion" 25667 .tailcall getVersion() 25668 25669.end # version 25670 25671 25672.sub 'version_string' :method 25673.const 'Sub' getVersionString = "getVersionString" 25674 .tailcall getVersionString() 25675 25676.end # version_string 25677 25678 25679.sub '__private_compile_tail' :method 25680 .param pmc __ARG_1 25681 .param pmc __ARG_2 25682 .param pmc __ARG_3 25683 .param string __ARG_4 25684 .param int __ARG_5 25685 .param int __ARG_6 25686 .param int __ARG_7 25687 set $S2, __ARG_2 25688 ne $S2, "parse", __label_1 25689 .return(__ARG_1) 25690 __label_1: # endif 25691 null $P1 25692 unless_null __ARG_3, __label_2 25693 new $P1, [ 'StringHandle' ] 25694 $P1.'open'("__eval__", "w") 25695 goto __label_3 25696 __label_2: # else 25697 set $P1, __ARG_3 25698 __label_3: # endif 25699 new $P5, [ 'Winxed'; 'Compiler'; 'Emit' ] 25700 $P5.'Emit'($P1, __ARG_7) 25701 set $P2, $P5 25702 unless __ARG_5 goto __label_4 25703 $P2.'setDebug'() 25704 __label_4: # endif 25705 unless __ARG_6 goto __label_5 25706 $P2.'disable_annotations'() 25707 __label_5: # endif 25708 __ARG_1.'emit'($P2) 25709 $P2.'close'() 25710 if_null __ARG_3, __label_6 25711 .return(__ARG_3) 25712 goto __label_7 25713 __label_6: # else 25714 $P1.'close'() 25715 $P5 = $P1.'readall'() 25716 null $S1 25717 if_null $P5, __label_8 25718 set $S1, $P5 25719 __label_8: 25720 null $P3 25721 set $S2, __ARG_2 25722 if $S2 == "pir" goto __label_11 25723 if $S2 == "pbc" goto __label_12 25724 if $S2 == "" goto __label_13 25725 goto __label_9 25726 __label_11: # case 25727 new $P3, [ 'String' ] 25728 assign $P3, $S1 25729 goto __label_10 # break 25730 __label_12: # case 25731 __label_13: # case 25732 compreg $P4, "PIR" 25733 $P3 = $P4.'compile'($S1) 25734 goto __label_10 # break 25735 __label_9: # default 25736 set $S4, __ARG_2 25737 concat $S5, "Invalid target: ", $S4 25738 die $S5 25739 __label_10: # switch end 25740 .return($P3) 25741 __label_7: # endif 25742 25743.end # __private_compile_tail 25744 25745 25746.sub '__private_geninclude' :method 25747 .param pmc __ARG_1 25748 .param pmc __ARG_2 25749 null $P1 25750 unless_null __ARG_2, __label_1 25751 new $P1, [ 'StringHandle' ] 25752 $P1.'open'("__eval__", "w") 25753 goto __label_2 25754 __label_1: # else 25755 set $P1, __ARG_2 25756 __label_2: # endif 25757 new $P3, [ 'Winxed'; 'Compiler'; 'Emit' ] 25758 $P3.'Emit'($P1, 1) 25759 set $P2, $P3 25760 __ARG_1.'emitinclude'($P2) 25761 $P2.'close'() 25762 if_null __ARG_2, __label_3 25763 .return(__ARG_2) 25764 goto __label_4 25765 __label_3: # else 25766 $P1.'close'() 25767 .tailcall $P1.'readall'() 25768 __label_4: # endif 25769 25770.end # __private_geninclude 25771 25772 25773.sub 'compile' :method 25774 .param string __ARG_1 25775 .param string __ARG_2 :optional :named('target') 25776 .param pmc __ARG_3 :optional :named('output') 25777 .param int __ARG_4 :optional :named('debug') 25778 .param int __ARG_5 :optional :named('noan') 25779 .param int __ARG_6 :optional :named('nowarn') 25780 unless_null __ARG_2, __label_1 25781 set __ARG_2, "" 25782 __label_1: # endif 25783 new $P1, [ 'StringHandle' ] 25784 $P1.'open'("__eval__", "w") 25785 $P1.'puts'(__ARG_1) 25786 $P1.'close'() 25787 $P1.'open'("__eval__", "r") 25788 new $P4, [ 'Winxed'; 'Compiler'; 'Tokenizer' ] 25789 $P4.'Tokenizer'($P1, "__eval__", __ARG_6) 25790 set $P2, $P4 25791 new $P4, [ 'Winxed'; 'Compiler'; 'WinxedCompileUnit' ] 25792 $P4.'WinxedCompileUnit'("", __ARG_6, __ARG_4) 25793 set $P3, $P4 25794 $P3.'parse'($P2) 25795 $P1.'close'() 25796 $P3.'optimize'() 25797 ne __ARG_2, "include", __label_2 25798 .tailcall self.'__private_geninclude'($P3, __ARG_3) 25799 goto __label_3 25800 __label_2: # else 25801 .tailcall self.'__private_compile_tail'($P3, __ARG_2, __ARG_3, "__eval__", __ARG_4, __ARG_5, __ARG_6) 25802 __label_3: # endif 25803 25804.end # compile 25805 25806 25807.sub 'compile_from_file' :method 25808 .param string __ARG_1 25809 .param string __ARG_2 :optional :named('target') 25810 .param pmc __ARG_3 :optional :named('output') 25811 .param int __ARG_4 :optional :named('debug') 25812 .param int __ARG_5 :optional :named('noan') 25813 .param int __ARG_6 :optional :named('nowarn') 25814 unless_null __ARG_2, __label_1 25815 set __ARG_2, "" 25816 __label_1: # endif 25817 root_new $P1, ["parrot";"FileHandle"] 25818 $P1."open"(__ARG_1,"r") 25819 $P1.'encoding'("utf8") 25820 new $P4, [ 'Winxed'; 'Compiler'; 'Tokenizer' ] 25821 $P4.'Tokenizer'($P1, __ARG_1, __ARG_6) 25822 set $P2, $P4 25823 new $P4, [ 'Winxed'; 'Compiler'; 'WinxedCompileUnit' ] 25824 $P4.'WinxedCompileUnit'(__ARG_1, __ARG_6, __ARG_4) 25825 set $P3, $P4 25826 $P3.'parse'($P2) 25827 $P1.'close'() 25828 $P3.'optimize'() 25829 ne __ARG_2, "include", __label_2 25830 .tailcall self.'__private_geninclude'($P3, __ARG_3) 25831 goto __label_3 25832 __label_2: # else 25833 .tailcall self.'__private_compile_tail'($P3, __ARG_2, __ARG_3, __ARG_1, __ARG_4, __ARG_5, __ARG_6) 25834 __label_3: # endif 25835 25836.end # compile_from_file 25837 25838.sub Winxed_class_init :anon :load :init 25839 newclass $P0, [ 'Winxed'; 'Compiler'; 'WinxedHLL' ] 25840.end 25841.namespace [ 'Winxed'; 'Compiler' ] 25842 25843.sub 'initializer' :init :load 25844 new $P1, [ 'Winxed'; 'Compiler'; 'WinxedHLL' ] 25845 compreg "winxed", $P1 25846 25847.end # initializer 25848 25849# End generated code 25850