File Coverage

blib/lib/Language/P/Toy/Value/Reference.pm
Criterion Covered Total %
statement 15 38 39.4
branch 2 26 7.6
condition n/a
subroutine 5 13 38.4
pod 0 10 0.0
total 22 87 25.2


line stmt bran cond sub pod time code
1             package Language::P::Toy::Value::Reference;
2              
3 30     30   181 use strict;
  30         69  
  30         974  
4 30     30   164 use warnings;
  30         61  
  30         1070  
5 30     30   195 use base qw(Language::P::Toy::Value::Scalar);
  30         96  
  30         19085  
6              
7             __PACKAGE__->mk_ro_accessors( qw(reference) );
8              
9 0     0 0 0 sub type { 10 }
10              
11             sub clone {
12 0     0 0 0 my( $self, $level ) = @_;
13 0         0 my $clone = Language::P::Toy::Value::Reference->new( { reference => $self->{reference} } );
14              
15 0 0       0 $clone->{reference} = $clone->{reference}->clone( $level -1 )
16             if $level > 0;
17              
18 0         0 return $clone;
19             }
20              
21             sub assign {
22 3     3 0 4 my( $self, $other ) = @_;
23              
24 3 50       9 die unless ref( $self ) eq ref( $other ); # FIXME morph
25              
26 3         10 $self->{reference} = $other->{reference};
27             }
28              
29             sub dereference_scalar {
30 0     0 0 0 my( $self ) = @_;
31              
32 0 0       0 die unless $self->{reference}->isa( 'Language::P::Toy::Value::Scalar' );
33 0         0 return $self->{reference};
34             }
35              
36             sub dereference_hash {
37 0     0 0 0 my( $self ) = @_;
38              
39 0 0       0 die unless $self->{reference}->isa( 'Language::P::Toy::Value::Hash' );
40 0         0 return $self->{reference};
41             }
42              
43             sub dereference_array {
44 0     0 0 0 my( $self ) = @_;
45              
46 0 0       0 die unless $self->{reference}->isa( 'Language::P::Toy::Value::Array' );
47 0         0 return $self->{reference};
48             }
49              
50             sub dereference_subroutine {
51 8     8 0 11 my( $self ) = @_;
52              
53 8 50       45 die unless $self->{reference}->isa( 'Language::P::Toy::Value::Subroutine' );
54 8         19 return $self->{reference};
55             }
56              
57             sub dereference_typeglob {
58 0     0 0   my( $self ) = @_;
59              
60 0 0         die unless $self->{reference}->isa( 'Language::P::Toy::Value::Typeglob' );
61 0           return $self->{reference};
62             }
63              
64             sub as_string {
65 0     0 0   my( $self ) = @_;
66 0           my $ref = $self->{reference};
67              
68 0 0         my $prefix = $ref->isa( 'Language::P::Toy::Value::Reference' ) ? 'REF' :
    0          
    0          
    0          
    0          
    0          
69             $ref->isa( 'Language::P::Toy::Value::Scalar' ) ? 'SCALAR' :
70             $ref->isa( 'Language::P::Toy::Value::Hash' ) ? 'HASH' :
71             $ref->isa( 'Language::P::Toy::Value::Array' ) ? 'ARRAY' :
72             $ref->isa( 'Language::P::Toy::Value::Typeglob' ) ? 'GLOB' :
73             $ref->isa( 'Language::P::Toy::Value::Subroutine' ) ? 'CODE' :
74             die "$ref";
75              
76 0           return sprintf '%s(0x%p)', $prefix, $ref;
77             }
78              
79             sub as_boolean_int {
80 0     0 0   my( $self ) = @_;
81              
82 0           return 1;
83             }
84              
85             1;