| 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; |