line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package # no pause |
2
|
|
|
|
|
|
|
accessors::fast::tie; |
3
|
|
|
|
|
|
|
|
4
|
2
|
|
|
2
|
|
2079
|
use strict; |
|
2
|
|
|
|
|
5
|
|
|
2
|
|
|
|
|
94
|
|
5
|
2
|
|
|
2
|
|
15
|
use Carp (); |
|
2
|
|
|
|
|
4
|
|
|
2
|
|
|
|
|
35
|
|
6
|
2
|
|
|
2
|
|
14
|
use accessors::fast (); |
|
2
|
|
|
|
|
3
|
|
|
2
|
|
|
|
|
178
|
|
7
|
|
|
|
|
|
|
our $VERSION = $accessors::fast::VERSION; |
8
|
|
|
|
|
|
|
use constant::def { |
9
|
2
|
|
|
|
|
23
|
DEBUG => accessors::fast::DEBUG || 0, |
10
|
|
|
|
|
|
|
CONFESS => accessors::fast::CONFESS || 0, |
11
|
2
|
|
|
2
|
|
12
|
}; |
|
2
|
|
|
|
|
39
|
|
12
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
BEGIN { |
14
|
2
|
|
|
2
|
|
2196
|
*croak = CONFESS ? sub (@) { goto &Carp::confess } : sub (@) { goto &Carp::croak }; |
|
0
|
|
|
0
|
|
0
|
|
15
|
|
|
|
|
|
|
} |
16
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
sub TIEHASH { |
18
|
5
|
|
|
5
|
|
11
|
my ($pkg,$cls,$fld) = @_; |
19
|
19
|
|
|
|
|
75
|
return bless { |
20
|
|
|
|
|
|
|
o => {}, |
21
|
|
|
|
|
|
|
k => [], |
22
|
|
|
|
|
|
|
f => { |
23
|
5
|
|
|
|
|
12
|
(map { $_ => 1 } @$fld), |
24
|
|
|
|
|
|
|
}, |
25
|
|
|
|
|
|
|
class => $cls, |
26
|
|
|
|
|
|
|
},$pkg; |
27
|
|
|
|
|
|
|
} |
28
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
sub check { |
30
|
38
|
|
|
38
|
0
|
52
|
my ($self,$f) = @_; |
31
|
38
|
|
|
|
|
45
|
my $clr = caller(1); |
32
|
38
|
50
|
33
|
|
|
156
|
return if $clr eq 'accessors::fast' |
33
|
|
|
|
|
|
|
or $clr eq 'Data::Dumper'; |
34
|
38
|
|
|
|
|
63
|
my $ft = $self->{f}->{$f}; |
35
|
38
|
50
|
|
|
|
80
|
croak "Class $self->{class} have no field $f" unless $ft; |
36
|
|
|
|
|
|
|
} |
37
|
|
|
|
|
|
|
|
38
|
|
|
|
|
|
|
sub FETCH { |
39
|
0
|
|
|
0
|
|
0
|
warn "fetch `$_[1]'\n" if DEBUG; |
40
|
0
|
|
|
|
|
0
|
✓ |
41
|
0
|
|
|
|
|
0
|
$_[0]->{o}->{$_[1]}; |
42
|
|
|
|
|
|
|
} |
43
|
|
|
|
|
|
|
sub STORE { |
44
|
19
|
|
|
19
|
|
84
|
warn "store `$_[1]'\n" if DEBUG; |
45
|
19
|
|
|
|
|
30
|
✓ |
46
|
19
|
|
|
|
|
149
|
$_[0]->{o}->{$_[1]} = $_[2]; |
47
|
|
|
|
|
|
|
} |
48
|
|
|
|
|
|
|
sub DELETE { |
49
|
19
|
|
|
19
|
|
117
|
warn "delete $_[1]\n" if DEBUG; |
50
|
19
|
|
|
|
|
30
|
✓ |
51
|
19
|
|
|
|
|
70
|
delete $_[0]->{o}->{$_[1]}; |
52
|
|
|
|
|
|
|
} |
53
|
|
|
|
|
|
|
sub CLEAR { |
54
|
0
|
|
|
0
|
|
0
|
warn "clear\n" if DEBUG; |
55
|
0
|
|
|
|
|
0
|
%{$_[0]->{o}} = (); |
|
0
|
|
|
|
|
0
|
|
56
|
|
|
|
|
|
|
} |
57
|
|
|
|
|
|
|
sub EXISTS { |
58
|
19
|
|
|
19
|
|
108
|
warn "exists $_[1]\n" if DEBUG; |
59
|
19
|
50
|
|
|
|
48
|
return unless exists $_[0]->{f}->{$_[1]}; |
60
|
19
|
|
|
|
|
60
|
exists $_[0]->{o}->{$_[1]}; |
61
|
|
|
|
|
|
|
} |
62
|
|
|
|
|
|
|
#sub FIRSTKEY { my $a = scalar keys %{$_[0]}; each %{$_[0]} } |
63
|
|
|
|
|
|
|
#sub NEXTKEY { each %{$_[0]} } |
64
|
|
|
|
|
|
|
|
65
|
|
|
|
|
|
|
sub FIRSTKEY { |
66
|
5
|
|
|
5
|
|
113
|
warn "firstkey\n" if DEBUG; |
67
|
5
|
|
|
|
|
19
|
local $a = scalar keys %{$_[0]->{o}}; |
|
5
|
|
|
|
|
17
|
|
68
|
5
|
|
|
|
|
8
|
each %{$_[0]->{o}}; |
|
5
|
|
|
|
|
21
|
|
69
|
|
|
|
|
|
|
} |
70
|
|
|
|
|
|
|
sub NEXTKEY { |
71
|
0
|
|
|
0
|
|
|
warn "nextkey\n" if DEBUG; |
72
|
0
|
|
|
|
|
|
each %{$_[0]->{o}}; |
|
0
|
|
|
|
|
|
|
73
|
|
|
|
|
|
|
} |
74
|
|
|
|
|
|
|
sub SCALAR { |
75
|
0
|
|
|
0
|
|
|
warn "scalar\n" if DEBUG; |
76
|
0
|
|
|
|
|
|
scalar(%{$_[0]->{o}}) |
|
0
|
|
|
|
|
|
|
77
|
|
|
|
|
|
|
} |
78
|
|
|
|
|
|
|
|
79
|
|
|
|
|
|
|
1; |