File Coverage

blib/lib/Perlito/Expression.pm
Criterion Covered Total %
statement 1269 1648 77.0
branch 300 486 61.7
condition 263 540 48.7
subroutine 30 34 88.2
pod 0 21 0.0
total 1862 2729 68.2


line stmt bran cond sub pod time code
1             # Do not edit this file - Generated by Perlito 7.0
2 31     31   353 use v5;
  31         102  
  31         1469  
3 31     31   164 use utf8;
  31         59  
  31         183  
4 31     31   951 use strict;
  31         72  
  31         1038  
5 31     31   154 use warnings;
  31         72  
  31         1313  
6 31     31   433 no warnings ('redefine', 'once', 'void', 'uninitialized', 'misc', 'recursion');
  31         58  
  31         1469  
7 31     31   222 use Perlito::Perl5::Runtime;
  31         62  
  31         760  
8 31     31   155 use Perlito::Perl5::Prelude;
  31         54  
  31         5320  
9             our $MATCH = Perlito::Match->new();
10             {
11             package GLOBAL;
12             sub new { shift; bless { @_ }, "GLOBAL" }
13             {
14             package Perlito::Expression;
15 0     0 0 0 sub new { shift; bless { @_ }, "Perlito::Expression" }
  0         0  
16 31     31   20930 use Perlito::Precedence;
  31         125  
  31         2100  
17 31     31   349 use Perlito::Grammar;
  31         51  
  31         972  
18 31     31   169 use Perlito::Perl5::Emitter;
  31         51  
  31         930659  
19             sub expand_list {
20 545     545 0 1197 my $param_list = $_[0];
21 545 100 100     1842 if (((Main::isa($param_list, 'Apply')) && ((($param_list->code()) eq 'list:<,>')))) {
22 154         325 ((my $args) = do {
23 154         493 (my $List_a = bless [], 'ARRAY');
24 154         486 (my $List_v = bless [], 'ARRAY');
25 154         421 $List_a
26             });
27 154         252 for my $v ( @{(($param_list->arguments()))} ) {
  154         615  
28 346 50       766 if (defined($v)) {
29 346         420 push( @{$args}, $v )
  346         868  
30             }
31             };
32 154         548 return scalar ($args)
33             }
34             else {
35 391 100       1479 if (($param_list eq '*undef*')) {
36 30         55 return scalar (do {
37 30         98 (my $List_a = bless [], 'ARRAY');
38 30         86 (my $List_v = bless [], 'ARRAY');
39 30         100 $List_a
40             })
41             }
42             else {
43 361         590 return scalar (do {
44 361         1115 (my $List_a = bless [], 'ARRAY');
45 361         906 (my $List_v = bless [], 'ARRAY');
46 361         605 push( @{$List_a}, $param_list );
  361         792  
47 361         1095 $List_a
48             })
49             }
50             }
51             };
52             sub block_or_hash {
53 57     57 0 126 my $o = $_[0];
54 57 50       240 if (defined($o->sig())) {
55 0         0 return scalar ($o)
56             };
57 57         229 ((my $stmts) = $o->stmts());
58 57 100 66     239 if (((!((defined($stmts)))) || (((scalar( @{$stmts} )) == 0)))) {
  57         733  
59 1         3 return scalar (Lit::Hash->new(('hash1' => do {
60 1         3 (my $List_a = bless [], 'ARRAY');
61 1         2 (my $List_v = bless [], 'ARRAY');
62 1         11 $List_a
63             })))
64             };
65 56 100       86 if (((scalar( @{$stmts} )) != 1)) {
  56         600  
66 26         71 return scalar ($o)
67             };
68 30         67 ((my $stmt) = $stmts->[0]);
69 30 100       126 if (!((Main::isa($stmt, 'Apply')))) {
70 8         25 return scalar ($o)
71             };
72 22 50       107 if ((($stmt->code()) eq 'infix:<' . chr(61) . '>>')) {
73 0         0 return scalar (Lit::Hash->new(('hash1' => do {
74 0         0 (my $List_a = bless [], 'ARRAY');
75 0         0 (my $List_v = bless [], 'ARRAY');
76 0         0 push( @{$List_a}, $stmt );
  0         0  
77 0         0 $List_a
78             })))
79             };
80 22 100       74 if ((($stmt->code()) ne 'list:<,>')) {
81 21         55 return scalar ($o)
82             };
83 1         2 for my $item ( @{(($stmt->arguments()))} ) {
  1         7  
84 2 100 66     8 if ((Main::isa($item, 'Apply') && (($item->code()) eq 'infix:<' . chr(61) . '>>'))) {
85 1         7 return scalar (Lit::Hash->new(('hash1' => expand_list($stmt))))
86             }
87             };
88 0         0 return scalar ($o)
89             };
90             sub pop_term {
91 2829     2829 0 4372 my $num_stack = $_[0];
92 2829         3515 ((my $v) = pop( @{$num_stack} ));
  2829         5902  
93 2829 100       9458 if (Main::isa($v, 'Array')) {
94 1975 50       6756 if (($v->[1] eq 'methcall_no_params')) {
95 0         0 ($v = Call->new(('invocant' => undef()), ('method' => $v->[2]), ('hyper' => $v->[3])));
96 0         0 return scalar ($v)
97             };
98 1975 100       5373 if (($v->[1] eq 'funcall_no_params')) {
99 24         158 ($v = Apply->new(('code' => $v->[3]), ('namespace' => $v->[2])));
100 24         191 return scalar ($v)
101             };
102 1951 50       5315 if (($v->[1] eq 'methcall')) {
103 0 0       0 if (($v->[3])->{'end_block'}) {
104 0         0 unshift( @{$num_stack}, ($v->[3])->{'end_block'} )
  0         0  
105             };
106 0         0 ((my $param_list) = expand_list(($v->[3])->{'exp'}));
107 0         0 ($v = Call->new(('invocant' => undef()), ('method' => $v->[2]), ('arguments' => $param_list), ('hyper' => $v->[4])));
108 0         0 return scalar ($v)
109             };
110 1951 100       5317 if (($v->[1] eq 'funcall')) {
111 294 50       1176 if (($v->[4])->{'end_block'}) {
112 0         0 unshift( @{$num_stack}, ($v->[4])->{'end_block'} )
  0         0  
113             };
114 294         1436 ((my $param_list) = expand_list(($v->[4])->{'exp'}));
115 294         2328 ($v = Apply->new(('code' => $v->[3]), ('arguments' => $param_list), ('namespace' => $v->[2])));
116 294         1533 return scalar ($v)
117             };
118 1657 100       4815 if (($v->[1] eq '( )')) {
119 152         596 ((my $param_list) = expand_list($v->[2]));
120 152         888 ($v = Apply->new(('code' => 'circumfix:<( )>'), ('arguments' => $param_list), ('namespace' => '')));
121 152         543 return scalar ($v)
122             };
123 1505 100       5078 if (($v->[1] eq '[ ]')) {
124 12         57 ((my $param_list) = expand_list($v->[2]));
125 12         109 ($v = Lit::Array->new(('array1' => $param_list)));
126 12         44 return scalar ($v)
127             };
128 1493 100       4304 if (($v->[1] eq 'block')) {
129 57         533 ($v = Lit::Block->new(('stmts' => $v->[2]), ('sig' => $v->[3])));
130 57         303 ($v = block_or_hash($v));
131 57         200 return scalar ($v)
132             };
133 1436 50       4132 if (($v->[1] eq '.( )')) {
134 0         0 ($v = Call->new(('invocant' => undef()), ('method' => 'postcircumfix:<( )>'), ('arguments' => $v->[2]), ('hyper' => 0)));
135 0         0 return scalar ($v)
136             };
137 1436 50       4064 if (($v->[1] eq '.[ ]')) {
138 0         0 ($v = Index->new(('obj' => undef()), ('index_exp' => $v->[2])));
139 0         0 return scalar ($v)
140             };
141 1436 50       5504 if (($v->[1] eq '.' . chr(123) . ' ' . chr(125))) {
142 0         0 ($v = Lookup->new(('obj' => undef()), ('index_exp' => $v->[2])));
143 0         0 return scalar ($v)
144             };
145 1436 50 33     5035 if ((Main::isa(($v->[1]), 'Array') && (((scalar( @{($v->[1])} )) == 2)))) {
  0         0  
146 0         0 ($v = Apply->new(('code' => 'pair'), ('arguments' => $v->[1]), ('namespace' => '')));
147 0         0 return scalar ($v)
148             };
149 1436         7072 return scalar ($v->[1])
150             };
151 854         2468 return scalar ($v)
152             };
153             sub reduce_postfix {
154 205     205 0 443 my $op = $_[0];
155 205         370 my $value = $_[1];
156 205         357 ((my $v) = $op);
157 205 100       784 if (($v->[1] eq 'methcall_no_params')) {
158 77         598 ($v = Call->new(('invocant' => $value), ('method' => $v->[2]), ('hyper' => $v->[3])));
159 77         385 return scalar ($v)
160             };
161 128 50       411 if (($v->[1] eq 'funcall_no_params')) {
162 0         0 die(('unexpected function call'));
163 0         0 push( @{$v}, $value );
  0         0  
164 0         0 return scalar ($v)
165             };
166 128 100       424 if (($v->[1] eq 'methcall')) {
167 31         173 ((my $param_list) = expand_list(($v->[3])->{'exp'}));
168 31         273 ($v = Call->new(('invocant' => $value), ('method' => $v->[2]), ('arguments' => $param_list), ('hyper' => $v->[4])));
169 31         156 return scalar ($v)
170             };
171 97 50       303 if (($v->[1] eq 'funcall')) {
172 0         0 die(('unexpected function call'));
173 0         0 push( @{$v}, $value );
  0         0  
174 0         0 return scalar ($v)
175             };
176 97 100       298 if (($v->[1] eq '( )')) {
177 24         111 ((my $param_list) = expand_list($v->[2]));
178 24 50 33     102 if ((Main::isa($value, 'Apply') && !((defined($value->arguments()))))) {
179 24         59 (($value)->{arguments} = $param_list);
180 24         114 return scalar ($value)
181             };
182 0 0 0     0 if ((Main::isa($value, 'Call') && !((defined($value->arguments()))))) {
183 0         0 (($value)->{arguments} = $param_list);
184 0         0 return scalar ($value)
185             };
186 0         0 ($v = Call->new(('invocant' => $value), ('method' => 'postcircumfix:<( )>'), ('arguments' => $param_list), ('hyper' => 0)));
187 0         0 return scalar ($v)
188             };
189 73 100       221 if (($v->[1] eq '[ ]')) {
190 37         256 ($v = Index->new(('obj' => $value), ('index_exp' => $v->[2])));
191 37         160 return scalar ($v)
192             };
193 36 100       113 if (($v->[1] eq 'block')) {
194 29         350 ($v = Lookup->new(('obj' => $value), ('index_exp' => ($v->[2])->[0])));
195 29         129 return scalar ($v)
196             };
197 7 50       22 if (($v->[1] eq '.( )')) {
198 7         25 ((my $param_list) = expand_list($v->[2]));
199 7         72 ($v = Call->new(('invocant' => $value), ('method' => 'postcircumfix:<( )>'), ('arguments' => $param_list), ('hyper' => 0)));
200 7         38 return scalar ($v)
201             };
202 0 0       0 if (($v->[1] eq '.[ ]')) {
203 0         0 ($v = Call->new(('invocant' => $value), ('method' => 'postcircumfix:<[ ]>'), ('arguments' => $v->[2]), ('hyper' => 0)));
204 0         0 return scalar ($v)
205             };
206 0 0       0 if (($v->[1] eq '.' . chr(123) . ' ' . chr(125))) {
207 0         0 ($v = Call->new(('invocant' => $value), ('method' => 'postcircumfix:<' . chr(123) . ' ' . chr(125) . '>'), ('arguments' => $v->[2]), ('hyper' => 0)));
208 0         0 return scalar ($v)
209             };
210 0         0 push( @{$op}, $value );
  0         0  
211 0         0 return scalar ($op)
212             };
213             ((my $reduce_to_ast) = sub {
214             my $op_stack = $_[0];
215             my $num_stack = $_[1];
216             ((my $last_op) = shift( @{$op_stack} ));
217             if (($last_op->[0] eq 'prefix')) {
218             push( @{$num_stack}, Apply->new(('namespace' => ''), ('code' => ('prefix:<' . $last_op->[1] . '>')), ('arguments' => do {
219             (my $List_a = bless [], 'ARRAY');
220             (my $List_v = bless [], 'ARRAY');
221             push( @{$List_a}, pop_term($num_stack) );
222             $List_a
223             })) )
224             }
225             else {
226             if (($last_op->[0] eq 'postfix')) {
227             push( @{$num_stack}, Apply->new(('namespace' => ''), ('code' => ('postfix:<' . $last_op->[1] . '>')), ('arguments' => do {
228             (my $List_a = bless [], 'ARRAY');
229             (my $List_v = bless [], 'ARRAY');
230             push( @{$List_a}, pop_term($num_stack) );
231             $List_a
232             })) )
233             }
234             else {
235             if (($last_op->[0] eq 'postfix_or_term')) {
236             push( @{$num_stack}, reduce_postfix($last_op, pop_term($num_stack)) )
237             }
238             else {
239             if (Perlito::Precedence::is_assoc_type('list', $last_op->[1])) {
240             (my $arg);
241             if ((scalar( @{$num_stack} ) < 2)) {
242             ((my $v2) = pop_term($num_stack));
243             if (((Main::isa($v2, 'Apply')) && (($v2->code() eq (('list:<' . $last_op->[1] . '>')))))) {
244             push( @{($v2->arguments())}, undef() );
245             push( @{$num_stack}, $v2 )
246             }
247             else {
248             push( @{$num_stack}, Apply->new(('namespace' => ''), ('code' => ('list:<' . $last_op->[1] . '>')), ('arguments' => do {
249             (my $List_a = bless [], 'ARRAY');
250             (my $List_v = bless [], 'ARRAY');
251             push( @{$List_a}, $v2 );
252             push( @{$List_a}, undef() );
253             $List_a
254             })) )
255             };
256             return ()
257             }
258             else {
259             ((my $v2) = pop_term($num_stack));
260             ($arg = do {
261             (my $List_a = bless [], 'ARRAY');
262             (my $List_v = bless [], 'ARRAY');
263             push( @{$List_a}, pop_term($num_stack) );
264             push( @{$List_a}, $v2 );
265             $List_a
266             })
267             };
268             if ((((Main::isa(($arg->[0]), 'Apply')) && (($last_op->[0] eq 'infix'))) && ((($arg->[0])->code() eq (('list:<' . $last_op->[1] . '>')))))) {
269             push( @{$num_stack}, Apply->new(('namespace' => ''), ('code' => ($arg->[0])->code()), ('arguments' => do {
270             (my $List_a = bless [], 'ARRAY');
271             (my $List_v = bless [], 'ARRAY');
272             ($List_v = ((($arg->[0])->arguments())));
273             for my $x ( @{(bless [0 .. ((scalar( @{$List_v} ) - 1))], 'ARRAY')} ) {
274             push( @{$List_a}, $List_v->[$x] )
275             };
276             push( @{$List_a}, $arg->[1] );
277             $List_a
278             })) );
279             return ()
280             };
281             push( @{$num_stack}, Apply->new(('namespace' => ''), ('code' => ('list:<' . $last_op->[1] . '>')), ('arguments' => $arg)) )
282             }
283             else {
284             if (Perlito::Precedence::is_assoc_type('chain', $last_op->[1])) {
285             if ((scalar( @{$num_stack} ) < 2)) {
286             die(('Missing value after operator ' . $last_op->[1]))
287             };
288             ((my $v2) = pop_term($num_stack));
289             ((my $arg) = do {
290             (my $List_a = bless [], 'ARRAY');
291             (my $List_v = bless [], 'ARRAY');
292             push( @{$List_a}, pop_term($num_stack) );
293             push( @{$List_a}, $v2 );
294             $List_a
295             });
296             push( @{$num_stack}, Apply->new(('namespace' => ''), ('code' => ('infix:<' . $last_op->[1] . '>')), ('arguments' => $arg)) )
297             }
298             else {
299             if (($last_op->[0] eq 'ternary')) {
300             if (((scalar( @{$num_stack} ) < 2))) {
301             die(('Missing value after ternary operator'))
302             };
303             ((my $v2) = pop_term($num_stack));
304             push( @{$num_stack}, Apply->new(('namespace' => ''), ('code' => ('ternary:<' . $last_op->[1] . '>')), ('arguments' => do {
305             (my $List_a = bless [], 'ARRAY');
306             (my $List_v = bless [], 'ARRAY');
307             push( @{$List_a}, pop_term($num_stack) );
308             push( @{$List_a}, $last_op->[2] );
309             push( @{$List_a}, $v2 );
310             $List_a
311             })) )
312             }
313             else {
314             if (((scalar( @{$num_stack} ) < 2))) {
315             die(('missing value after operator ' . chr(39) . $last_op->[1] . (chr(39))))
316             };
317             ((my $v2) = pop_term($num_stack));
318             push( @{$num_stack}, Apply->new(('namespace' => ''), ('code' => ('infix:<' . $last_op->[1] . '>')), ('arguments' => do {
319             (my $List_a = bless [], 'ARRAY');
320             (my $List_v = bless [], 'ARRAY');
321             push( @{$List_a}, pop_term($num_stack) );
322             push( @{$List_a}, $v2 );
323             $List_a
324             })) )
325             }
326             }
327             }
328             }
329             }
330             }
331             });
332             sub capture_name {
333 0     0 0 0 my $grammar = $_[0];
334 0         0 my $str = $_[1];
335 0         0 my $pos = $_[2];
336 0         0 (my $MATCH);
337 0         0 ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
338 0         0 (($MATCH)->{bool} = ((do {
339 0         0 ((my $pos1) = $MATCH->to());
340 0         0 (do {
341             ((do {
342 0         0 ((my $m2) = Perlito::Grammar->full_ident($str, $MATCH->to()));
343 0 0       0 if ($m2) {
344 0         0 (($MATCH)->{to} = $m2->to());
345 0         0 ($MATCH->{'Perlito::Grammar.full_ident'} = $m2);
346 0         0 1
347             }
348             else {
349 0         0 0
350             }
351 0 0       0 }) && (do {
352 0         0 ((my $last_pos) = $MATCH->to());
353 0 0       0 if (!((do {
354 0         0 ((my $pos1) = $MATCH->to());
355 0         0 (do {
356 0 0 0     0 (((('.' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
357 0         0 ((my $m2) = Perlito::Grammar->ident($str, $MATCH->to()));
358 0 0       0 if ($m2) {
359 0         0 (($MATCH)->{to} = $m2->to());
360 0 0       0 if (exists($MATCH->{'Perlito::Grammar.ident'})) {
361 0         0 push( @{($MATCH->{'Perlito::Grammar.ident'})}, $m2 )
  0         0  
362             }
363             else {
364 0         0 ($MATCH->{'Perlito::Grammar.ident'} = do {
365 0         0 (my $List_a = bless [], 'ARRAY');
366 0         0 (my $List_v = bless [], 'ARRAY');
367 0         0 push( @{$List_a}, $m2 );
  0         0  
368 0         0 $List_a
369             })
370             };
371 0         0 1
372             }
373             else {
374 0         0 0
375             }
376             }))
377             })
378             }))) {
379 0         0 (($MATCH)->{to} = $last_pos)
380             };
381 0         0 1
382             }))
383             })
384             })));
385 0         0 $MATCH
386             };
387             sub hyper_op {
388 108     108 0 241 my $grammar = $_[0];
389 108         219 my $str = $_[1];
390 108         177 my $pos = $_[2];
391 108         188 (my $MATCH);
392 108         521 ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
393 108         184 (($MATCH)->{bool} = ((do {
394 108         370 ((my $pos1) = $MATCH->to());
395 108         208 (do {
396 108         325 ((my $last_pos) = $MATCH->to());
397 108 100       186 if (!((do {
398 108 100       363 (('>>' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))
399             }))) {
400 107         243 (($MATCH)->{to} = $last_pos)
401             };
402 108         1865 1
403             })
404             })));
405 108         1414 $MATCH
406             };
407             sub operator {
408 5966     5966 0 10881 my $grammar = $_[0];
409 5966         11870 my $str = $_[1];
410 5966         8620 my $pos = $_[2];
411 5966         6499 (my $MATCH);
412 5966         24113 ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
413 5966         9056 (($MATCH)->{bool} = ((do {
414 5966         20511 ((my $pos1) = $MATCH->to());
415             ((((((((((((((((((((((((((((((do {
416             (((((('.(' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))) && (do {
417 7         24 ((my $m2) = $grammar->paren_parse($str, $MATCH->to()));
418 7 50       27 if ($m2) {
419 7         27 (($MATCH)->{to} = $m2->to());
420 7         14 ($MATCH->{'paren_parse'} = $m2);
421 7         44 1
422             }
423             else {
424 0         0 0
425             }
426 5966 50 50     23446 })) && (((')' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
      66        
      66        
      33        
      33        
427 7         12 ($MATCH->{capture} = (do {
428 7         21 (my $List_a = bless [], 'ARRAY');
429 7         18 (my $List_v = bless [], 'ARRAY');
430 7         8 push( @{$List_a}, 'postfix_or_term' );
  7         19  
431 7         11 push( @{$List_a}, '.( )' );
  7         22  
432 7         11 push( @{$List_a}, ${$MATCH->{'paren_parse'}} );
  7         13  
  7         22  
433 7         32 $List_a
434             }))
435             }) || 1)))
436             }) || (do {
437 5959         31981 (($MATCH)->{to} = $pos1);
438             ((((((('.[' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))) && (do {
439 0         0 ((my $m2) = $grammar->square_parse($str, $MATCH->to()));
440 0 0       0 if ($m2) {
441 0         0 (($MATCH)->{to} = $m2->to());
442 0         0 ($MATCH->{'square_parse'} = $m2);
443 0         0 1
444             }
445             else {
446 0         0 0
447             }
448 5959 0 0     16749 })) && (((']' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
      33        
      33        
      0        
      0        
449 0         0 ($MATCH->{capture} = (do {
450 0         0 (my $List_a = bless [], 'ARRAY');
451 0         0 (my $List_v = bless [], 'ARRAY');
452 0         0 push( @{$List_a}, 'postfix_or_term' );
  0         0  
453 0         0 push( @{$List_a}, '.[ ]' );
  0         0  
454 0         0 push( @{$List_a}, ${$MATCH->{'square_parse'}} );
  0         0  
  0         0  
455 0         0 $List_a
456             }))
457             }) || 1))))
458             })) || (do {
459 5959         11408 (($MATCH)->{to} = $pos1);
460             ((((((('.' . chr(123) eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))) && (do {
461 0         0 ((my $m2) = $grammar->curly_parse($str, $MATCH->to()));
462 0 0       0 if ($m2) {
463 0         0 (($MATCH)->{to} = $m2->to());
464 0         0 ($MATCH->{'curly_parse'} = $m2);
465 0         0 1
466             }
467             else {
468 0         0 0
469             }
470 5959 0 0     18169 })) && (((chr(125) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
      33        
      33        
      0        
      0        
471 0         0 ($MATCH->{capture} = (do {
472 0         0 (my $List_a = bless [], 'ARRAY');
473 0         0 (my $List_v = bless [], 'ARRAY');
474 0         0 push( @{$List_a}, 'postfix_or_term' );
  0         0  
475 0         0 push( @{$List_a}, 'block' );
  0         0  
476 0         0 push( @{$List_a}, ${$MATCH->{'curly_parse'}} );
  0         0  
  0         0  
477 0         0 $List_a
478             }))
479             }) || 1))))
480             })) || (do {
481 5959         10413 (($MATCH)->{to} = $pos1);
482             ((((((('(' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
483 176         651 ((my $m2) = $grammar->paren_parse($str, $MATCH->to()));
484 176 50       775 if ($m2) {
485 176         659 (($MATCH)->{to} = $m2->to());
486 176         504 ($MATCH->{'paren_parse'} = $m2);
487 176         1144 1
488             }
489             else {
490 0         0 0
491             }
492 5959 50 50     15936 })) && (((')' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
      66        
      66        
      33        
      33        
493 176         291 ($MATCH->{capture} = (do {
494 176         526 (my $List_a = bless [], 'ARRAY');
495 176         421 (my $List_v = bless [], 'ARRAY');
496 176         270 push( @{$List_a}, 'postfix_or_term' );
  176         513  
497 176         268 push( @{$List_a}, '( )' );
  176         367  
498 176         272 push( @{$List_a}, ${$MATCH->{'paren_parse'}} );
  176         293  
  176         636  
499 176         1054 $List_a
500             }))
501             }) || 1))))
502             })) || (do {
503 5783         10060 (($MATCH)->{to} = $pos1);
504             ((((((('[' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
505 49         177 ((my $m2) = $grammar->square_parse($str, $MATCH->to()));
506 49 50       194 if ($m2) {
507 49         170 (($MATCH)->{to} = $m2->to());
508 49         135 ($MATCH->{'square_parse'} = $m2);
509 49         309 1
510             }
511             else {
512 0         0 0
513             }
514 5783 50 50     16669 })) && (((']' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
      66        
      66        
      33        
      33        
515 49         75 ($MATCH->{capture} = (do {
516 49         155 (my $List_a = bless [], 'ARRAY');
517 49         114 (my $List_v = bless [], 'ARRAY');
518 49         84 push( @{$List_a}, 'postfix_or_term' );
  49         127  
519 49         70 push( @{$List_a}, '[ ]' );
  49         131  
520 49         83 push( @{$List_a}, ${$MATCH->{'square_parse'}} );
  49         83  
  49         173  
521 49         421 $List_a
522             }))
523             }) || 1))))
524             })) || (do {
525 5734         10126 (($MATCH)->{to} = $pos1);
526             (((((do {
527 5734         15517 ((my $pos1) = $MATCH->to());
528             ((do {
529 5734 50       14699 (('.<' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))
530 5734 50       8363 }) || (do {
531 5734         10714 (($MATCH)->{to} = $pos1);
532 5734 100       16553 (((('<' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
533             }))
534             }) && (do {
535 5         21 ((my $m2) = Perlito::Grammar->ident($str, $MATCH->to()));
536 5 50       18 if ($m2) {
537 0         0 (($MATCH)->{to} = $m2->to());
538 0         0 ($MATCH->{'Perlito::Grammar.ident'} = $m2);
539 0         0 1
540             }
541             else {
542 5         42 0
543             }
544 5734 0 0     6910 })) && ((('>' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
      66        
      0        
      33        
545 0         0 ($MATCH->{capture} = (do {
546 0         0 (my $List_a = bless [], 'ARRAY');
547 0         0 (my $List_v = bless [], 'ARRAY');
548 0         0 push( @{$List_a}, 'postfix_or_term' );
  0         0  
549 0         0 push( @{$List_a}, 'block' );
  0         0  
550 0         0 push( @{$List_a}, do {
  0         0  
551 0         0 (my $List_a = bless [], 'ARRAY');
552 0         0 (my $List_v = bless [], 'ARRAY');
553 0         0 push( @{$List_a}, Val::Buf->new(('buf' => ${$MATCH->{'Perlito::Grammar.ident'}})) );
  0         0  
  0         0  
554 0         0 $List_a
555             } );
556 0         0 $List_a
557             }))
558             }) || 1))))
559             })) || (do {
560 5734         22570 (($MATCH)->{to} = $pos1);
561             ((((((('->' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))) && (do {
562 3         11 ((my $last_pos) = $MATCH->to());
563 3 50       5 if (!((do {
564 3         11 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
565 3 50       8 if ($m2) {
566 3         11 (($MATCH)->{to} = $m2->to());
567 3         14 1
568             }
569             else {
570 0         0 0
571             }
572             }))) {
573 0         0 (($MATCH)->{to} = $last_pos)
574             };
575 3         15 1
576             })) && (do {
577 3         11 ((my $m2) = $grammar->list_parse($str, $MATCH->to()));
578 3 50       12 if ($m2) {
579 3         10 (($MATCH)->{to} = $m2->to());
580 3         6 ($MATCH->{'list_parse'} = $m2);
581 3         13 1
582             }
583             else {
584 0         0 0
585             }
586 5734 50 50     16695 })) && (((do {
      66        
      66        
      33        
587 3         4 ((my $block) = (${$MATCH->{'list_parse'}})->{'end_block'});
  3         20  
588 3 50       12 if ($block->sig()) {
589 0         0 die(('Signature error in block'))
590             };
591 3         6 ($MATCH->{capture} = (do {
592 3         7 (my $List_a = bless [], 'ARRAY');
593 3         7 (my $List_v = bless [], 'ARRAY');
594 3         4 push( @{$List_a}, 'postfix_or_term' );
  3         6  
595 3         4 push( @{$List_a}, 'block' );
  3         7  
596 3         4 push( @{$List_a}, $block->stmts() );
  3         11  
597 3         6 push( @{$List_a}, (${$MATCH->{'list_parse'}})->{'exp'} );
  3         4  
  3         10  
598 3         14 $List_a
599             }))
600             }) || 1))))
601             })) || (do {
602 5731         9840 (($MATCH)->{to} = $pos1);
603             (((((((((chr(123) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
604 176         637 ((my $last_pos) = $MATCH->to());
605 176 100       310 if (!((do {
606 176         869 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
607 176 100       598 if ($m2) {
608 146         586 (($MATCH)->{to} = $m2->to());
609 146         702 1
610             }
611             else {
612 30         130 0
613             }
614             }))) {
615 30         61 (($MATCH)->{to} = $last_pos)
616             };
617 176         853 1
618             })) && (do {
619 176         788 ((my $m2) = Perlito::Grammar->exp_stmts($str, $MATCH->to()));
620 176 50       563 if ($m2) {
621 176         645 (($MATCH)->{to} = $m2->to());
622 176         483 ($MATCH->{'Perlito::Grammar.exp_stmts'} = $m2);
623 176         803 1
624             }
625             else {
626 0         0 0
627             }
628             })) && (do {
629 176         619 ((my $last_pos) = $MATCH->to());
630 176 50       356 if (!((do {
631 176         652 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
632 176 50       547 if ($m2) {
633 0         0 (($MATCH)->{to} = $m2->to());
634 0         0 1
635             }
636             else {
637 176         827 0
638             }
639             }))) {
640 176         388 (($MATCH)->{to} = $last_pos)
641             };
642 176         1342 1
643 5731 50 50     15611 })) && (((chr(125) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
      66        
      66        
      33        
      33        
      33        
      33        
644 176         323 ($MATCH->{capture} = (do {
645 176         4803 (my $List_a = bless [], 'ARRAY');
646 176         463 (my $List_v = bless [], 'ARRAY');
647 176         309 push( @{$List_a}, 'postfix_or_term' );
  176         463  
648 176         282 push( @{$List_a}, 'block' );
  176         363  
649 176         307 push( @{$List_a}, ${$MATCH->{'Perlito::Grammar.exp_stmts'}} );
  176         519  
  176         630  
650 176         903 $List_a
651             }))
652             }) || 1))))
653             })) || (do {
654 5555         11989 (($MATCH)->{to} = $pos1);
655             ((((((('method' eq substr($str, $MATCH->to(), 6)) && ((($MATCH)->{to} = (6 + $MATCH->to()))))) && (do {
656 8         39 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
657 8 50       25 if ($m2) {
658 8         33 (($MATCH)->{to} = $m2->to());
659 8         45 1
660             }
661             else {
662 0         0 0
663             }
664             })) && (do {
665 8         30 ((my $m2) = Perlito::Grammar->method_def($str, $MATCH->to()));
666 8 50       28 if ($m2) {
667 8         31 (($MATCH)->{to} = $m2->to());
668 8         25 ($MATCH->{'Perlito::Grammar.method_def'} = $m2);
669 8         45 1
670             }
671             else {
672 0         0 0
673             }
674 5555 50 50     15042 })) && (((do {
      66        
      66        
      33        
675 8         13 ($MATCH->{capture} = (do {
676 8         23 (my $List_a = bless [], 'ARRAY');
677 8         22 (my $List_v = bless [], 'ARRAY');
678 8         12 push( @{$List_a}, 'term' );
  8         21  
679 8         14 push( @{$List_a}, ${$MATCH->{'Perlito::Grammar.method_def'}} );
  8         12  
  8         29  
680 8         40 $List_a
681             }))
682             }) || 1))))
683             })) || (do {
684 5547         9253 (($MATCH)->{to} = $pos1);
685             ((((((('sub' eq substr($str, $MATCH->to(), 3)) && ((($MATCH)->{to} = (3 + $MATCH->to()))))) && (do {
686 29         106 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
687 29 100       88 if ($m2) {
688 12         47 (($MATCH)->{to} = $m2->to());
689 12         175 1
690             }
691             else {
692 17         126 0
693             }
694             })) && (do {
695 12         51 ((my $m2) = Perlito::Grammar->sub_def($str, $MATCH->to()));
696 12 50       45 if ($m2) {
697 12         46 (($MATCH)->{to} = $m2->to());
698 12         39 ($MATCH->{'Perlito::Grammar.sub_def'} = $m2);
699 12         54 1
700             }
701             else {
702 0         0 0
703             }
704 5547 50 50     18019 })) && (((do {
      66        
      66        
      66        
705 12         18 ($MATCH->{capture} = (do {
706 12         37 (my $List_a = bless [], 'ARRAY');
707 12         130 (my $List_v = bless [], 'ARRAY');
708 12         17 push( @{$List_a}, 'term' );
  12         42  
709 12         21 push( @{$List_a}, ${$MATCH->{'Perlito::Grammar.sub_def'}} );
  12         54  
  12         39  
710 12         65 $List_a
711             }))
712             }) || 1))))
713             })) || (do {
714 5535         17925 (($MATCH)->{to} = $pos1);
715             ((((((('token' eq substr($str, $MATCH->to(), 5)) && ((($MATCH)->{to} = (5 + $MATCH->to()))))) && (do {
716 4         17 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
717 4 50       13 if ($m2) {
718 4         15 (($MATCH)->{to} = $m2->to());
719 4         25 1
720             }
721             else {
722 0         0 0
723             }
724             })) && (do {
725 4         16 ((my $m2) = Perlito::Grammar->token($str, $MATCH->to()));
726 4 50       16 if ($m2) {
727 4         17 (($MATCH)->{to} = $m2->to());
728 4         11 ($MATCH->{'Perlito::Grammar.token'} = $m2);
729 4         24 1
730             }
731             else {
732 0         0 0
733             }
734 5535 50 50     15519 })) && (((do {
      66        
      66        
      33        
735 4         9 ($MATCH->{capture} = (do {
736 4         11 (my $List_a = bless [], 'ARRAY');
737 4         11 (my $List_v = bless [], 'ARRAY');
738 4         12 push( @{$List_a}, 'term' );
  4         11  
739 4         6 push( @{$List_a}, ${$MATCH->{'Perlito::Grammar.token'}} );
  4         8  
  4         17  
740 4         22 $List_a
741             }))
742             }) || 1))))
743             })) || (do {
744 5531         9592 (($MATCH)->{to} = $pos1);
745             ((((((('do' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))) && (do {
746 37         132 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
747 37 50       135 if ($m2) {
748 37         135 (($MATCH)->{to} = $m2->to());
749 37         215 1
750             }
751             else {
752 0         0 0
753             }
754             })) && (do {
755 37         141 ((my $m2) = $grammar->statement_parse($str, $MATCH->to()));
756 37 50       139 if ($m2) {
757 37         138 (($MATCH)->{to} = $m2->to());
758 37         109 ($MATCH->{'statement_parse'} = $m2);
759 37         981 1
760             }
761             else {
762 0         0 0
763             }
764 5531 50 50     24277 })) && (((do {
      66        
      66        
      33        
765 37         54 ($MATCH->{capture} = (do {
766 37         131 (my $List_a = bless [], 'ARRAY');
767 37         91 (my $List_v = bless [], 'ARRAY');
768 37         63 push( @{$List_a}, 'term' );
  37         145  
769 37         74 push( @{$List_a}, Do->new(('block' => ${$MATCH->{'statement_parse'}})) );
  37         68  
  37         127  
770 37         197 $List_a
771             }))
772             }) || 1))))
773             })) || (do {
774 5494         22003 (($MATCH)->{to} = $pos1);
775             (((((((chr(63) . chr(63) eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))) && (do {
776 37         149 ((my $m2) = $grammar->ternary_parse($str, $MATCH->to()));
777 37 50       166 if ($m2) {
778 37         144 (($MATCH)->{to} = $m2->to());
779 37         96 ($MATCH->{'ternary_parse'} = $m2);
780 37         247 1
781             }
782             else {
783 0         0 0
784             }
785 5494 50 50     14466 })) && (((chr(33) . chr(33) eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to())))))) && (((do {
      66        
      66        
      33        
      33        
786 37         53 ($MATCH->{capture} = (do {
787 37         102 (my $List_a = bless [], 'ARRAY');
788 37         110 (my $List_v = bless [], 'ARRAY');
789 37         53 push( @{$List_a}, 'op' );
  37         86  
790 37         50 push( @{$List_a}, chr(63) . chr(63) . ' ' . chr(33) . chr(33) );
  37         91  
791 37         63 push( @{$List_a}, ${$MATCH->{'ternary_parse'}} );
  37         57  
  37         119  
792 37         169 $List_a
793             }))
794             }) || 1))))
795             })) || (do {
796 5457         9383 (($MATCH)->{to} = $pos1);
797             (((do {
798 5457         15491 ((my $m2) = Perlito::Grammar->var_ident($str, $MATCH->to()));
799 5457 100       16093 if ($m2) {
800 443         1687 (($MATCH)->{to} = $m2->to());
801 443         1239 ($MATCH->{'Perlito::Grammar.var_ident'} = $m2);
802 443         1828 1
803             }
804             else {
805 5014         29740 0
806             }
807 5457 100 50     6380 }) && (((do {
808 443         721 ($MATCH->{capture} = (do {
809 443         1460 (my $List_a = bless [], 'ARRAY');
810 443         2682 (my $List_v = bless [], 'ARRAY');
811 443         776 push( @{$List_a}, 'term' );
  443         1273  
812 443         708 push( @{$List_a}, ${$MATCH->{'Perlito::Grammar.var_ident'}} );
  443         909  
  443         2328  
813 443         2263 $List_a
814             }))
815             }) || 1))))
816             })) || (do {
817 5014         8604 (($MATCH)->{to} = $pos1);
818             (((((((chr(36) . '<' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))) && (do {
819 0         0 ((my $m2) = $grammar->capture_name($str, $MATCH->to()));
820 0 0       0 if ($m2) {
821 0         0 (($MATCH)->{to} = $m2->to());
822 0         0 ($MATCH->{'capture_name'} = $m2);
823 0         0 1
824             }
825             else {
826 0         0 0
827             }
828 5014 0 0     14074 })) && ((('>' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
      33        
      33        
      0        
      0        
829 0         0 ($MATCH->{capture} = (do {
830 0         0 (my $List_a = bless [], 'ARRAY');
831 0         0 (my $List_v = bless [], 'ARRAY');
832 0         0 push( @{$List_a}, 'term' );
  0         0  
833 0         0 push( @{$List_a}, Lookup->new(('obj' => Var->new(('sigil' => chr(36)), ('twigil' => ''), ('name' => chr(47)))), ('index_exp' => Val::Buf->new(('buf' => "".($MATCH->{'capture_name'}))))) );
  0         0  
834 0         0 $List_a
835             }))
836             }) || 1))))
837             })) || (do {
838 5014         8708 (($MATCH)->{to} = $pos1);
839             (((do {
840 5014         14811 ((my $m2) = Perlito::Precedence->op_parse($str, $MATCH->to()));
841 5014 100       18523 if ($m2) {
842 2078         6391 (($MATCH)->{to} = $m2->to());
843 2078         4939 ($MATCH->{'Perlito::Precedence.op_parse'} = $m2);
844 2078         7390 1
845             }
846             else {
847 2936         16381 0
848             }
849 5014 100 50     5950 }) && (((do {
850 2078         2963 ($MATCH->{capture} = (${$MATCH->{'Perlito::Precedence.op_parse'}}))
  2078         6716  
851             }) || 1))))
852             })) || (do {
853 2936         6093 (($MATCH)->{to} = $pos1);
854             ((((do {
855 2936         11134 ((my $m2) = Perlito::Grammar->ident($str, $MATCH->to()));
856 2936 100       8673 if ($m2) {
857 491         1803 (($MATCH)->{to} = $m2->to());
858 491         1370 ($MATCH->{'Perlito::Grammar.ident'} = $m2);
859 491         2028 1
860             }
861             else {
862 2445         16050 0
863             }
864             }) && (do {
865 491         964 ((my $tmp) = $MATCH);
866 491         7203 ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
867 491         970 (($MATCH)->{bool} = (do {
868 491         1586 ((my $pos1) = $MATCH->to());
869 491         786 (do {
870 491 50 66     737 ((do {
871 491         1443 ((my $last_pos) = $MATCH->to());
872 491 100       934 if (!((do {
873 491         2208 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
874 491 100       1704 if ($m2) {
875 446         1454 (($MATCH)->{to} = $m2->to());
876 446         1965 1
877             }
878             else {
879 45         221 0
880             }
881             }))) {
882 45         103 (($MATCH)->{to} = $last_pos)
883             };
884 491         4789 1
885             }) && (((chr(61) . '>' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))))
886             })
887             }));
888 491         1814 (($tmp)->{bool} = !!($MATCH));
889 491         1014 ($MATCH = $tmp);
890 491         1612 !!($MATCH)
891 2936 100 50     4306 })) && (((do {
      66        
892 29         46 ($MATCH->{capture} = (do {
893 29         85 (my $List_a = bless [], 'ARRAY');
894 29         71 (my $List_v = bless [], 'ARRAY');
895 29         43 push( @{$List_a}, 'term' );
  29         76  
896 29         44 push( @{$List_a}, Val::Buf->new(('buf' => "".($MATCH->{'Perlito::Grammar.ident'}))) );
  29         124  
897 29         5411 $List_a
898             }))
899             }) || 1))))
900             })) || (do {
901 2907         5815 (($MATCH)->{to} = $pos1);
902             (((((('True' eq substr($str, $MATCH->to(), 4)) && ((($MATCH)->{to} = (4 + $MATCH->to()))))) && (do {
903 1         3 ((my $tmp) = $MATCH);
904 1         6 ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
905 1         3 (($MATCH)->{bool} = (do {
906 1         5 ((my $pos1) = $MATCH->to());
907 1         2 (do {
908 1         5 ((my $pos1) = $MATCH->to());
909             ((do {
910 1         4 ((my $m2) = Perlito::Grammar->word($str, $MATCH->to()));
911 1 50       4 if ($m2) {
912 0         0 (($MATCH)->{to} = $m2->to());
913 0         0 1
914             }
915             else {
916 1         8 0
917             }
918 1 50       3 }) || (do {
919 1         3 (($MATCH)->{to} = $pos1);
920 1 50       4 (((('(' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
921             }))
922             })
923             }));
924 1         4 (($tmp)->{bool} = !($MATCH));
925 1         3 ($MATCH = $tmp);
926 1         4 !!($MATCH)
927 2907 50 50     9204 })) && (((do {
      66        
      66        
928 1         1 ($MATCH->{capture} = (do {
929 1         4 (my $List_a = bless [], 'ARRAY');
930 1         3 (my $List_v = bless [], 'ARRAY');
931 1         2 push( @{$List_a}, 'term' );
  1         4  
932 1         3 push( @{$List_a}, Val::Bit->new(('bit' => 1)) );
  1         9  
933 1         6 $List_a
934             }))
935             }) || 1))))
936             })) || (do {
937 2906         6483 (($MATCH)->{to} = $pos1);
938             (((((('False' eq substr($str, $MATCH->to(), 5)) && ((($MATCH)->{to} = (5 + $MATCH->to()))))) && (do {
939 3         7 ((my $tmp) = $MATCH);
940 3         15 ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
941 3         8 (($MATCH)->{bool} = (do {
942 3         14 ((my $pos1) = $MATCH->to());
943 3         6 (do {
944 3         11 ((my $pos1) = $MATCH->to());
945             ((do {
946 3         23 ((my $m2) = Perlito::Grammar->word($str, $MATCH->to()));
947 3 50       13 if ($m2) {
948 0         0 (($MATCH)->{to} = $m2->to());
949 0         0 1
950             }
951             else {
952 3         20 0
953             }
954 3 50       7 }) || (do {
955 3         9 (($MATCH)->{to} = $pos1);
956 3 50       15 (((('(' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
957             }))
958             })
959             }));
960 3         11 (($tmp)->{bool} = !($MATCH));
961 3         9 ($MATCH = $tmp);
962 3         12 !!($MATCH)
963 2906 50 50     8405 })) && (((do {
      66        
      66        
964 3         5 ($MATCH->{capture} = (do {
965 3         12 (my $List_a = bless [], 'ARRAY');
966 3         10 (my $List_v = bless [], 'ARRAY');
967 3         7 push( @{$List_a}, 'term' );
  3         9  
968 3         6 push( @{$List_a}, Val::Bit->new(('bit' => 0)) );
  3         28  
969 3         30 $List_a
970             }))
971             }) || 1))))
972             })) || (do {
973 2903         5447 (($MATCH)->{to} = $pos1);
974             (((((('and' eq substr($str, $MATCH->to(), 3)) && ((($MATCH)->{to} = (3 + $MATCH->to()))))) && (do {
975 0         0 ((my $tmp) = $MATCH);
976 0         0 ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
977 0         0 (($MATCH)->{bool} = (do {
978 0         0 ((my $pos1) = $MATCH->to());
979 0         0 (do {
980 0         0 ((my $pos1) = $MATCH->to());
981             ((do {
982 0         0 ((my $m2) = Perlito::Grammar->word($str, $MATCH->to()));
983 0 0       0 if ($m2) {
984 0         0 (($MATCH)->{to} = $m2->to());
985 0         0 1
986             }
987             else {
988 0         0 0
989             }
990 0 0       0 }) || (do {
991 0         0 (($MATCH)->{to} = $pos1);
992 0 0       0 (((('(' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
993             }))
994             })
995             }));
996 0         0 (($tmp)->{bool} = !($MATCH));
997 0         0 ($MATCH = $tmp);
998 0         0 !!($MATCH)
999 2903 0 0     8175 })) && (((do {
      33        
      33        
1000 0         0 ($MATCH->{capture} = (do {
1001 0         0 (my $List_a = bless [], 'ARRAY');
1002 0         0 (my $List_v = bless [], 'ARRAY');
1003 0         0 push( @{$List_a}, 'op' );
  0         0  
1004 0         0 push( @{$List_a}, 'and' );
  0         0  
1005 0         0 $List_a
1006             }))
1007             }) || 1))))
1008             })) || (do {
1009 2903         5566 (($MATCH)->{to} = $pos1);
1010             (((((('not' eq substr($str, $MATCH->to(), 3)) && ((($MATCH)->{to} = (3 + $MATCH->to()))))) && (do {
1011 0         0 ((my $tmp) = $MATCH);
1012 0         0 ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
1013 0         0 (($MATCH)->{bool} = (do {
1014 0         0 ((my $pos1) = $MATCH->to());
1015 0         0 (do {
1016 0         0 ((my $pos1) = $MATCH->to());
1017             ((do {
1018 0         0 ((my $m2) = Perlito::Grammar->word($str, $MATCH->to()));
1019 0 0       0 if ($m2) {
1020 0         0 (($MATCH)->{to} = $m2->to());
1021 0         0 1
1022             }
1023             else {
1024 0         0 0
1025             }
1026 0 0       0 }) || (do {
1027 0         0 (($MATCH)->{to} = $pos1);
1028 0 0       0 (((('(' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
1029             }))
1030             })
1031             }));
1032 0         0 (($tmp)->{bool} = !($MATCH));
1033 0         0 ($MATCH = $tmp);
1034 0         0 !!($MATCH)
1035 2903 0 0     12116 })) && (((do {
      33        
      33        
1036 0         0 ($MATCH->{capture} = (do {
1037 0         0 (my $List_a = bless [], 'ARRAY');
1038 0         0 (my $List_v = bless [], 'ARRAY');
1039 0         0 push( @{$List_a}, 'op' );
  0         0  
1040 0         0 push( @{$List_a}, 'not' );
  0         0  
1041 0         0 $List_a
1042             }))
1043             }) || 1))))
1044             })) || (do {
1045 2903         5753 (($MATCH)->{to} = $pos1);
1046             ((((((((('use' eq substr($str, $MATCH->to(), 3)) && ((($MATCH)->{to} = (3 + $MATCH->to()))))) && (do {
1047 1         4 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
1048 1 50       3 if ($m2) {
1049 1         4 (($MATCH)->{to} = $m2->to());
1050 1         6 1
1051             }
1052             else {
1053 0         0 0
1054             }
1055             })) && (do {
1056 1         4 ((my $m2) = Perlito::Grammar->full_ident($str, $MATCH->to()));
1057 1 50       3 if ($m2) {
1058 1         4 (($MATCH)->{to} = $m2->to());
1059 1         3 ($MATCH->{'Perlito::Grammar.full_ident'} = $m2);
1060 1         5 1
1061             }
1062             else {
1063 0         0 0
1064             }
1065             })) && (do {
1066 1         4 ((my $last_pos) = $MATCH->to());
1067 1 50       2 if (!((do {
1068 1         3 ((my $pos1) = $MATCH->to());
1069 1         1 (do {
1070 1 50 33     4 (((('-' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
1071 0         0 ((my $m2) = Perlito::Grammar->ident($str, $MATCH->to()));
1072 0 0       0 if ($m2) {
1073 0         0 (($MATCH)->{to} = $m2->to());
1074 0 0       0 if (exists($MATCH->{'Perlito::Grammar.ident'})) {
1075 0         0 push( @{($MATCH->{'Perlito::Grammar.ident'})}, $m2 )
  0         0  
1076             }
1077             else {
1078 0         0 ($MATCH->{'Perlito::Grammar.ident'} = do {
1079 0         0 (my $List_a = bless [], 'ARRAY');
1080 0         0 (my $List_v = bless [], 'ARRAY');
1081 0         0 push( @{$List_a}, $m2 );
  0         0  
1082 0         0 $List_a
1083             })
1084             };
1085 0         0 1
1086             }
1087             else {
1088 0         0 0
1089             }
1090             }))
1091             })
1092             }))) {
1093 1         10 (($MATCH)->{to} = $last_pos)
1094             };
1095 1         10 1
1096             })) && (do {
1097 1         4 ((my $m2) = $grammar->list_parse($str, $MATCH->to()));
1098 1 50       5 if ($m2) {
1099 1         4 (($MATCH)->{to} = $m2->to());
1100 1         4 ($MATCH->{'list_parse'} = $m2);
1101 1         5 1
1102             }
1103             else {
1104 0         0 0
1105             }
1106 2903 50 50     9284 })) && (((do {
      66        
      66        
      33        
      33        
      33        
1107 1         2 ($MATCH->{capture} = (do {
1108 1         3 (my $List_a = bless [], 'ARRAY');
1109 1         2 (my $List_v = bless [], 'ARRAY');
1110 1         2 push( @{$List_a}, 'term' );
  1         3  
1111 1         2 push( @{$List_a}, Use->new(('mod' => ${$MATCH->{'Perlito::Grammar.full_ident'}})) );
  1         3  
  1         3  
1112 1         7 $List_a
1113             }))
1114             }) || 1))))
1115             })) || (do {
1116 2902         5462 (($MATCH)->{to} = $pos1);
1117             (((((do {
1118 2902         8209 ((my $pos1) = $MATCH->to());
1119             ((((do {
1120 2902 50       8364 (('package' eq substr($str, $MATCH->to(), 7)) && ((($MATCH)->{to} = (7 + $MATCH->to()))))
1121             }) || (do {
1122 2902         5273 (($MATCH)->{to} = $pos1);
1123 2902 100       8384 (((('class' eq substr($str, $MATCH->to(), 5)) && ((($MATCH)->{to} = (5 + $MATCH->to()))))))
1124             })) || (do {
1125 2866         14799 (($MATCH)->{to} = $pos1);
1126 2866 50       8443 (((('grammar' eq substr($str, $MATCH->to(), 7)) && ((($MATCH)->{to} = (7 + $MATCH->to()))))))
1127 2902 50 33     3998 })) || (do {
      66        
1128 2866         4933 (($MATCH)->{to} = $pos1);
1129 2866 50       9253 (((('role' eq substr($str, $MATCH->to(), 4)) && ((($MATCH)->{to} = (4 + $MATCH->to()))))))
1130             }))
1131             }) && (do {
1132 36         153 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
1133 36 50       251 if ($m2) {
1134 36         459 (($MATCH)->{to} = $m2->to());
1135 36         211 1
1136             }
1137             else {
1138 0         0 0
1139             }
1140             })) && (do {
1141 36         164 ((my $m2) = Perlito::Grammar->grammar($str, $MATCH->to()));
1142 36 50       144 if ($m2) {
1143 36         279 (($MATCH)->{to} = $m2->to());
1144 36         124 ($MATCH->{'Perlito::Grammar.grammar'} = $m2);
1145 36         290 1
1146             }
1147             else {
1148 0         0 0
1149             }
1150 2902 50 50     4123 })) && (((do {
      66        
      33        
1151 36         100 ($MATCH->{capture} = (do {
1152 36         143 (my $List_a = bless [], 'ARRAY');
1153 36         120 (my $List_v = bless [], 'ARRAY');
1154 36         134 push( @{$List_a}, 'term' );
  36         134  
1155 36         82 push( @{$List_a}, ${$MATCH->{'Perlito::Grammar.grammar'}} );
  36         102  
  36         201  
1156 36         223 $List_a
1157             }))
1158             }) || 1))))
1159             })) || (do {
1160 2866         6796 (($MATCH)->{to} = $pos1);
1161             (((((((do {
1162 2866         8679 ((my $m2) = Perlito::Grammar->declarator($str, $MATCH->to()));
1163 2866 100       8989 if ($m2) {
1164 83         297 (($MATCH)->{to} = $m2->to());
1165 83         262 ($MATCH->{'Perlito::Grammar.declarator'} = $m2);
1166 83         386 1
1167             }
1168             else {
1169 2783         19483 0
1170             }
1171             }) && (do {
1172 83         332 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
1173 83 50       271 if ($m2) {
1174 83         309 (($MATCH)->{to} = $m2->to());
1175 83         537 1
1176             }
1177             else {
1178 0         0 0
1179             }
1180             })) && (do {
1181 83         362 ((my $m2) = Perlito::Grammar->opt_type($str, $MATCH->to()));
1182 83 50       323 if ($m2) {
1183 83         298 (($MATCH)->{to} = $m2->to());
1184 83         278 ($MATCH->{'Perlito::Grammar.opt_type'} = $m2);
1185 83         378 1
1186             }
1187             else {
1188 0         0 0
1189             }
1190             })) && (do {
1191 83         486 ((my $m2) = Perlito::Grammar->opt_ws($str, $MATCH->to()));
1192 83 50       267 if ($m2) {
1193 83         311 (($MATCH)->{to} = $m2->to());
1194 83         475 1
1195             }
1196             else {
1197 0         0 0
1198             }
1199             })) && (do {
1200 83         357 ((my $m2) = Perlito::Grammar->var_ident($str, $MATCH->to()));
1201 83 50       301 if ($m2) {
1202 83         309 (($MATCH)->{to} = $m2->to());
1203 83         358 ($MATCH->{'Perlito::Grammar.var_ident'} = $m2);
1204 83         400 1
1205             }
1206             else {
1207 0         0 0
1208             }
1209 2866 50 50     3794 })) && (((do {
      66        
      33        
      33        
      33        
1210 83         129 ($MATCH->{capture} = (do {
1211 83         326 (my $List_a = bless [], 'ARRAY');
1212 83         253 (my $List_v = bless [], 'ARRAY');
1213 83         149 push( @{$List_a}, 'term' );
  83         273  
1214 83         144 push( @{$List_a}, Decl->new(('decl' => ${$MATCH->{'Perlito::Grammar.declarator'}}), ('type' => ${$MATCH->{'Perlito::Grammar.opt_type'}}), ('var' => ${$MATCH->{'Perlito::Grammar.var_ident'}})) );
  83         202  
  83         322  
  83         319  
  83         282  
1215 83         736 $List_a
1216             }))
1217             }) || 1))))
1218             })) || (do {
1219 2783         11491 (($MATCH)->{to} = $pos1);
1220             ((((((('.' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
1221 108         420 ((my $m2) = $grammar->hyper_op($str, $MATCH->to()));
1222 108 50       324 if ($m2) {
1223 108         349 (($MATCH)->{to} = $m2->to());
1224 108         268 ($MATCH->{'hyper_op'} = $m2);
1225 108         452 1
1226             }
1227             else {
1228 0         0 0
1229             }
1230             })) && (do {
1231 108         371 ((my $m2) = Perlito::Grammar->ident($str, $MATCH->to()));
1232 108 50       1107 if ($m2) {
1233 108         364 (($MATCH)->{to} = $m2->to());
1234 108         267 ($MATCH->{'Perlito::Grammar.ident'} = $m2);
1235 108         483 1
1236             }
1237             else {
1238 0         0 0
1239             }
1240 2783 50 66     8327 })) && (do {
      66        
      33        
1241 108         369 ((my $pos1) = $MATCH->to());
1242             (((do {
1243             ((((((':' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
1244 0         0 ((my $last_pos) = $MATCH->to());
1245 0 0       0 if (!((do {
1246 0         0 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
1247 0 0       0 if ($m2) {
1248 0         0 (($MATCH)->{to} = $m2->to());
1249 0         0 1
1250             }
1251             else {
1252 0         0 0
1253             }
1254             }))) {
1255 0         0 (($MATCH)->{to} = $last_pos)
1256             };
1257 0         0 1
1258             })) && (do {
1259 0         0 ((my $m2) = $grammar->list_parse($str, $MATCH->to()));
1260 0 0       0 if ($m2) {
1261 0         0 (($MATCH)->{to} = $m2->to());
1262 0         0 ($MATCH->{'list_parse'} = $m2);
1263 0         0 1
1264             }
1265             else {
1266 0         0 0
1267             }
1268 108 0 0     349 })) && (((do {
      33        
      33        
      0        
1269 0         0 ($MATCH->{capture} = (do {
1270 0         0 (my $List_a = bless [], 'ARRAY');
1271 0         0 (my $List_v = bless [], 'ARRAY');
1272 0         0 push( @{$List_a}, 'postfix_or_term' );
  0         0  
1273 0         0 push( @{$List_a}, 'methcall' );
  0         0  
1274 0         0 push( @{$List_a}, "".($MATCH->{'Perlito::Grammar.ident'}) );
  0         0  
1275 0         0 push( @{$List_a}, ${$MATCH->{'list_parse'}} );
  0         0  
  0         0  
1276 0         0 push( @{$List_a}, ${$MATCH->{'hyper_op'}} );
  0         0  
  0         0  
1277 0         0 $List_a
1278             }))
1279             }) || 1)))
1280             }) || (do {
1281 108         243 (($MATCH)->{to} = $pos1);
1282             ((((((('(' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
1283 31         116 ((my $m2) = $grammar->paren_parse($str, $MATCH->to()));
1284 31 50       135 if ($m2) {
1285 31         201 (($MATCH)->{to} = $m2->to());
1286 31         93 ($MATCH->{'paren_parse'} = $m2);
1287 31         235 1
1288             }
1289             else {
1290 0         0 0
1291             }
1292 108 50 50     354 })) && (((')' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
      66        
      66        
      33        
      33        
1293 31         56 ($MATCH->{capture} = (do {
1294 31         93 (my $List_a = bless [], 'ARRAY');
1295 31         74 (my $List_v = bless [], 'ARRAY');
1296 31         54 push( @{$List_a}, 'postfix_or_term' );
  31         74  
1297 31         50 push( @{$List_a}, 'methcall' );
  31         69  
1298 31         50 push( @{$List_a}, "".($MATCH->{'Perlito::Grammar.ident'}) );
  31         160  
1299 31         70 push( @{$List_a}, do {
  31         62  
1300 31         134 (my $Hash_a = bless {}, 'HASH');
1301 31         1267 ($Hash_a->{'end_block'} = undef());
1302 31         46 ($Hash_a->{'exp'} = ${$MATCH->{'paren_parse'}});
  31         109  
1303 31         97 ($Hash_a->{'terminated'} = 0);
1304 31         69 $Hash_a
1305             } );
1306 31         62 push( @{$List_a}, ${$MATCH->{'hyper_op'}} );
  31         57  
  31         117  
1307 31         200 $List_a
1308             }))
1309             }) || 1))))
1310 108 100 33     213 })) || (do {
1311 77         178 (($MATCH)->{to} = $pos1);
1312 77 50       141 ((((do {
1313 77         116 ($MATCH->{capture} = (do {
1314 77         300 (my $List_a = bless [], 'ARRAY');
1315 77         264 (my $List_v = bless [], 'ARRAY');
1316 77         149 push( @{$List_a}, 'postfix_or_term' );
  77         235  
1317 77         107 push( @{$List_a}, 'methcall_no_params' );
  77         195  
1318 77         110 push( @{$List_a}, "".($MATCH->{'Perlito::Grammar.ident'}) );
  77         360  
1319 77         154 push( @{$List_a}, ${$MATCH->{'hyper_op'}} );
  77         128  
  77         241  
1320 77         398 $List_a
1321             }))
1322             }) || 1)))
1323             }))
1324             })))
1325             })) || (do {
1326 2675         4865 (($MATCH)->{to} = $pos1);
1327             ((((do {
1328 2675         12594 ((my $m2) = Perlito::Grammar->optional_namespace_before_ident($str, $MATCH->to()));
1329 2675 50       7201 if ($m2) {
1330 2675         11933 (($MATCH)->{to} = $m2->to());
1331 2675         6163 ($MATCH->{'Perlito::Grammar.optional_namespace_before_ident'} = $m2);
1332 2675         10172 1
1333             }
1334             else {
1335 0         0 0
1336             }
1337             }) && (do {
1338 2675         14918 ((my $m2) = Perlito::Grammar->ident($str, $MATCH->to()));
1339 2675 100       15947 if ($m2) {
1340 338         1280 (($MATCH)->{to} = $m2->to());
1341 338         810 ($MATCH->{'Perlito::Grammar.ident'} = $m2);
1342 338         1826 1
1343             }
1344             else {
1345 2337         13537 0
1346             }
1347 2675 100 33     3366 })) && (do {
1348 338         1181 ((my $pos1) = $MATCH->to());
1349             (((do {
1350             (((do {
1351 338         1394 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
1352 338 100       1128 if ($m2) {
1353 294         1066 (($MATCH)->{to} = $m2->to());
1354 294         1849 1
1355             }
1356             else {
1357 44         358 0
1358             }
1359             }) && (do {
1360 294         1133 ((my $m2) = $grammar->list_parse($str, $MATCH->to()));
1361 294 50       1171 if ($m2) {
1362 294         1273 (($MATCH)->{to} = $m2->to());
1363 294         1343 ($MATCH->{'list_parse'} = $m2);
1364 294         1894 1
1365             }
1366             else {
1367 0         0 0
1368             }
1369 338 50 50     555 })) && (((do {
      66        
1370 294         478 ($MATCH->{capture} = (do {
1371 294         1079 (my $List_a = bless [], 'ARRAY');
1372 294         953 (my $List_v = bless [], 'ARRAY');
1373 294         452 push( @{$List_a}, 'postfix_or_term' );
  294         1164  
1374 294         453 push( @{$List_a}, 'funcall' );
  294         616  
1375 294         484 push( @{$List_a}, "".($MATCH->{'Perlito::Grammar.optional_namespace_before_ident'}) );
  294         1332  
1376 294         543 push( @{$List_a}, "".($MATCH->{'Perlito::Grammar.ident'}) );
  294         1370  
1377 294         712 push( @{$List_a}, ${$MATCH->{'list_parse'}} );
  294         610  
  294         1202  
1378 294         2143 $List_a
1379             }))
1380             }) || 1)))
1381             }) || (do {
1382 44         113 (($MATCH)->{to} = $pos1);
1383             (((do {
1384 44         97 ((my $tmp) = $MATCH);
1385 44         192 ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
1386 44         99 (($MATCH)->{bool} = (do {
1387 44         172 ((my $pos1) = $MATCH->to());
1388 44         81 (do {
1389 44 100       168 (('.' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
1390             })
1391             }));
1392 44         147 (($tmp)->{bool} = !!($MATCH));
1393 44         86 ($MATCH = $tmp);
1394 44         152 !!($MATCH)
1395 44 100 50     80 }) && (((do {
1396 20         91 ((my $namespace) = "".($MATCH->{'Perlito::Grammar.optional_namespace_before_ident'}));
1397 20         92 ((my $name) = "".($MATCH->{'Perlito::Grammar.ident'}));
1398 20 100       86 if ($namespace) {
1399 8         30 ($name = ($namespace . '::' . $name))
1400             };
1401 20         37 ($MATCH->{capture} = (do {
1402 20         77 (my $List_a = bless [], 'ARRAY');
1403 20         59 (my $List_v = bless [], 'ARRAY');
1404 20         35 push( @{$List_a}, 'term' );
  20         54  
1405 20         37 push( @{$List_a}, Proto->new(('name' => $name)) );
  20         230  
1406 20         119 $List_a
1407             }))
1408             }) || 1))))
1409 338 100 66     620 })) || (do {
1410 24         70 (($MATCH)->{to} = $pos1);
1411 24 50       44 ((((do {
1412 24         35 ($MATCH->{capture} = (do {
1413 24         89 (my $List_a = bless [], 'ARRAY');
1414 24         75 (my $List_v = bless [], 'ARRAY');
1415 24         46 push( @{$List_a}, 'postfix_or_term' );
  24         101  
1416 24         82 push( @{$List_a}, 'funcall_no_params' );
  24         68  
1417 24         32 push( @{$List_a}, "".($MATCH->{'Perlito::Grammar.optional_namespace_before_ident'}) );
  24         129  
1418 24         56 push( @{$List_a}, "".($MATCH->{'Perlito::Grammar.ident'}) );
  24         106  
1419 24         133 $List_a
1420             }))
1421             }) || 1)))
1422             }))
1423             })))
1424             })) || (do {
1425 2337         5093 (($MATCH)->{to} = $pos1);
1426             (((do {
1427 2337         9346 ((my $m2) = Perlito::Grammar->val_num($str, $MATCH->to()));
1428 2337 100       6239 if ($m2) {
1429 9         36 (($MATCH)->{to} = $m2->to());
1430 9         25 ($MATCH->{'Perlito::Grammar.val_num'} = $m2);
1431 9         39 1
1432             }
1433             else {
1434 2328         13348 0
1435             }
1436 2337 100 50     3250 }) && (((do {
1437 9         15 ($MATCH->{capture} = (do {
1438 9         47 (my $List_a = bless [], 'ARRAY');
1439 9         26 (my $List_v = bless [], 'ARRAY');
1440 9         22 push( @{$List_a}, 'term' );
  9         29  
1441 9         13 push( @{$List_a}, ${$MATCH->{'Perlito::Grammar.val_num'}} );
  9         5599  
  9         58  
1442 9         59 $List_a
1443             }))
1444             }) || 1))))
1445             })) || (do {
1446 2328         4393 (($MATCH)->{to} = $pos1);
1447             (((do {
1448 2328         8572 ((my $m2) = Perlito::Grammar->val_int($str, $MATCH->to()));
1449 2328 100       6147 if ($m2) {
1450 318         1049 (($MATCH)->{to} = $m2->to());
1451 318         849 ($MATCH->{'Perlito::Grammar.val_int'} = $m2);
1452 318         1623 1
1453             }
1454             else {
1455 2010         11601 0
1456             }
1457 2328 100 50     3262 }) && (((do {
1458 318         535 ($MATCH->{capture} = (do {
1459 318         1108 (my $List_a = bless [], 'ARRAY');
1460 318         802 (my $List_v = bless [], 'ARRAY');
1461 318         476 push( @{$List_a}, 'term' );
  318         1120  
1462 318         549 push( @{$List_a}, ${$MATCH->{'Perlito::Grammar.val_int'}} );
  318         540  
  318         1126  
1463 318         2797 $List_a
1464             }))
1465             }) || 1))))
1466             })) || (do {
1467 2010         5655 (($MATCH)->{to} = $pos1);
1468             (((do {
1469 2010         7314 ((my $m2) = Perlito::Grammar->val_buf($str, $MATCH->to()));
1470 2010 100       16166 if ($m2) {
1471 434         3974 (($MATCH)->{to} = $m2->to());
1472 434         1288 ($MATCH->{'Perlito::Grammar.val_buf'} = $m2);
1473 434         2253 1
1474             }
1475             else {
1476 1576         9616 0
1477             }
1478 2010 100 50     3467 }) && (((do {
1479 434         702 ($MATCH->{capture} = (do {
1480 434         1753 (my $List_a = bless [], 'ARRAY');
1481 434         1264 (my $List_v = bless [], 'ARRAY');
1482 434         644 push( @{$List_a}, 'term' );
  434         1241  
1483 434         734 push( @{$List_a}, ${$MATCH->{'Perlito::Grammar.val_buf'}} );
  434         869  
  434         1759  
1484 434         2651 $List_a
1485             }))
1486             }) || 1))))
1487 5966 100 66     8297 })) || (do {
      33        
      33        
      66        
      66        
      33        
      66        
      66        
      66        
      66        
      66        
      66        
      66        
      66        
      33        
      66        
      66        
      66        
      66        
      33        
      33        
      66        
      66        
      66        
      66        
      66        
      66        
      66        
1488 1576         2915 (($MATCH)->{to} = $pos1);
1489             (((do {
1490 1576         5078 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
1491 1576 100       4748 if ($m2) {
1492 1545         5402 (($MATCH)->{to} = $m2->to());
1493 1545         7607 1
1494             }
1495             else {
1496 31         210 0
1497             }
1498 1576 100 50     2181 }) && (((do {
1499 1545         2827 ($MATCH->{capture} = (do {
1500 1545         4673 (my $List_a = bless [], 'ARRAY');
1501 1545         3624 (my $List_v = bless [], 'ARRAY');
1502 1545         2615 push( @{$List_a}, 'space' );
  1545         4558  
1503 1545         2080 push( @{$List_a}, ' ' );
  1545         3852  
1504 1545         7517 $List_a
1505             }))
1506             }) || 1))))
1507             }))
1508             })));
1509 5966         46329 $MATCH
1510             };
1511             sub has_newline_after {
1512 256     256 0 573 my $grammar = $_[0];
1513 256         465 my $str = $_[1];
1514 256         469 my $pos = $_[2];
1515 256         374 (my $MATCH);
1516 256         1345 ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
1517 256         476 (($MATCH)->{bool} = ((do {
1518 256         898 ((my $pos1) = $MATCH->to());
1519             (((do {
1520 256 50       897 ((chr(35) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
1521             }) || (do {
1522 256         582 (($MATCH)->{to} = $pos1);
1523 256         364 ((do {
1524 256         902 ((my $m2) = Perlito::Grammar->is_newline($str, $MATCH->to()));
1525 256 100       825 if ($m2) {
1526 115         432 (($MATCH)->{to} = $m2->to());
1527 115         647 1
1528             }
1529             else {
1530 141         836 0
1531             }
1532             }))
1533 256 100 33     441 })) || (do {
1534 141         878 (($MATCH)->{to} = $pos1);
1535             (((do {
1536 141         520 ((my $m2) = Perlito::Grammar->space($str, $MATCH->to()));
1537 141 100       429 if ($m2) {
1538 22         85 (($MATCH)->{to} = $m2->to());
1539 22         138 1
1540             }
1541             else {
1542 119         661 0
1543             }
1544 141 100       696 }) && (do {
1545 22         83 ((my $m2) = $grammar->has_newline_after($str, $MATCH->to()));
1546 22 50       77 if ($m2) {
1547 0         0 (($MATCH)->{to} = $m2->to());
1548 0         0 1
1549             }
1550             else {
1551 22         80 0
1552             }
1553             })))
1554             }))
1555             })));
1556 256         978 $MATCH
1557             };
1558             sub has_no_comma_or_colon_after {
1559 0     0 0 0 my $grammar = $_[0];
1560 0         0 my $str = $_[1];
1561 0         0 my $pos = $_[2];
1562 0         0 (my $MATCH);
1563 0         0 ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
1564 0         0 (($MATCH)->{bool} = ((do {
1565 0         0 ((my $pos1) = $MATCH->to());
1566 0         0 (do {
1567             (((do {
1568 0         0 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
1569 0 0       0 if ($m2) {
1570 0         0 (($MATCH)->{to} = $m2->to());
1571 0         0 1
1572             }
1573             else {
1574 0         0 0
1575             }
1576 0 0 0     0 }) && (do {
      0        
1577 0         0 ((my $tmp) = $MATCH);
1578 0         0 ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
1579 0         0 (($MATCH)->{bool} = (do {
1580 0         0 ((my $pos1) = $MATCH->to());
1581 0         0 (do {
1582 0         0 ((my $pos1) = $MATCH->to());
1583             ((do {
1584 0 0       0 ((',' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
1585 0 0       0 }) || (do {
1586 0         0 (($MATCH)->{to} = $pos1);
1587 0 0       0 ((((':' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
1588             }))
1589             })
1590             }));
1591 0         0 (($tmp)->{bool} = !($MATCH));
1592 0         0 ($MATCH = $tmp);
1593 0         0 !!($MATCH)
1594             })) && ((('' ne substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
1595             })
1596             })));
1597 0         0 $MATCH
1598             };
1599             sub list_parse {
1600 322     322 0 741 my $self = $_[0];
1601 322         577 my $str = $_[1];
1602 322         692 my $pos = $_[2];
1603 322         514 (my $expr);
1604 322         592 ((my $last_pos) = $pos);
1605 322         523 ((my $is_first_token) = 1);
1606 322         483 ((my $lexer_stack) = do {
1607 322         1040 (my $List_a = bless [], 'ARRAY');
1608 322         758 (my $List_v = bless [], 'ARRAY');
1609 322         1093 $List_a
1610             });
1611 322         678 ((my $terminated) = 0);
1612 322         561 ((my $last_token_was_space) = 1);
1613             ((my $get_token) = sub {
1614 1125     1125   2565 (my $v);
1615 1125 50       1485 if (scalar( @{$lexer_stack} )) {
  1125         8051  
1616 0         0 ($v = pop( @{$lexer_stack} ));
  0         0  
1617 0 0 0     0 if ((($is_first_token && (($v->[0] eq 'op'))) && !((Perlito::Precedence::is_fixity_type('prefix', $v->[1]))))) {
      0        
1618 0         0 ($v->[0] = 'end')
1619             }
1620             }
1621             else {
1622 1125         9798 ((my $m) = $self->operator($str, $last_pos));
1623 1125 50       5326 if (!($m)) {
1624 0         0 return scalar (do {
1625 0         0 (my $List_a = bless [], 'ARRAY');
1626 0         0 (my $List_v = bless [], 'ARRAY');
1627 0         0 push( @{$List_a}, 'end' );
  0         0  
1628 0         0 push( @{$List_a}, '*end*' );
  0         0  
1629 0         0 $List_a
1630             })
1631             };
1632 1125         1781 ($v = ${$m});
  1125         2799  
1633 1125 100 100     4952 if ((($is_first_token && (($v->[0] eq 'op'))) && !((Perlito::Precedence::is_fixity_type('prefix', $v->[1]))))) {
      66        
1634 1         3 ($v->[0] = 'end')
1635             };
1636 1125 100       4411 if (($v->[0] ne 'end')) {
1637 806         2360 ($last_pos = $m->to())
1638             }
1639             };
1640 1125 100 100     7349 if (((((($v->[0]) eq 'postfix_or_term')) && ((($v->[1]) eq 'block'))) && $last_token_was_space)) {
      100        
1641 3 50       12 if ($self->has_newline_after($str, $last_pos)) {
1642 3         8 ($terminated = 1);
1643 3         6 push( @{$lexer_stack}, do {
  3         9  
1644 3         8 (my $List_a = bless [], 'ARRAY');
1645 3         6 (my $List_v = bless [], 'ARRAY');
1646 3         4 push( @{$List_a}, 'end' );
  3         6  
1647 3         4 push( @{$List_a}, '*end*' );
  3         13  
1648 3         8 $List_a
1649             } )
1650             }
1651             else {
1652 0 0       0 if ($self->has_no_comma_or_colon_after($str, $last_pos)) {
1653 0         0 ($terminated = 1);
1654 0         0 push( @{$lexer_stack}, do {
  0         0  
1655 0         0 (my $List_a = bless [], 'ARRAY');
1656 0         0 (my $List_v = bless [], 'ARRAY');
1657 0         0 push( @{$List_a}, 'end' );
  0         0  
1658 0         0 push( @{$List_a}, '*end*' );
  0         0  
1659 0         0 $List_a
1660             } )
1661             }
1662             }
1663             };
1664 1125         2215 ($last_token_was_space = (($v->[0] eq 'space')));
1665 1125         1495 ($is_first_token = 0);
1666 1125         3589 return scalar ($v)
1667 322         4060 });
1668 322         989 ((my $prec) = Perlito::Precedence->new(('get_token' => $get_token), ('reduce' => $reduce_to_ast), ('end_token' => do {
1669 322         880 (my $List_a = bless [], 'ARRAY');
1670 322         923 (my $List_v = bless [], 'ARRAY');
1671 322         473 push( @{$List_a}, 'and' );
  322         880  
1672 322         520 push( @{$List_a}, 'or' );
  322         739  
1673 322         506 push( @{$List_a}, chr(33) . chr(33) );
  322         907  
1674 322         469 push( @{$List_a}, ']' );
  322         675  
1675 322         525 push( @{$List_a}, ')' );
  322         2039  
1676 322         459 push( @{$List_a}, chr(125) );
  322         924  
1677 322         465 push( @{$List_a}, chr(59) );
  322         1119  
1678 322         496 push( @{$List_a}, 'if' );
  322         683  
1679 322         467 push( @{$List_a}, 'else' );
  322         776  
1680 322         626 push( @{$List_a}, 'elsif' );
  322         685  
1681 322         459 push( @{$List_a}, 'unless' );
  322         833  
1682 322         455 push( @{$List_a}, 'when' );
  322         833  
1683 322         464 push( @{$List_a}, 'for' );
  322         1017  
1684 322         656 push( @{$List_a}, 'while' );
  322         673  
1685 322         578 push( @{$List_a}, 'loop' );
  322         583  
1686 322         1832 $List_a
1687             })));
1688 322         2316 ((my $res) = $prec->precedence_parse());
1689 322 100       547 if ((scalar( @{$res} ) == 0)) {
  322         1069  
1690 11         47 return scalar (Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $last_pos), ('bool' => 1), ('capture' => do {
1691 11         45 (my $Hash_a = bless {}, 'HASH');
1692 11         39 ($Hash_a->{'exp'} = '*undef*');
1693 11         29 ($Hash_a->{'end_block'} = undef());
1694 11         25 ($Hash_a->{'terminated'} = undef());
1695 11         46 $Hash_a
1696             })))
1697             };
1698 311         541 (my $block);
1699 311 100       412 if ((scalar( @{$res} ) > 1)) {
  311         971  
1700 3         24 ($block = pop( @{$res} ));
  3         6  
1701 3         26 ($block = Lit::Block->new(('stmts' => $block->[2]), ('sig' => $block->[3])))
1702             };
1703 311         1346 ((my $result) = pop_term($res));
1704 311 50       559 if ((scalar( @{$res} ) > 0)) {
  311         1063  
1705 0         0 ($block = pop( @{$res} ));
  0         0  
1706 0         0 ($block = Lit::Block->new(('stmts' => $block->[2]), ('sig' => $block->[3])))
1707             };
1708 311         950 return scalar (Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $last_pos), ('bool' => 1), ('capture' => do {
1709 311         1260 (my $Hash_a = bless {}, 'HASH');
1710 311         1059 ($Hash_a->{'exp'} = $result);
1711 311         2550 ($Hash_a->{'end_block'} = $block);
1712 311         705 ($Hash_a->{'terminated'} = $terminated);
1713 311         1562 $Hash_a
1714             })))
1715             };
1716             sub circumfix_parse {
1717 300     300 0 610 my $self = $_[0];
1718 300         606 my $str = $_[1];
1719 300         638 my $pos = $_[2];
1720 300         443 my $delimiter = $_[3];
1721 300         415 (my $expr);
1722 300         565 ((my $last_pos) = $pos);
1723             ((my $get_token) = sub {
1724 1673     1081   8086 ((my $m) = $self->operator($str, $last_pos));
1725 1673 50       4980 if (!($m)) {
1726 0         0 die(('Expected closing delimiter: '), (($delimiter)), ' near ', $last_pos)
1727             };
1728 1673         2848 ((my $v) = ${$m});
  1673         4355  
1729 1673 100       5523 if (($v->[0] ne 'end')) {
1730 1373         3824 ($last_pos = $m->to())
1731             };
1732 1673         9022 return scalar ($v)
1733 300         2207 });
1734 300         2677 ((my $prec) = Perlito::Precedence->new(('get_token' => $get_token), ('reduce' => $reduce_to_ast), ('end_token' => $delimiter)));
1735 300         1700 ((my $res) = $prec->precedence_parse());
1736 300         1225 ($res = pop_term($res));
1737 300 100       1468 if (!((defined($res)))) {
1738 20         43 ($res = '*undef*')
1739             };
1740 300         1624 return scalar (Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $last_pos), ('bool' => 1), ('capture' => $res)))
1741             };
1742             sub ternary_parse {
1743 37     37 0 114 my $self = $_[0];
1744 37         59 my $str = $_[1];
1745 37         70 my $pos = $_[2];
1746 37         68 return scalar ($self->circumfix_parse($str, $pos, do {
1747 37         103 (my $List_a = bless [], 'ARRAY');
1748 37         89 (my $List_v = bless [], 'ARRAY');
1749 37         54 push( @{$List_a}, chr(33) . chr(33) );
  37         122  
1750 37         185 $List_a
1751             }))
1752             };
1753             sub curly_parse {
1754 0     0 0 0 my $self = $_[0];
1755 0         0 my $str = $_[1];
1756 0         0 my $pos = $_[2];
1757 0         0 return scalar ($self->circumfix_parse($str, $pos, do {
1758 0         0 (my $List_a = bless [], 'ARRAY');
1759 0         0 (my $List_v = bless [], 'ARRAY');
1760 0         0 push( @{$List_a}, chr(125) );
  0         0  
1761 0         0 $List_a
1762             }))
1763             };
1764             sub square_parse {
1765 49     49 0 103 my $self = $_[0];
1766 49         116 my $str = $_[1];
1767 49         97 my $pos = $_[2];
1768 49         162 return scalar ($self->circumfix_parse($str, $pos, do {
1769 49         145 (my $List_a = bless [], 'ARRAY');
1770 49         121 (my $List_v = bless [], 'ARRAY');
1771 49         79 push( @{$List_a}, ']' );
  49         118  
1772 49         277 $List_a
1773             }))
1774             };
1775             sub paren_parse {
1776 214     214 0 453 my $self = $_[0];
1777 214         454 my $str = $_[1];
1778 214         355 my $pos = $_[2];
1779 214         404 return scalar ($self->circumfix_parse($str, $pos, do {
1780 214         628 (my $List_a = bless [], 'ARRAY');
1781 214         514 (my $List_v = bless [], 'ARRAY');
1782 214         331 push( @{$List_a}, ')' );
  214         569  
1783 214         1358 $List_a
1784             }))
1785             };
1786             sub exp_parse {
1787 1045     1045 0 2071 my $self = $_[0];
1788 1045         1888 my $str = $_[1];
1789 1045         1854 my $pos = $_[2];
1790 1045         1406 (my $expr);
1791 1045         1842 ((my $last_pos) = $pos);
1792 1045         1658 ((my $lexer_stack) = do {
1793 1045         2952 (my $List_a = bless [], 'ARRAY');
1794 1045         2718 (my $List_v = bless [], 'ARRAY');
1795 1045         2724 $List_a
1796             });
1797 1045         1880 ((my $terminated) = 0);
1798             ((my $get_token) = sub {
1799 3223     2256   4469 (my $v);
1800 3223 100       5556 if (scalar( @{$lexer_stack} )) {
  3223         8830  
1801 57         100 ($v = pop( @{$lexer_stack} ))
  57         129  
1802             }
1803             else {
1804 3166         18579 ((my $m) = $self->operator($str, $last_pos));
1805 3166 100       11920 if (!($m)) {
1806 31         75 return scalar (do {
1807 31         113 (my $List_a = bless [], 'ARRAY');
1808 31         84 (my $List_v = bless [], 'ARRAY');
1809 31         1773 push( @{$List_a}, 'end' );
  31         96  
1810 31         68 push( @{$List_a}, '*end*' );
  31         78  
1811 31         216 $List_a
1812             })
1813             };
1814 3135         4765 ($v = ${$m});
  3135         8095  
1815 3135 100       11890 if (($v->[0] ne 'end')) {
1816 2268         6536 ($last_pos = $m->to())
1817             }
1818             };
1819 3192 100 100     40792 if (((((((((($v->[0]) eq 'postfix_or_term')) && ((($v->[1]) eq 'block')))) || ((((($v->[0]) eq 'term')) && (Main::isa(($v->[1]), 'Sub'))))) || ((((($v->[0]) eq 'term')) && (Main::isa(($v->[1]), 'Method'))))) || ((((($v->[0]) eq 'term')) && (Main::isa(($v->[1]), 'Do'))))) || ((((($v->[0]) eq 'term')) && (Main::isa(($v->[1]), 'CompUnit')))))) {
      100        
      66        
      100        
      66        
      100        
      66        
      100        
      66        
1820 231 100       1278 if ($self->has_newline_after($str, $last_pos)) {
1821 112         256 ($terminated = 1);
1822 112         206 push( @{$lexer_stack}, do {
  112         239  
1823 112         307 (my $List_a = bless [], 'ARRAY');
1824 112         307 (my $List_v = bless [], 'ARRAY');
1825 112         188 push( @{$List_a}, 'end' );
  112         310  
1826 112         176 push( @{$List_a}, '*end*' );
  112         217  
1827 112         495 $List_a
1828             } )
1829             }
1830             };
1831 3192         12084 return scalar ($v)
1832 1045         21855 });
1833 1045         2589 ((my $prec) = Perlito::Precedence->new(('get_token' => $get_token), ('reduce' => $reduce_to_ast), ('end_token' => do {
1834 1045         2653 (my $List_a = bless [], 'ARRAY');
1835 1045         2700 (my $List_v = bless [], 'ARRAY');
1836 1045         1488 push( @{$List_a}, ']' );
  1045         3174  
1837 1045         1445 push( @{$List_a}, ')' );
  1045         2003  
1838 1045         1334 push( @{$List_a}, chr(125) );
  1045         2203  
1839 1045         1394 push( @{$List_a}, chr(59) );
  1045         2152  
1840 1045         1485 push( @{$List_a}, 'if' );
  1045         2308  
1841 1045         1410 push( @{$List_a}, 'else' );
  1045         2594  
1842 1045         1428 push( @{$List_a}, 'elsif' );
  1045         2204  
1843 1045         1519 push( @{$List_a}, 'unless' );
  1045         2035  
1844 1045         1504 push( @{$List_a}, 'when' );
  1045         2314  
1845 1045         1497 push( @{$List_a}, 'for' );
  1045         2197  
1846 1045         1495 push( @{$List_a}, 'while' );
  1045         2512  
1847 1045         1358 push( @{$List_a}, 'loop' );
  1045         1962  
1848 1045         7017 $List_a
1849             })));
1850 1045         5684 ((my $res) = $prec->precedence_parse());
1851 1045 100       1871 if ((scalar( @{$res} ) == 0)) {
  1045         3547  
1852 270         1233 return scalar (Perlito::Match->new(('bool' => 0)))
1853             };
1854 775         1388 (my $block);
1855 775 100       2173 if ((scalar( @{$res} ) > 1)) {
  775         2356  
1856 90         147 ($block = pop( @{$res} ));
  90         190  
1857 90         1026 ($block = Lit::Block->new(('stmts' => $block->[2]), ('sig' => $block->[3])))
1858             };
1859 775         2445 ((my $result) = pop_term($res));
1860 775 50       1340 if ((scalar( @{$res} ) > 0)) {
  775         2677  
1861 0         0 ($block = pop( @{$res} ));
  0         0  
1862 0 0       0 if (!((Main::isa($block, 'Lit::Block')))) {
1863 0         0 ($block = Lit::Block->new(('stmts' => $block->[2]), ('sig' => $block->[3])))
1864             }
1865             };
1866 775         2005 return scalar (Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $last_pos), ('bool' => 1), ('capture' => do {
1867 775         2375 (my $Hash_a = bless {}, 'HASH');
1868 775         2282 ($Hash_a->{'exp'} = $result);
1869 775         1788 ($Hash_a->{'end_block'} = $block);
1870 775         1854 ($Hash_a->{'terminated'} = $terminated);
1871 775         3454 $Hash_a
1872             })))
1873             };
1874             sub exp_stmt {
1875 1012     1012 0 1847 my $grammar = $_[0];
1876 1012         1653 my $str = $_[1];
1877 1012         1450 my $pos = $_[2];
1878 1012         1475 (my $MATCH);
1879 1012         4424 ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
1880 1012         1771 (($MATCH)->{bool} = ((do {
1881 1012         3479 ((my $pos1) = $MATCH->to());
1882             ((((((do {
1883             ((do {
1884 1012         11772 ((my $m2) = Perlito::Grammar->if($str, $MATCH->to()));
1885 1012 100       3800 if ($m2) {
1886 77         442 (($MATCH)->{to} = $m2->to());
1887 77         219 ($MATCH->{'Perlito::Grammar.if'} = $m2);
1888 77         364 1
1889             }
1890             else {
1891 935         6479 0
1892             }
1893 1012 100 50     1514 }) && (((do {
1894 77         123 ($MATCH->{capture} = (${$MATCH->{'Perlito::Grammar.if'}}))
  77         266  
1895             }) || 1)))
1896             }) || (do {
1897 935         2076 (($MATCH)->{to} = $pos1);
1898             (((do {
1899 935         3470 ((my $m2) = Perlito::Grammar->unless($str, $MATCH->to()));
1900 935 100       4325 if ($m2) {
1901 2         7 (($MATCH)->{to} = $m2->to());
1902 2         7 ($MATCH->{'Perlito::Grammar.unless'} = $m2);
1903 2         10 1
1904             }
1905             else {
1906 933         6237 0
1907             }
1908 935 100 50     1577 }) && (((do {
1909 2         3 ($MATCH->{capture} = (${$MATCH->{'Perlito::Grammar.unless'}}))
  2         6  
1910             }) || 1))))
1911             })) || (do {
1912 933         2178 (($MATCH)->{to} = $pos1);
1913             (((do {
1914 933         3229 ((my $m2) = Perlito::Grammar->when($str, $MATCH->to()));
1915 933 50       2747 if ($m2) {
1916 0         0 (($MATCH)->{to} = $m2->to());
1917 0         0 ($MATCH->{'Perlito::Grammar.when'} = $m2);
1918 0         0 1
1919             }
1920             else {
1921 933         6151 0
1922             }
1923 933 50 0     1491 }) && (((do {
1924 0         0 ($MATCH->{capture} = (${$MATCH->{'Perlito::Grammar.when'}}))
  0         0  
1925             }) || 1))))
1926             })) || (do {
1927 933         2442 (($MATCH)->{to} = $pos1);
1928             (((do {
1929 933         3459 ((my $m2) = Perlito::Grammar->for($str, $MATCH->to()));
1930 933 100       4251 if ($m2) {
1931 4         22 (($MATCH)->{to} = $m2->to());
1932 4         11 ($MATCH->{'Perlito::Grammar.for'} = $m2);
1933 4         14 1
1934             }
1935             else {
1936 929         7494 0
1937             }
1938 933 100 50     1770 }) && (((do {
1939 4         6 ($MATCH->{capture} = (${$MATCH->{'Perlito::Grammar.for'}}))
  4         13  
1940             }) || 1))))
1941             })) || (do {
1942 929         1932 (($MATCH)->{to} = $pos1);
1943             (((do {
1944 929         5790 ((my $m2) = Perlito::Grammar->while($str, $MATCH->to()));
1945 929 100       2638 if ($m2) {
1946 6         26 (($MATCH)->{to} = $m2->to());
1947 6         19 ($MATCH->{'Perlito::Grammar.while'} = $m2);
1948 6         25 1
1949             }
1950             else {
1951 923         5845 0
1952             }
1953 929 100 50     1492 }) && (((do {
1954 6         9 ($MATCH->{capture} = (${$MATCH->{'Perlito::Grammar.while'}}))
  6         22  
1955             }) || 1))))
1956 1012 100 66     2688 })) || (do {
      66        
      33        
      66        
1957 923         2006 (($MATCH)->{to} = $pos1);
1958             (((do {
1959 923         3426 ((my $m2) = Perlito::Grammar->loop($str, $MATCH->to()));
1960 923 50       2769 if ($m2) {
1961 0         0 (($MATCH)->{to} = $m2->to());
1962 0         0 ($MATCH->{'Perlito::Grammar.loop'} = $m2);
1963 0         0 1
1964             }
1965             else {
1966 923         4776 0
1967             }
1968 923 50 0     1386 }) && (((do {
1969 0         0 ($MATCH->{capture} = (${$MATCH->{'Perlito::Grammar.loop'}}))
  0         0  
1970             }) || 1))))
1971             }))
1972             })));
1973 1012         4125 $MATCH
1974             };
1975             sub statement_modifier {
1976 604     604 0 1344 my $grammar = $_[0];
1977 604         1206 my $str = $_[1];
1978 604         971 my $pos = $_[2];
1979 604         803 (my $MATCH);
1980 604         2691 ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
1981 604         1191 (($MATCH)->{bool} = ((do {
1982 604         2142 ((my $pos1) = $MATCH->to());
1983             ((((((do {
1984 604 100       2116 (('if' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))
1985             }) || (do {
1986 590         1225 (($MATCH)->{to} = $pos1);
1987 590 100       1792 (((('unless' eq substr($str, $MATCH->to(), 6)) && ((($MATCH)->{to} = (6 + $MATCH->to()))))))
1988             })) || (do {
1989 588         1334 (($MATCH)->{to} = $pos1);
1990 588 50       2055 (((('when' eq substr($str, $MATCH->to(), 4)) && ((($MATCH)->{to} = (4 + $MATCH->to()))))))
1991             })) || (do {
1992 588         1272 (($MATCH)->{to} = $pos1);
1993 588 100       2144 (((('for' eq substr($str, $MATCH->to(), 3)) && ((($MATCH)->{to} = (3 + $MATCH->to()))))))
1994             })) || (do {
1995 587         1186 (($MATCH)->{to} = $pos1);
1996 587 100       1986 (((('while' eq substr($str, $MATCH->to(), 5)) && ((($MATCH)->{to} = (5 + $MATCH->to()))))))
1997 604 100 66     1066 })) || (do {
      66        
      33        
      66        
1998 586         1189 (($MATCH)->{to} = $pos1);
1999 586 50       2634 (((('loop' eq substr($str, $MATCH->to(), 4)) && ((($MATCH)->{to} = (4 + $MATCH->to()))))))
2000             }))
2001             })));
2002 604         2887 $MATCH
2003             };
2004             sub delimited_statement {
2005 975     975 0 2080 my $grammar = $_[0];
2006 975         1800 my $str = $_[1];
2007 975         1619 my $pos = $_[2];
2008 975         1537 (my $MATCH);
2009 975         4890 ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
2010 975         1816 (($MATCH)->{bool} = ((do {
2011 975         3184 ((my $pos1) = $MATCH->to());
2012 975         2425 (do {
2013             ((do {
2014 975         3325 ((my $last_pos) = $MATCH->to());
2015 975 100       1817 if (!((do {
2016 975         7343 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
2017 975 100       2962 if ($m2) {
2018 31         141 (($MATCH)->{to} = $m2->to());
2019 31         284 1
2020             }
2021             else {
2022 944         4313 0
2023             }
2024             }))) {
2025 944         2120 (($MATCH)->{to} = $last_pos)
2026             };
2027 975         3995 1
2028 975 50       2019 }) && (do {
2029 975         3462 ((my $pos1) = $MATCH->to());
2030             ((do {
2031 975 50 33     3433 ((((chr(59) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
2032 0         0 ((my $last_pos) = $MATCH->to());
2033 0 0       0 if (!((do {
2034 0         0 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
2035 0 0       0 if ($m2) {
2036 0         0 (($MATCH)->{to} = $m2->to());
2037 0         0 1
2038             }
2039             else {
2040 0         0 0
2041             }
2042             }))) {
2043 0         0 (($MATCH)->{to} = $last_pos)
2044             };
2045 0         0 1
2046             }))
2047 975 50       1738 }) || (do {
2048 975         2283 (($MATCH)->{to} = $pos1);
2049             (((((do {
2050 975         3386 ((my $m2) = $grammar->statement_parse($str, $MATCH->to()));
2051 975 100       4512 if ($m2) {
2052 705         2376 (($MATCH)->{to} = $m2->to());
2053 705         2007 ($MATCH->{'statement_parse'} = $m2);
2054 705         3035 1
2055             }
2056             else {
2057 270         1566 0
2058             }
2059             }) && (do {
2060 705         2768 ((my $last_pos) = $MATCH->to());
2061 705 100       1179 if (!((do {
2062 705 100       2414 ((chr(59) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
2063             }))) {
2064 254         697 (($MATCH)->{to} = $last_pos)
2065             };
2066 705         2620 1
2067             })) && (do {
2068 705         2268 ((my $last_pos) = $MATCH->to());
2069 705 100       1156 if (!((do {
2070 705         2428 ((my $m2) = Perlito::Grammar->ws($str, $MATCH->to()));
2071 705 100       3521 if ($m2) {
2072 552         2283 (($MATCH)->{to} = $m2->to());
2073 552         2378 1
2074             }
2075             else {
2076 153         762 0
2077             }
2078             }))) {
2079 153         437 (($MATCH)->{to} = $last_pos)
2080             };
2081 705         3262 1
2082 975 50 50     1412 })) && (((do {
      66        
      33        
2083 705         1003 ($MATCH->{capture} = (${$MATCH->{'statement_parse'}}))
  705         2710  
2084             }) || 1))))
2085             }))
2086             }))
2087             })
2088             })));
2089 975         4442 $MATCH
2090             };
2091             sub statement_parse {
2092 1012     1012 0 2048 my $self = $_[0];
2093 1012         2370 my $str = $_[1];
2094 1012         1892 my $pos = $_[2];
2095 1012         1335 (my $expr);
2096 1012         1649 ((my $last_pos) = $pos);
2097 1012         1621 ((my $lexer_stack) = do {
2098 1012         2834 (my $List_a = bless [], 'ARRAY');
2099 1012         2284 (my $List_v = bless [], 'ARRAY');
2100 1012         2848 $List_a
2101             });
2102 1012         1493 (my $res);
2103 1012         4409 ($res = $self->exp_stmt($str, $pos));
2104 1012 100       2812 if ($res) {
2105 89         367 return scalar ($res)
2106             };
2107 923         4813 ($res = $self->exp_parse($str, $pos));
2108 923 100       4860 if (!(($res))) {
2109 270         1759 return scalar ($res)
2110             };
2111 653 100       1350 if (Main::isa((${$res})->{'exp'}, 'Lit::Block')) {
  653         2125  
2112 41         84 ((${$res})->{'exp'} = Do->new(('block' => (${$res})->{'exp'})))
  41         123  
  41         146  
2113             };
2114 653 50       1352 if ((${$res})->{'end_block'}) {
  653         2140  
2115 0         0 die(('Unexpected block after expression near '), $pos)
2116             };
2117 653 100       1537 if ((${$res})->{'terminated'}) {
  653         1889  
2118 49         221 (($res)->{capture} = (${$res})->{'exp'});
  49         1295  
2119 49         210 return scalar ($res)
2120             };
2121 604         2749 ((my $modifier) = $self->statement_modifier($str, $res->to()));
2122 604 100       2183 if (!(($modifier))) {
2123 586         1202 (($res)->{capture} = (${$res})->{'exp'});
  586         1527  
2124 586         3736 return scalar ($res)
2125             };
2126 18         87 ((my $modifier_exp) = $self->exp_parse($str, $modifier->to()));
2127 18 50       78 if (!(($modifier_exp))) {
2128 0         0 die(('Expected expression after ' . chr(39)), $modifier, (chr(39)))
2129             };
2130 18 50       34 if ((${$modifier_exp})->{'end_block'}) {
  18         66  
2131 0         0 die(('Unexpected block after expression near '), $modifier->to())
2132             };
2133 18         76 ($modifier = "".($modifier));
2134 18 100       98 if (($modifier eq 'if')) {
2135 14         49 return scalar (Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $modifier_exp->to()), ('bool' => 1), ('capture' => If->new(('cond' => (${$modifier_exp})->{'exp'}), ('body' => Lit::Block->new(('stmts' => do {
2136 14         49 (my $List_a = bless [], 'ARRAY');
2137 14         42 (my $List_v = bless [], 'ARRAY');
2138 14         70 push( @{$List_a}, (${$res})->{'exp'} );
  14         32  
  14         49  
2139 14         177 $List_a
2140 14         74 }))), ('otherwise' => Lit::Block->new(('stmts' => do {
2141 14         42 (my $List_a = bless [], 'ARRAY');
2142 14         36 (my $List_v = bless [], 'ARRAY');
2143 14         66 $List_a
2144             })))))))
2145             };
2146 4 100       17 if (($modifier eq 'unless')) {
2147 2         7 return scalar (Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $modifier_exp->to()), ('bool' => 1), ('capture' => If->new(('cond' => (${$modifier_exp})->{'exp'}), ('body' => Lit::Block->new(('stmts' => do {
2148 2         6 (my $List_a = bless [], 'ARRAY');
2149 2         6 (my $List_v = bless [], 'ARRAY');
2150 2         15 $List_a
2151 2         10 }))), ('otherwise' => Lit::Block->new(('stmts' => do {
2152 2         5 (my $List_a = bless [], 'ARRAY');
2153 2         6 (my $List_v = bless [], 'ARRAY');
2154 2         2 push( @{$List_a}, (${$res})->{'exp'} );
  2         3  
  2         6  
2155 2         9 $List_a
2156             })))))))
2157             };
2158 2 100       9 if (($modifier eq 'while')) {
2159 1         5 return scalar (Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $modifier_exp->to()), ('bool' => 1), ('capture' => While->new(('cond' => (${$modifier_exp})->{'exp'}), ('body' => Lit::Block->new(('stmts' => do {
  1         3  
2160 1         3 (my $List_a = bless [], 'ARRAY');
2161 1         3 (my $List_v = bless [], 'ARRAY');
2162 1         1 push( @{$List_a}, (${$res})->{'exp'} );
  1         2  
  1         3  
2163 1         7 $List_a
2164             })))))))
2165             };
2166 1 50       6 if (($modifier eq 'for')) {
2167 1         7 return scalar (Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $modifier_exp->to()), ('bool' => 1), ('capture' => For->new(('cond' => (${$modifier_exp})->{'exp'}), ('body' => Lit::Block->new(('stmts' => do {
  1         4  
2168 1         4 (my $List_a = bless [], 'ARRAY');
2169 1         4 (my $List_v = bless [], 'ARRAY');
2170 1         2 push( @{$List_a}, (${$res})->{'exp'} );
  1         3  
  1         3  
2171 1         9 $List_a
2172             })))))))
2173             };
2174 0           die(('Unexpected statement modifier ' . chr(39) . $modifier . chr(39)))
2175             }
2176             }
2177              
2178              
2179             }
2180              
2181             1;