File Coverage

blib/lib/Perlito6/Macro.pm
Criterion Covered Total %
statement 207 217 95.3
branch 25 34 73.5
condition 34 62 54.8
subroutine 15 15 100.0
pod n/a
total 281 328 85.6


line stmt bran cond sub pod time code
1             # Do not edit this file - Generated by Perlito6 9.0
2 31     31   240 use v5;
  31         73  
3 31     31   109 use utf8;
  31         37  
  31         134  
4 31     31   477 use strict;
  31         39  
  31         445  
5 31     31   98 use warnings;
  31         38  
  31         774  
6 31     31   97 no warnings ('redefine', 'once', 'void', 'uninitialized', 'misc', 'recursion');
  31         43  
  31         1104  
7 31     31   146 use Perlito6::Perl5::Runtime;
  31         46  
  31         599  
8 31     31   91 use Perlito6::Perl5::Prelude;
  31         34  
  31         64010  
9             our $MATCH = Perlito6::Match->new();
10             {
11             package GLOBAL;
12             sub new { shift; bless { @_ }, "GLOBAL" }
13              
14             # use v6
15             ;
16             {
17             package Lit::Array;
18 26     26   29 sub new { shift; bless { @_ }, "Lit::Array" }
  26         76  
19             sub expand_interpolation {
20 26     26   24 my $self = $_[0];
21 26         32 ((my $needs_interpolation) = 0);
22 26         40 (my $List_items = bless [], 'ARRAY');
23 26 50 0     27 for my $item ( @{(defined $self->{array1} ? $self->{array1} : ($self->{array1} ||= bless([], 'ARRAY')))} ) {
  26         96  
24 26 100 66     54 if ((Main::isa($item, 'Apply') && ((($item->code() eq 'circumfix:<( )>') || ($item->code() eq 'list:<,>'))))) {
      66        
25 7         7 for my $arg ( @{(($item->arguments()))} ) {
  7         16  
26 15         8 push( @{$List_items}, $arg )
  15         27  
27             }
28             }
29             else {
30 19         18 push( @{$List_items}, $item )
  19         50  
31             }
32             };
33 26         29 for my $item ( @{$List_items} ) {
  26         30  
34 34 100 66     55 if (((Main::isa($item, 'Var') && ($item->sigil() eq chr(64))) || (Main::isa($item, 'Apply') && ((($item->code() eq 'prefix:<' . chr(64) . '>') || ($item->code() eq 'infix:<..>')))))) {
      100        
      66        
      66        
35 5         7 ($needs_interpolation = 1)
36             }
37             };
38 26 100 100     57 if (($needs_interpolation && (scalar( @{$List_items} ) == 1))) {
  5         15  
39 4         7 return scalar ($List_items->[0])
40             };
41 22         33 (my $List_s = bless [], 'ARRAY');
42 22         51 for my $item ( @{$List_items} ) {
  22         28  
43 30 100 66     53 if (((Main::isa($item, 'Var') && ($item->sigil() eq chr(64))) || (Main::isa($item, 'Apply') && ((($item->code() eq 'prefix:<' . chr(64) . '>') || ($item->code() eq 'infix:<..>')))))) {
      33        
      66        
      66        
44 1         2 push( @{$List_s}, Apply->new(('arguments' => do {
  1         2  
45 1         2 (my $List_a = bless [], 'ARRAY');
46 1         2 (my $List_v = bless [], 'ARRAY');
47 1         1 push( @{$List_a}, Var->new(('name' => 'v'), ('namespace' => ''), ('sigil' => chr(64)), ('twigil' => '')) );
  1         4  
48 1         2 push( @{$List_a}, $item );
  1         1  
49 1         4 $List_a
50             }), ('code' => 'infix:<' . chr(61) . '>'), ('namespace' => '')) );
51 1         4 push( @{$List_s}, For->new(('body' => Lit::Block->new(('sig' => Var->new(('name' => 'x'), ('namespace' => ''), ('sigil' => chr(36)), ('twigil' => ''))), ('stmts' => do {
52 1         2 (my $List_a = bless [], 'ARRAY');
53 1         1 (my $List_v = bless [], 'ARRAY');
54 1         1 push( @{$List_a}, Call->new(('arguments' => do {
  1         1  
55 1         2 (my $List_a = bless [], 'ARRAY');
56 1         1 (my $List_v = bless [], 'ARRAY');
57 1         2 push( @{$List_a}, Index->new(('index_exp' => Var->new(('name' => 'x'), ('namespace' => ''), ('sigil' => chr(36)), ('twigil' => ''))), ('obj' => Var->new(('name' => 'v'), ('namespace' => ''), ('sigil' => chr(64)), ('twigil' => '')))) );
  1         4  
58 1         5 $List_a
59             }), ('hyper' => ''), ('invocant' => Var->new(('name' => 'a'), ('namespace' => ''), ('sigil' => chr(64)), ('twigil' => ''))), ('method' => 'push')) );
60 1         3 $List_a
61 1         2 }))), ('cond' => Apply->new(('arguments' => do {
62 1         2 (my $List_a = bless [], 'ARRAY');
63 1         2 (my $List_v = bless [], 'ARRAY');
64 1         1 push( @{$List_a}, Val::Int->new(('int' => 0)) );
  1         4  
65 1         2 push( @{$List_a}, Apply->new(('arguments' => do {
  1         1  
66 1         2 (my $List_a = bless [], 'ARRAY');
67 1         4 (my $List_v = bless [], 'ARRAY');
68 1         1 push( @{$List_a}, Apply->new(('arguments' => do {
  1         2  
69 1         4 (my $List_a = bless [], 'ARRAY');
70 1         2 (my $List_v = bless [], 'ARRAY');
71 1         1 push( @{$List_a}, Call->new(('arguments' => do {
  1         1  
72 1         2 (my $List_a = bless [], 'ARRAY');
73 1         2 (my $List_v = bless [], 'ARRAY');
74 1         4 $List_a
75             }), ('hyper' => ''), ('invocant' => Var->new(('name' => 'v'), ('namespace' => ''), ('sigil' => chr(64)), ('twigil' => ''))), ('method' => 'elems')) );
76 1         2 push( @{$List_a}, Val::Int->new(('int' => 1)) );
  1         2  
77 1         6 $List_a
78             }), ('code' => 'infix:<->'), ('namespace' => '')) );
79 1         3 $List_a
80             }), ('code' => 'circumfix:<( )>'), ('namespace' => '')) );
81 1         2 $List_a
82             }), ('code' => 'infix:<..>'), ('namespace' => ''))), ('topic' => undef())) )
83             }
84             else {
85 29         27 push( @{$List_s}, Call->new(('arguments' => do {
  29         37  
86 29         38 (my $List_a = bless [], 'ARRAY');
87 29         27 (my $List_v = bless [], 'ARRAY');
88 29         24 push( @{$List_a}, $item );
  29         34  
89 29         91 $List_a
90             }), ('hyper' => ''), ('invocant' => Var->new(('name' => 'a'), ('namespace' => ''), ('sigil' => chr(64)), ('twigil' => ''))), ('method' => 'push')) )
91             }
92             };
93 22         33 return scalar (Do->new(('block' => Lit::Block->new(('sig' => undef()), ('stmts' => do {
94 22         34 (my $List_a = bless [], 'ARRAY');
95 22         25 (my $List_v = bless [], 'ARRAY');
96 22         24 push( @{$List_a}, Decl->new(('decl' => 'my'), ('type' => ''), ('var' => Var->new(('name' => 'a'), ('namespace' => ''), ('sigil' => chr(64)), ('twigil' => '')))) );
  22         65  
97 22         21 push( @{$List_a}, Decl->new(('decl' => 'my'), ('type' => ''), ('var' => Var->new(('name' => 'v'), ('namespace' => ''), ('sigil' => chr(64)), ('twigil' => '')))) );
  22         73  
98 22         25 ($List_v = $List_s);
99 22         27 for my $x ( @{(bless [0 .. ((scalar( @{$List_v} ) - 1))], 'ARRAY')} ) {
  22         25  
  22         48  
100 31         23 push( @{$List_a}, $List_v->[$x] )
  31         39  
101             };
102 22         27 push( @{$List_a}, Var->new(('name' => 'a'), ('namespace' => ''), ('sigil' => chr(64)), ('twigil' => '')) );
  22         49  
103 22         57 $List_a
104             })))))
105             }
106             }
107              
108             ;
109             {
110             package Lit::Hash;
111 4     4   5 sub new { shift; bless { @_ }, "Lit::Hash" }
  4         14  
112             sub expand_interpolation {
113 4     4   2 my $self = $_[0];
114 4         7 (my $List_items = bless [], 'ARRAY');
115 4 50 0     4 for my $item ( @{(defined $self->{hash1} ? $self->{hash1} : ($self->{hash1} ||= bless([], 'ARRAY')))} ) {
  4         22  
116 4 100 66     7 if ((Main::isa($item, 'Apply') && ((($item->code() eq 'circumfix:<( )>') || ($item->code() eq 'list:<,>'))))) {
      66        
117 1         2 for my $arg ( @{(($item->arguments()))} ) {
  1         3  
118 1         1 push( @{$List_items}, $arg )
  1         3  
119             }
120             }
121             else {
122 3         4 push( @{$List_items}, $item )
  3         4  
123             }
124             };
125 4         6 (my $List_s = bless [], 'ARRAY');
126 4         4 for my $item ( @{$List_items} ) {
  4         6  
127 4 100 66     6 if ((Main::isa($item, 'Apply') && ($item->code() eq 'infix:<' . chr(61) . '>>'))) {
128 2         1 push( @{$List_s}, Apply->new(('arguments' => do {
  2         3  
129 2         3 (my $List_a = bless [], 'ARRAY');
130 2         3 (my $List_v = bless [], 'ARRAY');
131 2         2 push( @{$List_a}, Lookup->new(('index_exp' => $item->arguments()->[0]), ('obj' => Var->new(('name' => 'a'), ('namespace' => ''), ('sigil' => chr(37)), ('twigil' => '')))) );
  2         4  
132 2         3 push( @{$List_a}, $item->arguments()->[1] );
  2         4  
133 2         5 $List_a
134             }), ('code' => 'infix:<' . chr(61) . '>'), ('namespace' => '')) )
135             }
136             else {
137 2 50 33     3 if (((Main::isa($item, 'Var') && ($item->sigil() eq chr(37))) || (Main::isa($item, 'Apply') && ($item->code() eq 'prefix:<' . chr(37) . '>')))) {
      0        
      33        
138 2         7 push( @{$List_s}, For->new(('body' => Lit::Block->new(('sig' => Var->new(('name' => 'p'), ('namespace' => ''), ('sigil' => chr(36)), ('twigil' => ''))), ('stmts' => do {
139 2         3 (my $List_a = bless [], 'ARRAY');
140 2         3 (my $List_v = bless [], 'ARRAY');
141 2         2 push( @{$List_a}, Apply->new(('arguments' => do {
  2         2  
142 2         1 (my $List_a = bless [], 'ARRAY');
143 2         2 (my $List_v = bless [], 'ARRAY');
144 2         3 push( @{$List_a}, Lookup->new(('index_exp' => Call->new(('arguments' => undef()), ('hyper' => ''), ('invocant' => Var->new(('name' => 'p'), ('namespace' => ''), ('sigil' => chr(36)), ('twigil' => ''))), ('method' => 'key'))), ('obj' => Var->new(('name' => 'a'), ('namespace' => ''), ('sigil' => chr(37)), ('twigil' => '')))) );
  2         7  
145 2         3 push( @{$List_a}, Call->new(('arguments' => do {
  2         2  
146 2         3 (my $List_a = bless [], 'ARRAY');
147 2         2 (my $List_v = bless [], 'ARRAY');
148 2         10 $List_a
149             }), ('hyper' => ''), ('invocant' => Var->new(('name' => 'p'), ('namespace' => ''), ('sigil' => chr(36)), ('twigil' => ''))), ('method' => 'value')) );
150 2         6 $List_a
151             }), ('code' => 'infix:<' . chr(61) . '>'), ('namespace' => '')) );
152 2         5 $List_a
153 2         3 }))), ('cond' => Apply->new(('arguments' => do {
154 2         3 (my $List_a = bless [], 'ARRAY');
155 2         2 (my $List_v = bless [], 'ARRAY');
156 2         3 push( @{$List_a}, Apply->new(('arguments' => do {
  2         1  
157 2         2 (my $List_a = bless [], 'ARRAY');
158 2         3 (my $List_v = bless [], 'ARRAY');
159 2         2 push( @{$List_a}, Call->new(('arguments' => undef()), ('hyper' => ''), ('invocant' => $item), ('method' => 'pairs')) );
  2         4  
160 2         3 $List_a
161             }), ('code' => 'circumfix:<( )>'), ('namespace' => '')) );
162 2         4 $List_a
163             }), ('code' => 'prefix:<' . chr(64) . '>'), ('namespace' => ''))), ('topic' => undef())) )
164             }
165             else {
166 0         0 die('Error in hash composer: ', Main::perl($item, ))
167             }
168             }
169             };
170 4         7 return scalar (Do->new(('block' => Lit::Block->new(('sig' => undef()), ('stmts' => do {
171 4         5 (my $List_a = bless [], 'ARRAY');
172 4         4 (my $List_v = bless [], 'ARRAY');
173 4         8 push( @{$List_a}, Decl->new(('decl' => 'my'), ('type' => ''), ('var' => Var->new(('name' => 'a'), ('namespace' => ''), ('sigil' => chr(37)), ('twigil' => '')))) );
  4         15  
174 4         6 ($List_v = $List_s);
175 4         3 for my $x ( @{(bless [0 .. ((scalar( @{$List_v} ) - 1))], 'ARRAY')} ) {
  4         5  
  4         10  
176 4         6 push( @{$List_a}, $List_v->[$x] )
  4         4  
177             };
178 4         4 push( @{$List_a}, Var->new(('name' => 'a'), ('namespace' => ''), ('sigil' => chr(37)), ('twigil' => '')) );
  4         11  
179 4         10 $List_a
180             })))))
181             }
182             }
183              
184             ;
185             {
186             package Apply;
187 1234     1234   1009 sub new { shift; bless { @_ }, "Apply" }
  1234         5161  
188             ((my $Hash_op = bless {}, 'HASH') = do {
189             (my $Hash_a = bless {}, 'HASH');
190             ($Hash_a->{'infix:<+' . chr(61) . '>'} = 'infix:<+>');
191             ($Hash_a->{'infix:<-' . chr(61) . '>'} = 'infix:<->');
192             ($Hash_a->{'infix:<*' . chr(61) . '>'} = 'infix:<*>');
193             ($Hash_a->{'infix:<' . chr(47) . chr(61) . '>'} = 'infix:<' . chr(47) . '>');
194             ($Hash_a->{'infix:<' . chr(124) . chr(124) . chr(61) . '>'} = 'infix:<' . chr(124) . chr(124) . '>');
195             ($Hash_a->{'infix:<' . chr(38) . chr(38) . chr(61) . '>'} = 'infix:<' . chr(38) . chr(38) . '>');
196             ($Hash_a->{'infix:<' . chr(124) . chr(61) . '>'} = 'infix:<' . chr(124) . '>');
197             ($Hash_a->{'infix:<' . chr(38) . chr(61) . '>'} = 'infix:<' . chr(38) . '>');
198             ($Hash_a->{'infix:<' . chr(47) . chr(47) . chr(61) . '>'} = 'infix:<' . chr(47) . chr(47) . '>');
199             ($Hash_a->{'infix:<' . chr(126) . chr(61) . '>'} = 'list:<' . chr(126) . '>');
200             $Hash_a
201             });
202             sub op_assign {
203 1012     1012   709 my $self = $_[0];
204 1012         1193 ((my $code) = $self->{code});
205 1012 50       1455 if (Main::isa($code, 'Str')) {
206              
207             }
208             else {
209 0         0 return scalar (0)
210             };
211 1012 50       1667 if (exists($Hash_op->{$code})) {
212 0         0 return scalar (Apply->new(('code' => 'infix:<' . chr(61) . '>'), ('arguments' => do {
213 0         0 (my $List_a = bless [], 'ARRAY');
214 0         0 (my $List_v = bless [], 'ARRAY');
215 0 0 0     0 push( @{$List_a}, (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY')))->[0] );
  0         0  
216 0 0 0     0 push( @{$List_a}, Apply->new(('code' => $Hash_op->{$code}), ('arguments' => (defined $self->{arguments} ? $self->{arguments} : ($self->{arguments} ||= bless([], 'ARRAY'))))) );
  0         0  
217 0         0 $List_a
218             })))
219             };
220 1012         1375 return scalar (0)
221             }
222             }
223              
224             ;
225             {
226             package Do;
227 188     188   164 sub new { shift; bless { @_ }, "Do" }
  188         559  
228             sub simplify {
229 123     123   89 my $self = $_[0];
230 123         93 (my $block);
231 123 100       228 if (Main::isa($self->{block}, 'Lit::Block')) {
232 70         141 ($block = $self->{block}->stmts())
233             }
234             else {
235 53         45 ($block = do {
236 53         70 (my $List_a = bless [], 'ARRAY');
237 53         62 (my $List_v = bless [], 'ARRAY');
238 53         43 push( @{$List_a}, $self->{block} );
  53         70  
239 53         68 $List_a
240             })
241             };
242 123 100       104 if ((scalar( @{$block} ) == 1)) {
  123         217  
243 71         75 ((my $stmt) = $block->[0]);
244 71 100 100     103 if ((Main::isa($stmt, 'Apply') && ($stmt->code() eq 'circumfix:<( )>'))) {
245 16         27 ((my $args) = $stmt->arguments());
246 16         30 return scalar (Do->new(('block' => $args->[0]))->simplify())
247             };
248 55 100       87 if (Main::isa($stmt, 'Do')) {
249 42         86 return scalar ($stmt->simplify())
250             }
251             };
252 65         140 return scalar (Do->new(('block' => $block)))
253             }
254             }
255              
256              
257             }
258              
259             1;