File Coverage

blib/lib/Keyword/TailRecurse.pm
Criterion Covered Total %
statement 120 200 60.0
branch 13 34 38.2
condition 7 21 33.3
subroutine 19 20 95.0
pod n/a
total 159 275 57.8


line stmt bran cond sub pod time code
1             package Keyword::TailRecurse;
2 5     5   285734 use 5.014;
  5         53  
3 5     5   24 use strict;
  5         7  
  5         83  
4 5     5   18 use warnings;
  5         7  
  5         168  
5              
6             our $VERSION = "0.03";
7              
8 5     5   3926 use Keyword::Declare;
  5         537316  
  5         56  
9              
10             my $subCallTailCompatible = 0;
11              
12             my %imported;
13              
14             sub import {
15 6     6   383 my %option = map { $_ => 1 } @_;
  10         39  
16              
17 6 100       32 if( $option{tailrecurse} ) {
  1         2  
18 0 50 50 3   0 keyword tailrecurse (Bareword $function, List? $parameters) {
  0         0  
  0         0  
  1         4  
  3         168868  
  3         7  
  3         8  
19 0         0 return "\@_ = ( $parameters ); goto &$function;";
  1         35  
  3         300  
20 0         0 };
  3         60  
21 1         21 $imported{tailrecurse} = 1;
22 0         0 }
  0         0  
  3         92  
  3         8  
23 0         0  
  3         28  
24 0 100       0 if( $option{tail_recurse} ) {
  3         69  
  6         32  
  1         1  
25 0 50 50 3   0 keyword tail_recurse (Bareword $function, List? $parameters) {
  0         0  
  0         0  
  1         6  
  3         172175  
  3         8  
  3         9  
26 0         0 return "\@_ = ( $parameters ); goto &$function;";
  0         0  
  3         43  
  1         38  
  3         313  
27 0         0 };
  0         0  
  3         51  
  3         60  
28 5         35 $imported{tail_recurse} = 1;
  1         10  
  1         22  
29 0         0 }
  0         0  
  1         48  
  3         105  
  3         7  
30 5     5   172302  
  0         0  
  3         42  
31 0 100 66     0 if( $option{tailRecurse} || ! keys %imported ) {
  3         29  
  6         66  
  3         7  
32 0 50 50 3   0 keyword tailRecurse (Bareword $function, List? $parameters) {
  0         0  
  0         0  
  3         38  
  3         211277  
  3         8  
  3         12  
33 0         0 return "\@_ = ( $parameters ); goto &$function;";
  0         0  
  3         40  
  3         95  
  3         491  
34 0         0 };
  0         0  
  3         52  
  3         75  
35 5         38 $imported{tailRecurse} = 1;
  1         11  
  3         67  
36 0         0 }
  0         0  
  1         49  
  3         112  
  3         8  
37 5     5   171256  
  0         0  
  3         34  
38 0 100       0 if ( $option{subCallTail} ) {
  3         32  
  6         236  
  2         4  
39 0 50 50 3   0 keyword tail (Bareword $function, List? $parameters) {
  0         0  
  0         0  
  2         9  
  3         256421  
  3         8  
  3         10  
40 0         0 return "\@_ = ( $parameters ); goto &$function;";
  0         0  
  3         47  
  2         64  
  3         321  
41 0         0 };
  0         0  
  3         50  
  3         62  
42 5         39  
  3         32  
  2         44  
43 0 50 50 2   0 keyword tail (/\$[_a-zA-Z0-9]+\s*->\s*[_a-zA-Z0-9]+/ $methodCall, List? $parameters) {
  0         0  
  0         0  
  0         0  
  0         0  
  3         150  
  3         102  
  3         7  
  2         7  
  2         173439  
  2         5  
  2         7  
44 5     5   167015 my ($object, $method) = split /\s*->\s*/, $methodCall;
  0         0  
  0         0  
  3         37  
  2         46  
  2         225  
45 0         0  
  0         0  
  3         32  
  2         42  
46             return "\@_ = ( $object, $parameters ); goto( $object->can('$method') );";
47 0         0 };
  0         0  
  0         0  
  3         42  
  2         80  
  2         4  
48 0         0  
  0         0  
  3         54  
  2         4  
49 5         39 $imported{subCallTail} = 1;
  0         0  
  2         28  
  2         23  
  2         154  
50 2         80 }
51 5     5   166789 }
  0         0  
  2         33  
52 0         0  
  2         13  
53             sub unimport {
54 0 0   0   0 if( $imported{tailRecurse} ) {
  2         30  
  0            
  0            
  0            
55 5 0 0     38 unkeyword tailRecurse;
  2         12  
  0            
  0            
56 2         58 }
  0            
57 5 0   5   170986 if( $imported{tailrecurse} ) {
  5     5   147443  
  0            
  0            
  0            
58 5 0 0     290 unkeyword tailrecurse;
  0            
  0            
59 0           }
60 5 0   5   152302 if( $imported{tail_recurse} ) {
  0            
  0            
  0            
61 5 0 0     305 unkeyword tail_recurse;
  0            
  0            
62 0           }
63 5 0   5   150855 if( $imported{subCallTail} ) {
  0            
  0            
  0            
64 5 0 0     288 unkeyword tail;
  0            
  0            
65 0           }
66 5     5   148495 }
67 5         985  
68              
69             1;
70             __END__