File Coverage

blib/lib/YAML/Old/Mo.pm
Criterion Covered Total %
statement 106 136 77.9
branch 45 48 93.7
condition 5 11 45.4
subroutine 28 28 100.0
pod n/a
total 184 223 82.5


line stmt bran cond sub pod time code
1             package YAML::Old::Mo;
2             # use Mo qw[builder default import];
3             # The following line of code was produced from the previous line by
4             # Mo::Inline version 0.40
5 45 100 33 45   326 no warnings;my$M=__PACKAGE__.'::';*{$M.Object::new}=sub{my$c=shift;my$s=bless{@_},$c;my%n=%{$c.'::'.':E'};map{$s->{$_}=$n{$_}->()if!exists$s->{$_}}keys%n;$s};*{$M.import}=sub{import warnings;$^H|=1538;my($P,%e,%o)=caller.'::';shift;eval"no Mo::$_",&{$M.$_.::e}($P,\%e,\%o,\@_)for@_;return if$e{M};%e=(extends,sub{eval"no $_[0]()";@{$P.ISA}=$_[0]},has,sub{my$n=shift;my$m=sub{$#_?$_[0]{$n}=$_[1]:$_[0]{$n}};@_=(default,@_)if!($#_%2);$m=$o{$_}->($m,$n,@_)for sort keys%o;*{$P.$n}=$m},%e,);*{$P.$_}=$e{$_}for keys%e;@{$P.ISA}=$M.Object};*{$M.'builder::e'}=sub{my($P,$e,$o)=@_;$o->{builder}=sub{my($m,$n,%a)=@_;my$b=$a{builder}or return$m;my$i=exists$a{lazy}?$a{lazy}:!${$P.':N'};$i or ${$P.':E'}{$n}=\&{$P.$b}and return$m;sub{$#_?$m->(@_):!exists$_[0]{$n}?$_[0]{$n}=$_[0]->$b:$m->(@_)}}};*{$M.'default::e'}=sub{my($P,$e,$o)=@_;$o->{default}=sub{my($m,$n,%a)=@_;exists$a{default}or return$m;my($d,$r)=$a{default};my$g='HASH'eq($r=ref$d)?sub{+{%$d}}:'ARRAY'eq$r?sub{[@$d]}:'CODE'eq$r?$d:sub{$d};my$i=exists$a{lazy}?$a{lazy}:!${$P.':N'};$i or ${$P.':E'}{$n}=$g and return$m;sub{$#_?$m->(@_):!exists$_[0]{$n}?$_[0]{$n}=$g->(@_):$m->(@_)}}};my$i=\&import;*{$M.import}=sub{(@_==2 and not$_[1])?pop@_:@_==1?push@_,grep!/import/,@f:();goto&$i};@f=qw[builder default import];use strict;use warnings;
  45 100 33 45   94  
  45 100 33 45   32988  
  45 100   45   357  
  45 100   45   102  
  45 100   44   937  
  45 100   44   196  
  45 100   44   91  
  45 100   44   1971  
  45 100   44   6385  
  0 100   44   0  
  0 100   44   0  
  45 100   43   5058  
  0 100   43   0  
  0 100   21   0  
  44 100   21   5841  
  0 100   20   0  
  0 50   20   0  
  44     20   5027  
  0     2   0  
  0     2   0  
  44     1   5247  
  0     1   0  
  0     127262   0  
  44         5005  
  0         0  
  0         0  
  44         5304  
  0         0  
  0         0  
  44         5002  
  0         0  
  0         0  
  44         4782  
  2         4  
  2         18  
  43         4711  
  0         0  
  0         0  
  43         485  
  41         87  
  41         397  
  21         2679  
  0         0  
  0         0  
  21         2448  
  1         2  
  1         10  
  20         2213  
  0         0  
  0         0  
  20         2204  
  0         0  
  0         0  
  20         232  
  19         42  
  19         188  
  2         242  
  0         0  
  0         0  
  2         127  
  1         2  
  1         9  
  1         136  
  0         0  
  0         0  
  1         119  
  0         0  
  0         0  
  127262         621867  
  26954         83600  
  17845         58020  
  6487         20741  
  3110         196948  
  6000         17483  
  1124         3269  
  19488         47597  
  78642         249541  
  2765         7157  
  1006         3254  
  941         2339  
  10542         36978  
  1188         3097  
  4220         12523  
  1665         4145  
  1246         4003  
  708         1793  
  777         2149  
  1196         28450  
  966         2251  
  836         2542  
  1522         4132  
  942         2927  
  996         2898  
  778         2363  
  650         3422  
  767         1991  
  689         2317  
  836         1850  
  657         2029  
  818         2389  
  632         1763  
  862         3170  
  507         1910  
  652         3370  
  502         1389  
  558         1957  
  828         1661  
  583         1606  
  849         1992  
  512         2054  
  653         2647  
  163         893  
  592         3909  
6              
7             our $DumperModule = 'Data::Dumper';
8              
9             my ($_new_error, $_info, $_scalar_info);
10              
11 45     45   228 no strict 'refs';
  45         85  
  45         20377  
12             *{$M.'Object::die'} = sub {
13 36     36   80 my $self = shift;
14 36         81 my $error = $self->$_new_error(@_);
15 36         85 $error->type('Error');
16 36         97 Carp::croak($error->format_message);
17             };
18              
19             *{$M.'Object::warn'} = sub {
20 7     7   10 my $self = shift;
21 7 50       20 return unless $^W;
22 7         16 my $error = $self->$_new_error(@_);
23 7         17 $error->type('Warning');
24 7         18 Carp::cluck($error->format_message);
25             };
26              
27             # This code needs to be refactored to be simpler and more precise, and no,
28             # Scalar::Util doesn't DWIM.
29             #
30             # Can't handle:
31             # * blessed regexp
32             *{$M.'Object::node_info'} = sub {
33 3815     3815   5583 my $self = shift;
34 3815   100     11689 my $stringify = $_[1] || 0;
35             my ($class, $type, $id) =
36             ref($_[0])
37             ? $stringify
38             ? &$_info("$_[0]")
39 3815 100       8888 : do {
    100          
40 3793         12211 require overload;
41 3793         9032 my @info = &$_info(overload::StrVal($_[0]));
42 3793 100       10789 if (ref($_[0]) eq 'Regexp') {
43 1         4 @info[0, 1] = (undef, 'REGEXP');
44             }
45 3793         8923 @info;
46             }
47             : &$_scalar_info($_[0]);
48 3815 100       8045 ($class, $type, $id) = &$_scalar_info("$_[0]")
49             unless $id;
50 3815 50       12694 return wantarray ? ($class, $type, $id) : $id;
51             };
52              
53             #-------------------------------------------------------------------------------
54             $_info = sub {
55             return (($_[0]) =~ qr{^(?:(.*)\=)?([^=]*)\(([^\(]*)\)$}o);
56             };
57              
58             $_scalar_info = sub {
59             my $id = 'undef';
60             if (defined $_[0]) {
61             \$_[0] =~ /\((\w+)\)$/o or CORE::die();
62             $id = "$1-S";
63             }
64             return (undef, undef, $id);
65             };
66              
67             $_new_error = sub {
68             require Carp;
69             my $self = shift;
70             require YAML::Old::Error;
71              
72             my $code = shift || 'unknown error';
73             my $error = YAML::Old::Error->new(code => $code);
74             $error->line($self->line) if $self->can('line');
75             $error->document($self->document) if $self->can('document');
76             $error->arguments([@_]);
77             return $error;
78             };
79              
80             1;