File Coverage

blib/lib/Perlito6/Perl5/Emitter.pm
Criterion Covered Total %
statement 379 445 85.1
branch 120 202 59.4
condition 41 132 31.0
subroutine 67 76 88.1
pod n/a
total 607 855 70.9


line stmt bran cond sub pod time code
1             # Do not edit this file - Generated by Perlito6 9.0
2 31     31   289 use v5;
  31         67  
3 31     31   15650 use utf8;
  31         236  
  31         152  
4 31     31   699 use strict;
  31         34  
  31         432  
5 31     31   92 use warnings;
  31         29  
  31         765  
6 31     31   87 no warnings ('redefine', 'once', 'void', 'uninitialized', 'misc', 'recursion');
  31         29  
  31         1031  
7 31     31   10283 use Perlito6::Perl5::Runtime;
  31         54  
  31         1977  
8 31     31   10124 use Perlito6::Perl5::Prelude;
  31         39  
  31         1680  
9             our $MATCH = Perlito6::Match->new();
10             {
11             package GLOBAL;
12             sub new { shift; bless { @_ }, "GLOBAL" }
13              
14             # use v6
15             ;
16 31     31   9288 use Perlito6::AST;
  31         46  
  31         189775  
17             {
18             package Perl5;
19 0     0   0 sub new { shift; bless { @_ }, "Perl5" }
  0         0  
20             sub tab {
21 3493     3493   2350 my $level = $_[0];
22 3493         10197 ((' ') x $level)
23             };
24             ((my $Hash_safe_char = bless {}, 'HASH') = do {
25             (my $Hash_a = bless {}, 'HASH');
26             ($Hash_a->{'_'} = 1);
27             ($Hash_a->{','} = 1);
28             ($Hash_a->{'.'} = 1);
29             ($Hash_a->{':'} = 1);
30             ($Hash_a->{'-'} = 1);
31             ($Hash_a->{'+'} = 1);
32             ($Hash_a->{'*'} = 1);
33             ($Hash_a->{' '} = 1);
34             ($Hash_a->{'('} = 1);
35             ($Hash_a->{')'} = 1);
36             ($Hash_a->{'<'} = 1);
37             ($Hash_a->{'>'} = 1);
38             ($Hash_a->{'['} = 1);
39             ($Hash_a->{']'} = 1);
40             $Hash_a
41             });
42             sub escape_string {
43 467     467   409 my $s = $_[0];
44 467         563 (my $List_out = bless [], 'ARRAY');
45 467         431 ((my $tmp) = '');
46 467 100       656 if (($s eq '')) {
47 39         158 return scalar ((chr(39) . chr(39)))
48             };
49 428         306 for my $i ( @{(bless [0 .. (Main::chars($s, ) - 1)], 'ARRAY')} ) {
  428         708  
50 2927         2955 ((my $c) = substr($s, $i, 1));
51 2927 100 66     11023 if (((((((($c ge 'a')) && (($c le 'z')))) || (((($c ge 'A')) && (($c le 'Z'))))) || (((($c ge '0')) && (($c le '9'))))) || exists($Hash_safe_char->{$c}))) {
      100        
      66        
      100        
      66        
      66        
52 2894         2600 ($tmp = ($tmp . $c))
53             }
54             else {
55 33 100       75 if (($tmp ne '')) {
56 21         19 push( @{$List_out}, (chr(39) . $tmp . chr(39)) )
  21         57  
57             };
58 33         26 push( @{$List_out}, ('chr(' . do {
  33         38  
59 33         65 ord($c)
60             } . ')') );
61 33         44 ($tmp = '')
62             }
63             };
64 428 100       846 if (($tmp ne '')) {
65 426         331 push( @{$List_out}, (chr(39) . $tmp . chr(39)) )
  426         687  
66             };
67 428         776 return scalar (Main::join($List_out, ' . '))
68             }
69             }
70              
71             ;
72             {
73             package CompUnit;
74 67     67   77 sub new { shift; bless { @_ }, "CompUnit" }
  67         542  
75             sub emit_perl5 {
76 0     0   0 my $self = $_[0];
77 0         0 $self->emit_perl5_indented(0)
78             };
79             sub emit_perl5_indented {
80 67     67   72 my $self = $_[0];
81 67         64 my $level = $_[1];
82 67         95 (my $List_body = bless [], 'ARRAY');
83 67 50 0     67 for ( @{(defined $self->{body} ? $self->{body} : ($self->{body} ||= bless([], 'ARRAY')))} ) {
  67         217  
84 414 50       487 if (defined($_)) {
85 414         240 push( @{$List_body}, $_ )
  414         450  
86             }
87             };
88 67         162 (Perl5::tab($level) . (chr(123) . chr(10)) . Perl5::tab($level) . 'package ' . $self->{name} . (chr(59)) . (chr(10)) . Perl5::tab(($level + 1)) . 'sub new ' . chr(123) . ' shift' . chr(59) . ' bless ' . chr(123) . ' ' . chr(64) . '_ ' . chr(125) . ', ' . chr(34) . $self->{name} . chr(34) . ' ' . chr(125) . (chr(10)) . Main::join(([ map { $_->emit_perl5_indented(($level + 1)) } @{( $List_body )} ]), (chr(59) . chr(10))) . (chr(10)) . Perl5::tab($level) . (chr(125) . chr(10)) . (chr(10)))
  414         870  
  67         90  
89             };
90             sub emit_perl5_program {
91 31     31   49 my $comp_units = $_[0];
92 31         67 ((my $str) = ('' . ('use v5' . chr(59) . chr(10)) . ('use utf8' . chr(59) . chr(10)) . ('use strict' . chr(59) . chr(10)) . ('use warnings' . chr(59) . chr(10)) . ('no warnings (' . chr(39) . 'redefine' . chr(39) . ', ' . chr(39) . 'once' . chr(39) . ', ' . chr(39) . 'void' . chr(39) . ', ' . chr(39) . 'uninitialized' . chr(39) . ', ' . chr(39) . 'misc' . chr(39) . ', ' . chr(39) . 'recursion' . chr(39) . ')' . chr(59) . chr(10)) . ('use Perlito6::Perl5::Runtime' . chr(59) . chr(10)) . ('use Perlito6::Perl5::Prelude' . chr(59) . chr(10)) . ('our ' . chr(36) . 'MATCH ' . chr(61) . ' Perlito6::Match->new()' . chr(59) . chr(10))));
93 31         44 for my $comp_unit ( @{(($comp_units))} ) {
  31         63  
94 31         107 ($str = ($str . $comp_unit->emit_perl5_indented(0)))
95             };
96 31         63 ($str = ($str . ('1' . chr(59) . chr(10))));
97 31         143 return scalar ($str)
98             }
99             }
100              
101             ;
102             {
103             package Val::Int;
104 320     320   310 sub new { shift; bless { @_ }, "Val::Int" }
  320         1698  
105             sub emit_perl5 {
106 307     307   235 my $self = $_[0];
107 307         392 $self->emit_perl5_indented(0)
108             };
109             sub emit_perl5_indented {
110 320     320   242 my $self = $_[0];
111 320         225 my $level = $_[1];
112             (Perl5::tab($level) . $self->{int})
113 320         325 }
114             }
115              
116             ;
117             {
118             package Val::Bit;
119 4     4   7 sub new { shift; bless { @_ }, "Val::Bit" }
  4         12  
120             sub emit_perl5 {
121 2     2   3 my $self = $_[0];
122 2         3 $self->emit_perl5_indented(0)
123             };
124             sub emit_perl5_indented {
125 4     4   6 my $self = $_[0];
126 4         4 my $level = $_[1];
127             (Perl5::tab($level) . $self->{bit})
128 4         8 }
129             }
130              
131             ;
132             {
133             package Val::Num;
134 9     9   9 sub new { shift; bless { @_ }, "Val::Num" }
  9         55  
135             sub emit_perl5 {
136 9     9   7 my $self = $_[0];
137 9         14 $self->emit_perl5_indented(0)
138             };
139             sub emit_perl5_indented {
140 9     9   9 my $self = $_[0];
141 9         8 my $level = $_[1];
142             (Perl5::tab($level) . $self->{num})
143 9         10 }
144             }
145              
146             ;
147             {
148             package Val::Buf;
149 468     468   427 sub new { shift; bless { @_ }, "Val::Buf" }
  468         2217  
150             sub emit_perl5 {
151 467     467   364 my $self = $_[0];
152 467         586 $self->emit_perl5_indented(0)
153             };
154             sub emit_perl5_indented {
155 467     467   349 my $self = $_[0];
156 467         1012 my $level = $_[1];
157 467         467 (Perl5::tab($level) . Perl5::escape_string($self->{buf}))
158             }
159             }
160              
161             ;
162             {
163             package Lit::Block;
164 282     282   241 sub new { shift; bless { @_ }, "Lit::Block" }
  282         1236  
165             sub emit_perl5 {
166 0     0   0 my $self = $_[0];
167 0         0 $self->emit_perl5_indented(0)
168             };
169             sub emit_perl5_indented {
170 0     0   0 my $self = $_[0];
171 0         0 my $level = $_[1];
172 0 0 0     0 (Perl5::tab($level) . ('sub ' . chr(123) . chr(10)) . Main::join([ map { $_->emit_perl5_indented(($level + 1)) } @{( (defined $self->{stmts} ? $self->{stmts} : ($self->{stmts} ||= bless([], 'ARRAY'))) )} ], (chr(59) . chr(10))) . (chr(10)) . Perl5::tab($level) . (chr(125)))
  0         0  
  0         0  
173             }
174             }
175              
176             ;
177             {
178             package Lit::Array;
179             sub new { shift; bless { @_ }, "Lit::Array" }
180             sub emit_perl5 {
181 26     26   31 my $self = $_[0];
182 26         46 $self->emit_perl5_indented(0)
183             };
184             sub emit_perl5_indented {
185 26     26   30 my $self = $_[0];
186 26         27 my $level = $_[1];
187 26         61 ((my $ast) = $self->expand_interpolation());
188 26         98 return scalar ($ast->emit_perl5_indented($level))
189             }
190             }
191              
192             ;
193             {
194             package Lit::Hash;
195             sub new { shift; bless { @_ }, "Lit::Hash" }
196             sub emit_perl5 {
197 4     4   5 my $self = $_[0];
198 4         9 $self->emit_perl5_indented(0)
199             };
200             sub emit_perl5_indented {
201 4     4   4 my $self = $_[0];
202 4         4 my $level = $_[1];
203 4         12 ((my $ast) = $self->expand_interpolation());
204 4         11 return scalar ($ast->emit_perl5_indented($level))
205             }
206             }
207              
208             ;
209             {
210             package Index;
211 38     38   41 sub new { shift; bless { @_ }, "Index" }
  38         147  
212             sub emit_perl5 {
213 32     32   24 my $self = $_[0];
214 32         55 $self->emit_perl5_indented(0)
215             };
216             sub emit_perl5_indented {
217 38     38   28 my $self = $_[0];
218 38         28 my $level = $_[1];
219 38         82 ($self->{obj}->emit_perl5_indented($level) . '->[' . $self->{index_exp}->emit_perl5() . ']')
220             }
221             }
222              
223             ;
224             {
225             package Lookup;
226 33     33   28 sub new { shift; bless { @_ }, "Lookup" }
  33         121  
227             sub emit_perl5 {
228 27     27   26 my $self = $_[0];
229 27         43 $self->emit_perl5_indented(0)
230             };
231             sub emit_perl5_indented {
232 33     33   30 my $self = $_[0];
233 33         21 my $level = $_[1];
234 33         62 ($self->{obj}->emit_perl5_indented($level) . '->' . chr(123) . $self->{index_exp}->emit_perl5() . chr(125))
235             }
236             }
237              
238             ;
239             {
240             package Var;
241 680     680   535 sub new { shift; bless { @_ }, "Var" }
  680         3829  
242             sub emit_perl5 {
243 565     565   452 my $self = $_[0];
244 565         698 $self->emit_perl5_indented(0)
245             };
246             sub emit_perl5_indented {
247 655     655   427 my $self = $_[0];
248 655         443 my $level = $_[1];
249 655         455 ((my $table) = do {
250 655         677 (my $Hash_a = bless {}, 'HASH');
251 655         871 ($Hash_a->{chr(36)} = chr(36));
252 655         589 ($Hash_a->{chr(64)} = chr(36) . 'List_');
253 655         858 ($Hash_a->{chr(37)} = chr(36) . 'Hash_');
254 655         612 ($Hash_a->{chr(38)} = chr(36) . 'Code_');
255 655         615 $Hash_a
256             });
257 655         563 ((my $ns) = '');
258 655 50       848 if ($self->{namespace}) {
259 0         0 ($ns = ($self->{namespace} . '::'))
260             }
261             else {
262 655 50 66     1429 if ((((($self->{sigil} eq chr(64))) && (($self->{twigil} eq '*'))) && (($self->{name} eq 'ARGS')))) {
      33        
263 0         0 return scalar ((Perl5::tab($level) . '(' . chr(92) . chr(64) . 'ARGV)'))
264             };
265 655 100       852 if (($self->{twigil} eq '.')) {
266 3 50       8 if (($self->{sigil} eq chr(37))) {
267 0         0 return scalar ((Perl5::tab($level) . '(' . 'defined ' . chr(36) . 'self->' . chr(123) . $self->{name} . chr(125) . ' ' . chr(63) . ' ' . chr(36) . 'self->' . chr(123) . $self->{name} . chr(125) . ' ' . ': (' . chr(36) . 'self->' . chr(123) . $self->{name} . (chr(125) . ' ' . chr(61) . ' bless(' . chr(123) . chr(125) . ', ' . chr(39) . 'HASH' . chr(39) . ')))')))
268             }
269             else {
270 3 50       6 if (($self->{sigil} eq chr(64))) {
271 0         0 return scalar ((Perl5::tab($level) . '(' . 'defined ' . chr(36) . 'self->' . chr(123) . $self->{name} . chr(125) . ' ' . chr(63) . ' ' . chr(36) . 'self->' . chr(123) . $self->{name} . chr(125) . ' ' . ': (' . chr(36) . 'self->' . chr(123) . $self->{name} . (chr(125) . ' ' . chr(124) . chr(124) . chr(61) . ' bless([], ' . chr(39) . 'ARRAY' . chr(39) . ')))')))
272             }
273             else {
274 3         7 return scalar ((Perl5::tab($level) . chr(36) . 'self->' . chr(123) . $self->{name} . chr(125)))
275             }
276             }
277             };
278 652 50       928 if (($self->{name} eq chr(47))) {
279 0         0 return scalar ((Perl5::tab($level) . $table->{$self->{sigil}} . 'MATCH'))
280             }
281             };
282 652         670 return scalar ((Perl5::tab($level) . $table->{$self->{sigil}} . $ns . $self->{name}))
283             };
284             sub plain_name {
285 131     131   113 my $self = $_[0];
286 131 50       231 if ($self->{namespace}) {
287 0         0 return scalar (($self->{namespace} . '::' . $self->{name}))
288             };
289             return scalar ($self->{name})
290 131         174 }
291             }
292              
293             ;
294             {
295             package Proto;
296 20     20   21 sub new { shift; bless { @_ }, "Proto" }
  20         73  
297             sub emit_perl5 {
298 20     20   24 my $self = $_[0];
299 20         37 $self->emit_perl5_indented(0)
300             };
301             sub emit_perl5_indented {
302 20     20   30 my $self = $_[0];
303 20         25 my $level = $_[1];
304             (Perl5::tab($level) . $self->{name})
305 20         28 }
306             }
307              
308             ;
309             {
310             package Call;
311 152     152   140 sub new { shift; bless { @_ }, "Call" }
  152         612  
312             ((my $Hash_method_perl5 = bless {}, 'HASH') = do {
313             (my $Hash_a = bless {}, 'HASH');
314             ($Hash_a->{'perl'} = 'Main::perl');
315             ($Hash_a->{'id'} = 'Main::id');
316             ($Hash_a->{'yaml'} = 'Main::yaml');
317             ($Hash_a->{'say'} = 'Main::say');
318             ($Hash_a->{'join'} = 'Main::join');
319             ($Hash_a->{'split'} = 'Main::split');
320             ($Hash_a->{'chars'} = 'Main::chars');
321             ($Hash_a->{'isa'} = 'Main::isa');
322             ($Hash_a->{'pairs'} = 'Main::pairs');
323             ($Hash_a->{'keys'} = 'Main::keys');
324             ($Hash_a->{'values'} = 'Main::values');
325             $Hash_a
326             });
327             sub emit_perl5 {
328 90     90   72 my $self = $_[0];
329 90         161 $self->emit_perl5_indented(0)
330             };
331             sub emit_perl5_indented {
332 125     125   102 my $self = $_[0];
333 125         98 my $level = $_[1];
334 125         271 ((my $invocant) = $self->{invocant}->emit_perl5());
335 125 50       231 if (($invocant eq 'self')) {
336 0         0 ($invocant = chr(36) . 'self')
337             };
338 125 100       257 if (exists($Hash_method_perl5->{$self->{method}})) {
339 7 50       18 if (($self->{hyper})) {
340 0 0 0     0 return scalar ((Perl5::tab($level) . 'bless [ map ' . chr(123) . ' ' . $Hash_method_perl5->{$self->{method}} . '( ' . chr(36) . '_, ' . ', ' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ', ') . ')' . ' ' . chr(125) . ' ' . chr(64) . chr(123) . '( ' . $invocant . ' )' . chr(125) . ' ], ' . chr(34) . 'ARRAY' . chr(34)))
  0         0  
  0         0  
341             }
342             else {
343 7 50 50     8 return scalar ((Perl5::tab($level) . $Hash_method_perl5->{$self->{method}} . '(' . $invocant . ', ' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ', ') . ')'))
  0         0  
  7         33  
344             }
345             };
346 118 100       186 if (($self->{method} eq 'push')) {
347 30 50 0     41 return scalar ((Perl5::tab($level) . 'push( ' . chr(64) . chr(123) . $invocant . chr(125) . ', ' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ', ') . ' )'))
  30         43  
  30         77  
348             };
349 88 100       132 if (($self->{method} eq 'unshift')) {
350 1 50 0     3 return scalar ((Perl5::tab($level) . 'unshift( ' . chr(64) . chr(123) . $invocant . chr(125) . ', ' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ', ') . ' )'))
  1         2  
  1         4  
351             };
352 87 50       166 if (($self->{method} eq 'pop')) {
353 0         0 return scalar ((Perl5::tab($level) . 'pop( ' . chr(64) . chr(123) . $invocant . chr(125) . ' )'))
354             };
355 87 50       136 if (($self->{method} eq 'shift')) {
356 0         0 return scalar ((Perl5::tab($level) . 'shift( ' . chr(64) . chr(123) . $invocant . chr(125) . ' )'))
357             };
358 87 100       134 if (($self->{method} eq 'elems')) {
359 1         3 return scalar ((Perl5::tab($level) . 'scalar( ' . chr(64) . chr(123) . $invocant . chr(125) . ' )'))
360             };
361 86         90 ((my $meth) = $self->{method});
362 86 100       126 if (($meth eq 'postcircumfix:<( )>')) {
363 7         11 ($meth = '')
364             };
365 86 100 50     105 ((my $call) = ('->' . $meth . '(' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ', ') . ')'));
  54         84  
  86         354  
366 86 100       174 if (($self->{hyper})) {
367 1 50 33     2 if (!(((Main::isa($self->{invocant}, 'Apply') && ($self->{invocant}->code() eq 'prefix:<' . chr(64) . '>'))))) {
368 1         3 ($invocant = (chr(64) . chr(123) . '( ' . $invocant . ' )' . chr(125)))
369             };
370 1         2 return scalar ((Perl5::tab($level) . '[ map ' . chr(123) . ' ' . chr(36) . '_' . $call . ' ' . chr(125) . ' ' . $invocant . ' ]'))
371             }
372             else {
373 85         107 (Perl5::tab($level) . $invocant . $call)
374             }
375             }
376             }
377              
378             ;
379             {
380             package Apply;
381             sub new { shift; bless { @_ }, "Apply" }
382             ((my $Hash_op_prefix_perl5 = bless {}, 'HASH') = do {
383             (my $Hash_a = bless {}, 'HASH');
384             ($Hash_a->{'say'} = 'Main::say');
385             ($Hash_a->{'print'} = 'Main::print');
386             ($Hash_a->{'map'} = 'Main::map');
387             ($Hash_a->{'grep'} = 'Main::grep');
388             ($Hash_a->{'sort'} = 'Main::sort');
389             ($Hash_a->{'warn'} = 'warn');
390             ($Hash_a->{'Int'} = '0+');
391             ($Hash_a->{'Num'} = '0+');
392             ($Hash_a->{'bool'} = chr(33) . chr(33));
393             ($Hash_a->{'prefix:<' . chr(126) . '>'} = chr(34) . chr(34) . '.');
394             ($Hash_a->{'prefix:<' . chr(33) . '>'} = chr(33));
395             ($Hash_a->{'prefix:<' . chr(63) . '>'} = chr(33) . chr(33));
396             ($Hash_a->{'prefix:<++>'} = '++');
397             ($Hash_a->{'prefix:<-->'} = '--');
398             $Hash_a
399             });
400             ((my $Hash_op_infix_perl5 = bless {}, 'HASH') = do {
401             (my $Hash_a = bless {}, 'HASH');
402             ($Hash_a->{'list:<' . chr(126) . '>'} = ' . ');
403             ($Hash_a->{'infix:<+>'} = ' + ');
404             ($Hash_a->{'infix:<->'} = ' - ');
405             ($Hash_a->{'infix:<*>'} = ' * ');
406             ($Hash_a->{'infix:<' . chr(47) . '>'} = ' ' . chr(47) . ' ');
407             ($Hash_a->{'infix:<>>'} = ' > ');
408             ($Hash_a->{'infix:<<>'} = ' < ');
409             ($Hash_a->{'infix:<>' . chr(61) . '>'} = ' >' . chr(61) . ' ');
410             ($Hash_a->{'infix:<<' . chr(61) . '>'} = ' <' . chr(61) . ' ');
411             ($Hash_a->{'infix:'} = ' x ');
412             ($Hash_a->{'infix:<' . chr(38) . chr(38) . '>'} = ' ' . chr(38) . chr(38) . ' ');
413             ($Hash_a->{'infix:<' . chr(124) . chr(124) . '>'} = ' ' . chr(124) . chr(124) . ' ');
414             ($Hash_a->{'infix:'} = ' and ');
415             ($Hash_a->{'infix:'} = ' or ');
416             ($Hash_a->{'infix:<' . chr(47) . chr(47) . '>'} = ' ' . chr(47) . chr(47) . ' ');
417             ($Hash_a->{'infix:'} = ' eq ');
418             ($Hash_a->{'infix:'} = ' ne ');
419             ($Hash_a->{'infix:'} = ' le ');
420             ($Hash_a->{'infix:'} = ' ge ');
421             ($Hash_a->{'infix:<' . chr(61) . chr(61) . '>'} = ' ' . chr(61) . chr(61) . ' ');
422             ($Hash_a->{'infix:<' . chr(33) . chr(61) . '>'} = ' ' . chr(33) . chr(61) . ' ');
423             ($Hash_a->{'infix:<' . chr(61) . '>>'} = ' ' . chr(61) . '> ');
424             $Hash_a
425             });
426             sub emit_perl5 {
427 528     528   413 my $self = $_[0];
428 528         1272 $self->emit_perl5_indented(0)
429             };
430             sub emit_perl5_indented {
431 1012     1012   1476 my $self = $_[0];
432 1012         676 my $level = $_[1];
433 1012         1636 ((my $apply) = $self->op_assign());
434 1012 50       1315 if ($apply) {
435 0         0 return scalar ($apply->emit_perl5_indented($level))
436             };
437 1012         813 ((my $ns) = '');
438 1012 100       2285 if ($self->{namespace}) {
439 6         11 ($ns = ($self->{namespace} . '::'))
440             };
441 1012         1128 ((my $code) = ($ns . $self->{code}));
442 1012 50       1347 if (Main::isa($code, 'Str')) {
443              
444             }
445             else {
446 0 0 0     0 return scalar ((Perl5::tab($level) . '(' . $self->{code}->emit_perl5() . ')->(' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ', ') . ')'))
  0         0  
  0         0  
447             };
448 1012 100       1740 if (exists($Hash_op_infix_perl5->{$code})) {
449 326 50 0     377 return scalar ((Perl5::tab($level) . '(' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), $Hash_op_infix_perl5->{$code}) . ')'))
  545         817  
  326         684  
450             };
451 686 100       1078 if (exists($Hash_op_prefix_perl5->{$code})) {
452 288 50 0     338 return scalar ((Perl5::tab($level) . $Hash_op_prefix_perl5->{$code} . '(' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ', ') . ')'))
  383         579  
  288         673  
453             };
454 398 50       541 if (($code eq 'self')) {
455 0         0 return scalar ((Perl5::tab($level) . chr(36) . 'self'))
456             };
457 398 100       510 if (($code eq 'Mu')) {
458 1         2 return scalar ((Perl5::tab($level) . 'undef()'))
459             };
460 397 50       514 if (($code eq 'make')) {
461 0 0 0     0 return scalar ((Perl5::tab($level) . '(' . chr(36) . 'MATCH->' . chr(123) . 'capture' . chr(125) . ' ' . chr(61) . ' (' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ', ') . '))'))
  0         0  
  0         0  
462             };
463 397 50       1421 if (($code eq 'array')) {
464 0 0 0     0 return scalar ((Perl5::tab($level) . chr(64) . chr(123) . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ' ') . chr(125)))
  0         0  
  0         0  
465             };
466 397 50       499 if (($code eq 'pop')) {
467 0 0 0     0 return scalar ((Perl5::tab($level) . 'pop( ' . chr(64) . chr(123) . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ' ') . chr(125) . ' )'))
  0         0  
  0         0  
468             };
469 397 50       506 if (($code eq 'push')) {
470 0 0 0     0 return scalar ((Perl5::tab($level) . 'push( ' . chr(64) . chr(123) . ((defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY')))->[0])->emit_perl5() . chr(125) . ', ' . ((defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY')))->[1])->emit_perl5() . ' )'))
    0 0        
471             };
472 397 100       499 if (($code eq 'shift')) {
473 2 50 0     6 return scalar ((Perl5::tab($level) . 'shift( ' . chr(64) . chr(123) . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ' ') . chr(125) . ' )'))
  2         5  
  2         5  
474             };
475 395 50       492 if (($code eq 'unshift')) {
476 0 0 0     0 return scalar ((Perl5::tab($level) . 'unshift( ' . chr(64) . chr(123) . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ' ') . chr(125) . ' )'))
  0         0  
  0         0  
477             };
478 395 100       493 if (($code eq 'prefix:<' . chr(36) . '>')) {
479 5 50 0     10 return scalar ((Perl5::tab($level) . chr(36) . chr(123) . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ' ') . chr(125)))
  5         13  
  5         17  
480             };
481 390 100       543 if (($code eq 'prefix:<' . chr(64) . '>')) {
482 7 50 0     10 return scalar ((Perl5::tab($level) . '(' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ' ') . ')'))
  7         11  
  7         18  
483             };
484 383 50       496 if (($code eq 'prefix:<' . chr(37) . '>')) {
485 0 0 0     0 return scalar ((Perl5::tab($level) . chr(37) . chr(123) . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ' ') . chr(125)))
  0         0  
  0         0  
486             };
487 383 50       460 if (($code eq 'postfix:<++>')) {
488 0 0 0     0 return scalar ((Perl5::tab($level) . '(' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ' ') . ')++'))
  0         0  
  0         0  
489             };
490 383 50       475 if (($code eq 'postfix:<-->')) {
491 0 0 0     0 return scalar ((Perl5::tab($level) . '(' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ' ') . ')--'))
  0         0  
  0         0  
492             };
493 383 100       473 if (($code eq 'infix:<..>')) {
494 1 50 0     2 return scalar ((Perl5::tab($level) . '(bless [' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ' .. ') . ('], ' . chr(39) . 'ARRAY' . chr(39) . ')')))
  2         9  
  1         5  
495             };
496 382 50       477 if (($code eq 'infix:<' . chr(61) . chr(61) . chr(61) . '>')) {
497 0 0 0     0 return scalar ((Perl5::tab($level) . '(Main::id(' . ((defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY')))->[0])->emit_perl5() . ') eq Main::id(' . ((defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY')))->[1])->emit_perl5() . '))'))
    0 0        
498             };
499 382 100       503 if (($code eq 'ternary:<' . chr(63) . chr(63) . ' ' . chr(33) . chr(33) . '>')) {
500 36 50 0     40 return scalar ((Perl5::tab($level) . '(' . (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY')))->[0]->emit_perl5() . ' ' . chr(63) . ' ' . (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY')))->[1]->emit_perl5() . ' : ' . (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY')))->[2]->emit_perl5() . ')'))
    50 0        
    50 0        
501             };
502 346 100       505 if (($code eq 'circumfix:<( )>')) {
503 131 50 0     163 return scalar ((Perl5::tab($level) . '(' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ', ') . ')'))
  131         210  
  131         282  
504             };
505 215 100       349 if (($code eq 'infix:<' . chr(61) . '>')) {
506 176 50 0     235 return scalar ((Perl5::tab($level) . emit_perl5_bind((defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY')))->[0], (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY')))->[1])))
    50 0        
507             };
508 39 100       82 if (($code eq 'return')) {
509 3 50 0     13 if (((defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) && (scalar( @{(defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY')))} ) == 1))) {
  3 50 0     13  
    50 33        
510 3 50 0     7 return scalar ((Perl5::tab($level) . 'return scalar (' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ', ') . ')'))
  3         8  
  3         11  
511             };
512 0 0 0     0 return scalar ((Perl5::tab($level) . 'return (' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ', ') . ')'))
  0         0  
  0         0  
513             };
514 36 50 0     52 (Perl5::tab($level) . $code . '(' . Main::join(([ map { $_->emit_perl5() } @{( (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))) )} ]), ', ') . ')')
  71         118  
  36         105  
515             };
516             sub emit_perl5_bind {
517 176     176   165 my $parameters = $_[0];
518 176         162 my $arguments = $_[1];
519 176 100       299 if (Main::isa($parameters, 'Call')) {
520 27         25 ((my $a) = $parameters);
521 27         57 return scalar (('((' . ($a->invocant())->emit_perl5() . ')->' . chr(123) . $a->method() . chr(125) . ' ' . chr(61) . ' ' . $arguments->emit_perl5() . ')'))
522             };
523 149 100 100     265 if (((Main::isa($parameters, 'Var') && ($parameters->sigil() eq chr(64))) || (Main::isa($parameters, 'Decl') && ($parameters->var()->sigil() eq chr(64))))) {
      100        
      66        
524 11         14 ($arguments = Lit::Array->new(('array1' => do {
525 11         17 (my $List_a = bless [], 'ARRAY');
526 11         15 (my $List_v = bless [], 'ARRAY');
527 11         8 push( @{$List_a}, $arguments );
  11         19  
528 11         38 $List_a
529             })))
530             }
531             else {
532 138 100 66     232 if (((Main::isa($parameters, 'Var') && ($parameters->sigil() eq chr(37))) || (Main::isa($parameters, 'Decl') && ($parameters->var()->sigil() eq chr(37))))) {
      100        
      33        
533 2         2 ($arguments = Lit::Hash->new(('hash1' => do {
534 2         3 (my $List_a = bless [], 'ARRAY');
535 2         3 (my $List_v = bless [], 'ARRAY');
536 2         2 push( @{$List_a}, $arguments );
  2         3  
537 2         19 $List_a
538             })))
539             }
540             };
541 149         310 ('(' . $parameters->emit_perl5() . ' ' . chr(61) . ' ' . $arguments->emit_perl5() . ')')
542             }
543             }
544              
545             ;
546             {
547             package If;
548 96     96   127 sub new { shift; bless { @_ }, "If" }
  96         735  
549             sub emit_perl5 {
550 0     0   0 my $self = $_[0];
551 0         0 $self->emit_perl5_indented(0)
552             };
553             sub emit_perl5_indented {
554 96     96   92 my $self = $_[0];
555 96         89 my $level = $_[1];
556 96 50 50     115 return scalar ((Perl5::tab($level) . 'if (' . $self->{cond}->emit_perl5() . (') ' . chr(123) . chr(10)) . (($self->{body} ? (Main::join([ map { $_->emit_perl5_indented(($level + 1)) } @{( $self->{body}->stmts() )} ], (chr(59) . chr(10))) . (chr(10))) : '')) . Perl5::tab($level) . (chr(125)) . ((($self->{otherwise} && scalar( @{$self->{otherwise}->stmts()} )) ? ((chr(10) . Perl5::tab($level) . ('else ' . chr(123) . chr(10)) . Main::join([ map { $_->emit_perl5_indented(($level + 1)) } @{( $self->{otherwise}->stmts() )} ], (chr(59) . chr(10))) . (chr(10)) . Perl5::tab($level) . (chr(125)))) : ''))))
  96 100       178  
  96         219  
  19         39  
  19         34  
557             }
558             }
559              
560             ;
561             {
562             package While;
563 7     7   7 sub new { shift; bless { @_ }, "While" }
  7         55  
564             sub emit_perl5 {
565 0     0   0 my $self = $_[0];
566 0         0 $self->emit_perl5_indented(0)
567             };
568             sub emit_perl5_indented {
569 7     7   9 my $self = $_[0];
570 7         8 my $level = $_[1];
571 7         9 ((my $cond) = $self->{cond});
572 7 100 100     14 if ((Main::isa($cond, 'Var') && ($cond->sigil() eq chr(64)))) {
573 2         3 ($cond = Apply->new(('code' => 'prefix:<' . chr(64) . '>'), ('arguments' => do {
574 2         2 (my $List_a = bless [], 'ARRAY');
575 2         3 (my $List_v = bless [], 'ARRAY');
576 2         1 push( @{$List_a}, $cond );
  2         3  
577 2         6 $List_a
578             })))
579             };
580 7 50       16 (Perl5::tab($level) . 'for ( ' . (($self->{init} ? ($self->{init}->emit_perl5() . chr(59) . ' ') : chr(59) . ' ')) . (($cond ? ($cond->emit_perl5() . chr(59) . ' ') : chr(59) . ' ')) . (($self->{continue} ? ($self->{continue}->emit_perl5() . ' ') : ' ')) . ') ' . chr(123) . (chr(10)) . Main::join([ map { $_->emit_perl5_indented(($level + 1)) } @{( $self->{body}->stmts() )} ], (chr(59) . chr(10))) . (chr(10)) . Perl5::tab($level) . (chr(125)))
  16 50       35  
  7 50       17  
581             }
582             }
583              
584             ;
585             {
586             package For;
587 8     8   8 sub new { shift; bless { @_ }, "For" }
  8         41  
588             sub emit_perl5 {
589 0     0   0 my $self = $_[0];
590 0         0 $self->emit_perl5_indented(0)
591             };
592             sub emit_perl5_indented {
593 8     8   5 my $self = $_[0];
594 8         9 my $level = $_[1];
595 8         17 ((my $cond) = $self->{cond});
596 8 100 66     16 if (!(((Main::isa($cond, 'Var') && ($cond->sigil() eq chr(64)))))) {
597 3         2 ($cond = Lit::Array->new(('array1' => do {
598 3         9 (my $List_a = bless [], 'ARRAY');
599 3         5 (my $List_v = bless [], 'ARRAY');
600 3         3 push( @{$List_a}, $cond );
  3         5  
601 3         9 $List_a
602             })))
603             };
604 8         11 (my $sig);
605 8 100       18 if ($self->{body}->sig()) {
606 6         12 ($sig = ('my ' . $self->{body}->sig()->emit_perl5() . ' '))
607             };
608 8         12 return scalar ((Perl5::tab($level) . 'for ' . $sig . '( ' . chr(64) . chr(123) . $cond->emit_perl5() . chr(125) . ' ) ' . chr(123) . (chr(10)) . Main::join([ map { $_->emit_perl5_indented(($level + 1)) } @{( $self->{body}->stmts() )} ], (chr(59) . chr(10))) . (chr(10)) . Perl5::tab($level) . (chr(125))))
  14         27  
  8         18  
609             }
610             }
611              
612             ;
613             {
614             package Decl;
615 131     131   111 sub new { shift; bless { @_ }, "Decl" }
  131         474  
616             sub emit_perl5 {
617 64     64   66 my $self = $_[0];
618 64         122 $self->emit_perl5_indented(0)
619             };
620             sub emit_perl5_indented {
621 131     131   114 my $self = $_[0];
622 131         114 my $level = $_[1];
623 131         163 ((my $decl) = $self->{decl});
624 131         228 ((my $name) = $self->{var}->plain_name());
625 131 100       221 if (($decl eq 'has')) {
626 2         5 return scalar ((Perl5::tab($level) . 'sub ' . $name . ' ' . chr(123) . ' ' . chr(36) . '_[0]->' . chr(123) . $name . chr(125) . ' ' . chr(125)))
627             };
628 129         316 ((my $str) = ('(' . $self->{decl} . ' ' . $self->{type} . ' ' . $self->{var}->emit_perl5()));
629 129 100       268 if ((($self->{var})->sigil() eq chr(37))) {
630 9         21 ($str = ($str . ' ' . chr(61) . ' bless ' . chr(123) . chr(125) . ', ' . chr(39) . 'HASH' . chr(39) . ')'))
631             }
632             else {
633 120 100       200 if ((($self->{var})->sigil() eq chr(64))) {
634 53         103 ($str = ($str . ' ' . chr(61) . ' bless [], ' . chr(39) . 'ARRAY' . chr(39) . ')'))
635             }
636             else {
637 67         86 ($str = ($str . ')'))
638             }
639             };
640 129         168 return scalar ((Perl5::tab($level) . $str))
641             }
642             }
643              
644             ;
645             {
646             package Method;
647 12     12   13 sub new { shift; bless { @_ }, "Method" }
  12         120  
648             sub emit_perl5 {
649 0     0   0 my $self = $_[0];
650 0         0 $self->emit_perl5_indented(0)
651             };
652             sub emit_perl5_indented {
653 12     12   20 my $self = $_[0];
654 12         13 my $level = $_[1];
655 12         21 ((my $sig) = $self->{sig});
656 12         38 ((my $invocant) = $sig->invocant());
657 12         30 ((my $pos) = $sig->positional());
658 12         18 ((my $str) = '');
659 12         17 ((my $i) = 1);
660 12         14 for my $field ( @{($pos)} ) {
  12         19  
661 23         31 ($str = ($str . (Perl5::tab(($level + 1)) . 'my ' . $field->emit_perl5() . ' ' . chr(61) . ' ' . chr(36) . '_[' . $i . ']' . chr(59) . (chr(10)))));
662 23         34 ($i = ($i + 1))
663             };
664 12 50 0     22 (Perl5::tab($level) . 'sub ' . $self->{name} . (' ' . chr(123) . chr(10)) . Perl5::tab(($level + 1)) . 'my ' . $invocant->emit_perl5() . ' ' . chr(61) . ' ' . chr(36) . '_[0]' . chr(59) . (chr(10)) . $str . "".(Main::join(([ map { $_->emit_perl5_indented(($level + 1)) } @{( (defined $self->{block} ? $self->{block} : ($self->{block} ||= bless([], 'ARRAY'))) )} ]), (chr(59) . chr(10)))) . (chr(10)) . Perl5::tab($level) . (chr(125)))
  25         61  
  12         43  
665             }
666             }
667              
668             ;
669             {
670             package Sub;
671 12     12   12 sub new { shift; bless { @_ }, "Sub" }
  12         120  
672             sub emit_perl5 {
673 6     6   6 my $self = $_[0];
674 6         13 $self->emit_perl5_indented(0)
675             };
676             sub emit_perl5_indented {
677 12     12   10 my $self = $_[0];
678 12         13 my $level = $_[1];
679 12         18 ((my $sig) = $self->{sig});
680 12         30 ((my $pos) = $sig->positional());
681 12         15 ((my $str) = '');
682 12         11 ((my $i) = 0);
683 12         10 for my $field ( @{($pos)} ) {
  12         20  
684 8         11 ($str = ($str . (Perl5::tab(($level + 1)) . 'my ' . $field->emit_perl5() . ' ' . chr(61) . ' ' . chr(36) . '_[' . $i . ']' . chr(59) . (chr(10)))));
685 8         10 ($i = ($i + 1))
686             };
687 12 50 0     16 (Perl5::tab($level) . 'sub ' . $self->{name} . (' ' . chr(123) . chr(10)) . $str . Main::join(([ map { $_->emit_perl5_indented(($level + 1)) } @{( (defined $self->{block} ? $self->{block} : ($self->{block} ||= bless([], 'ARRAY'))) )} ]), (chr(59) . chr(10))) . (chr(10)) . Perl5::tab($level) . (chr(125)))
  14         48  
  12         28  
688             }
689             }
690              
691             ;
692             {
693             package Do;
694             sub new { shift; bless { @_ }, "Do" }
695             sub emit_perl5 {
696 32     32   28 my $self = $_[0];
697 32         65 $self->emit_perl5_indented(0)
698             };
699             sub emit_perl5_indented {
700 65     65   59 my $self = $_[0];
701 65         51 my $level = $_[1];
702 65         133 ((my $block) = $self->simplify()->block());
703 65         181 (Perl5::tab($level) . ('do ' . chr(123) . chr(10)) . Main::join(([ map { $_->emit_perl5_indented(($level + 1)) } @{( $block )} ]), (chr(59) . chr(10))) . (chr(10)) . Perl5::tab($level) . (chr(125)))
  203         486  
  65         85  
704             }
705             }
706              
707             ;
708             {
709             package Use;
710 1     1   1 sub new { shift; bless { @_ }, "Use" }
  1         4  
711             sub emit_perl5 {
712 0     0   0 my $self = $_[0];
713 0         0 $self->emit_perl5_indented(0)
714             };
715             sub emit_perl5_indented {
716 1     1   2 my $self = $_[0];
717 1         2 my $level = $_[1];
718 1 50       3 if (($self->{mod} eq 'v6')) {
719 0         0 return scalar ((chr(10) . Perl5::tab($level) . (chr(35) . ' use ' . $self->{mod} . ' ' . chr(10))))
720             };
721             (Perl5::tab($level) . 'use ' . $self->{mod})
722 1         3 }
723             }
724              
725              
726             }
727              
728             1;