File Coverage

blib/lib/Perlito/Perl5/Emitter.pm
Criterion Covered Total %
statement 390 521 74.8
branch 96 128 75.0
condition 40 56 71.4
subroutine 78 125 62.4
pod n/a
total 604 830 72.7


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