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