File Coverage

blib/lib/KiokuDB/TypeMap/Entry/Std/Intrinsic.pm
Criterion Covered Total %
statement 24 24 100.0
branch 2 2 100.0
condition n/a
subroutine 9 9 100.0
pod 0 5 0.0
total 35 40 87.5


line stmt bran cond sub pod time code
1             package KiokuDB::TypeMap::Entry::Std::Intrinsic;
2 24     24   10346 use Moose::Role;
  24         276  
  24         165  
3              
4 24     24   95982 no warnings 'recursion';
  24         55  
  24         1030  
5              
6 24     24   114 use namespace::clean -except => 'meta';
  24         35  
  24         158  
7              
8             requires qw(compile_collapse_body);
9              
10             has intrinsic => (
11             isa => "Bool",
12             is => "ro",
13             predicate => "has_intrinsic",
14             );
15              
16             sub should_compile_intrinsic {
17 175     175 0 296 my ( $self, $class, @args ) = @_;
18              
19 175         5919 return $self->intrinsic;
20             }
21              
22             sub compile_collapse {
23 453     453 0 1074 my ( $self, @args ) = @_;
24              
25 453 100       1694 if ( $self->should_compile_intrinsic(@args) ) {
26 86         298 return $self->compile_intrinsic_collapse(@args);
27             } else {
28 367         1417 return $self->compile_first_class_collapse(@args);
29             }
30             }
31              
32             sub compile_intrinsic_collapse {
33 86     86 0 161 my ( $self, @args ) = @_;
34              
35 86         259 $self->compile_collapse_wrapper( collapse_intrinsic => @args );
36             }
37              
38             sub compile_first_class_collapse {
39 367     367 0 838 my ( $self, @args ) = @_;
40              
41 367         1259 $self->compile_collapse_wrapper( collapse_first_class => @args );
42             }
43              
44             sub compile_collapse_wrapper {
45 453     453 0 959 my ( $self, $method, $class, @args ) = @_;
46              
47 453         1964 my ( $body, @extra ) = $self->compile_collapse_body($class, @args);
48              
49             return sub {
50 4356     4356   8416 my ( $collapser, $obj, @args ) = @_;
51            
52 4356         15516 $collapser->$method( $body, $obj, @extra, @args );
53             }
54 453         4187 }
55              
56             __PACKAGE__
57              
58             __END__