| Filename | /Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Schema.pm |
| Statements | Executed 575164 statements in 778ms |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 20941 | 1 | 1 | 523ms | 747ms | YAML::PP::Schema::load_scalar |
| 70999 | 1 | 1 | 91.2ms | 91.2ms | YAML::PP::Schema::CORE:regcomp (opcode) |
| 71001 | 3 | 1 | 89.5ms | 89.5ms | YAML::PP::Schema::CORE:match (opcode) |
| 6939 | 1 | 1 | 34.1ms | 39.3ms | YAML::PP::Schema::create_mapping |
| 28553 | 4 | 1 | 18.9ms | 18.9ms | YAML::PP::Schema::resolvers |
| 645 | 1 | 1 | 3.80ms | 4.15ms | YAML::PP::Schema::create_sequence |
| 581 | 1 | 1 | 2.51ms | 4.28ms | YAML::PP::Schema::_bool_jsonpp_true |
| 1 | 1 | 1 | 1.95ms | 2.78ms | YAML::PP::Schema::BEGIN@9 |
| 408 | 1 | 1 | 1.70ms | 2.71ms | YAML::PP::Schema::_bool_jsonpp_false |
| 1 | 1 | 1 | 1.11ms | 1.19ms | YAML::PP::Schema::BEGIN@5 |
| 28 | 11 | 1 | 295µs | 315µs | YAML::PP::Schema::add_resolver |
| 28 | 6 | 1 | 134µs | 146µs | YAML::PP::Schema::add_representer |
| 1 | 1 | 1 | 43µs | 3.10ms | YAML::PP::Schema::load_subschemas |
| 1 | 1 | 1 | 32µs | 32µs | YAML::PP::Schema::new |
| 1 | 1 | 1 | 24µs | 27µs | YAML::PP::BEGIN@1 |
| 28 | 1 | 1 | 12µs | 12µs | YAML::PP::Schema::representers |
| 1 | 1 | 1 | 10µs | 29µs | YAML::PP::Schema::BEGIN@11 |
| 1 | 1 | 1 | 9µs | 11µs | YAML::PP::Schema::BEGIN@4 |
| 3 | 1 | 1 | 8µs | 8µs | YAML::PP::Schema::true |
| 1 | 1 | 1 | 8µs | 8µs | YAML::PP::Schema::yaml_version |
| 1 | 1 | 1 | 4µs | 28µs | YAML::PP::BEGIN@2 |
| 2 | 1 | 1 | 3µs | 3µs | YAML::PP::Schema::bool_class |
| 3 | 1 | 1 | 2µs | 2µs | YAML::PP::Schema::false |
| 0 | 0 | 0 | 0s | 0s | YAML::PP::Schema::_bool_booleanpm_false |
| 0 | 0 | 0 | 0s | 0s | YAML::PP::Schema::_bool_booleanpm_true |
| 0 | 0 | 0 | 0s | 0s | YAML::PP::Schema::_bool_perl_false |
| 0 | 0 | 0 | 0s | 0s | YAML::PP::Schema::_bool_perl_true |
| 0 | 0 | 0 | 0s | 0s | YAML::PP::Schema::add_collection_resolver |
| 0 | 0 | 0 | 0s | 0s | YAML::PP::Schema::add_mapping_resolver |
| 0 | 0 | 0 | 0s | 0s | YAML::PP::Schema::add_sequence_resolver |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | 2 | 32µs | 2 | 30µs | # spent 27µs (24+3) within YAML::PP::BEGIN@1 which was called:
# once (24µs+3µs) by YAML::PP::BEGIN@8 at line 1 # spent 27µs making 1 call to YAML::PP::BEGIN@1
# spent 3µs making 1 call to strict::import |
| 2 | 2 | 24µs | 2 | 52µs | # spent 28µs (4+24) within YAML::PP::BEGIN@2 which was called:
# once (4µs+24µs) by YAML::PP::BEGIN@8 at line 2 # spent 28µs making 1 call to YAML::PP::BEGIN@2
# spent 24µs making 1 call to warnings::import |
| 3 | package YAML::PP::Schema; | ||||
| 4 | 2 | 24µs | 2 | 13µs | # spent 11µs (9+2) within YAML::PP::Schema::BEGIN@4 which was called:
# once (9µs+2µs) by YAML::PP::BEGIN@8 at line 4 # spent 11µs making 1 call to YAML::PP::Schema::BEGIN@4
# spent 2µs making 1 call to B::import |
| 5 | 2 | 280µs | 1 | 1.19ms | # spent 1.19ms (1.11+77µs) within YAML::PP::Schema::BEGIN@5 which was called:
# once (1.11ms+77µs) by YAML::PP::BEGIN@8 at line 5 # spent 1.19ms making 1 call to YAML::PP::Schema::BEGIN@5 |
| 6 | |||||
| 7 | 1 | 1µs | our $VERSION = '0.035'; # VERSION | ||
| 8 | |||||
| 9 | 2 | 661µs | 2 | 2.88ms | # spent 2.78ms (1.95+829µs) within YAML::PP::Schema::BEGIN@9 which was called:
# once (1.95ms+829µs) by YAML::PP::BEGIN@8 at line 9 # spent 2.78ms making 1 call to YAML::PP::Schema::BEGIN@9
# spent 93µs making 1 call to Exporter::import |
| 10 | |||||
| 11 | 2 | 2.42ms | 2 | 48µs | # spent 29µs (10+19) within YAML::PP::Schema::BEGIN@11 which was called:
# once (10µs+19µs) by YAML::PP::BEGIN@8 at line 11 # spent 29µs making 1 call to YAML::PP::Schema::BEGIN@11
# spent 19µs making 1 call to Exporter::import |
| 12 | |||||
| 13 | # spent 32µs within YAML::PP::Schema::new which was called:
# once (32µs+0s) by YAML::PP::new at line 55 of YAML/PP.pm | ||||
| 14 | 1 | 2µs | my ($class, %args) = @_; | ||
| 15 | |||||
| 16 | 1 | 1µs | my $yaml_version = delete $args{yaml_version}; | ||
| 17 | 1 | 1µs | my $bool = delete $args{boolean}; | ||
| 18 | 1 | 0s | $bool = 'perl' unless defined $bool; | ||
| 19 | 1 | 0s | if (keys %args) { | ||
| 20 | die "Unexpected arguments: " . join ', ', sort keys %args; | ||||
| 21 | } | ||||
| 22 | 1 | 1µs | my $true; | ||
| 23 | my $false; | ||||
| 24 | my @bool_class; | ||||
| 25 | 1 | 4µs | my @bools = split m/,/, $bool; | ||
| 26 | 1 | 1µs | for my $b (@bools) { | ||
| 27 | 1 | 2µs | if ($b eq '*') { | ||
| 28 | push @bool_class, ('boolean', 'JSON::PP::Boolean'); | ||||
| 29 | last; | ||||
| 30 | } | ||||
| 31 | elsif ($b eq 'JSON::PP') { | ||||
| 32 | 1 | 1µs | require JSON::PP; | ||
| 33 | 1 | 0s | $true ||= \&_bool_jsonpp_true; | ||
| 34 | 1 | 0s | $false ||= \&_bool_jsonpp_false; | ||
| 35 | 1 | 1µs | push @bool_class, 'JSON::PP::Boolean'; | ||
| 36 | } | ||||
| 37 | elsif ($b eq 'boolean') { | ||||
| 38 | require boolean; | ||||
| 39 | $true ||= \&_bool_booleanpm_true; | ||||
| 40 | $false ||= \&_bool_booleanpm_false; | ||||
| 41 | push @bool_class, 'boolean'; | ||||
| 42 | } | ||||
| 43 | elsif ($b eq 'perl') { | ||||
| 44 | $true ||= \&_bool_perl_true; | ||||
| 45 | $false ||= \&_bool_perl_false; | ||||
| 46 | } | ||||
| 47 | elsif ($b eq 'perl_experimental') { | ||||
| 48 | $true ||= \&_bool_perl_true; | ||||
| 49 | $false ||= \&_bool_perl_false; | ||||
| 50 | push @bool_class, 'perl_experimental'; | ||||
| 51 | } | ||||
| 52 | else { | ||||
| 53 | die "Invalid value for 'boolean': '$b'. Allowed: ('perl', 'boolean', 'JSON::PP')"; | ||||
| 54 | } | ||||
| 55 | } | ||||
| 56 | |||||
| 57 | 1 | 8µs | my %representers = ( | ||
| 58 | 'undef' => undef, | ||||
| 59 | flags => [], | ||||
| 60 | equals => {}, | ||||
| 61 | regex => [], | ||||
| 62 | class_equals => {}, | ||||
| 63 | class_matches => [], | ||||
| 64 | class_isa => [], | ||||
| 65 | scalarref => undef, | ||||
| 66 | refref => undef, | ||||
| 67 | coderef => undef, | ||||
| 68 | glob => undef, | ||||
| 69 | tied_equals => {}, | ||||
| 70 | ); | ||||
| 71 | 1 | 6µs | my $self = bless { | ||
| 72 | yaml_version => $yaml_version, | ||||
| 73 | resolvers => {}, | ||||
| 74 | representers => \%representers, | ||||
| 75 | true => $true, | ||||
| 76 | false => $false, | ||||
| 77 | bool_class => \@bool_class, | ||||
| 78 | }, $class; | ||||
| 79 | 1 | 6µs | return $self; | ||
| 80 | } | ||||
| 81 | |||||
| 82 | 28553 | 40.9ms | # spent 18.9ms within YAML::PP::Schema::resolvers which was called 28553 times, avg 662ns/call:
# 20941 times (13.4ms+0s) by YAML::PP::Schema::load_scalar at line 308, avg 638ns/call
# 6939 times (5.20ms+0s) by YAML::PP::Schema::create_mapping at line 392, avg 749ns/call
# 645 times (351µs+0s) by YAML::PP::Schema::create_sequence at line 362, avg 544ns/call
# 28 times (20µs+0s) by YAML::PP::Schema::add_resolver at line 153, avg 714ns/call | ||
| 83 | 28 | 31µs | # spent 12µs within YAML::PP::Schema::representers which was called 28 times, avg 429ns/call:
# 28 times (12µs+0s) by YAML::PP::Schema::add_representer at line 225, avg 429ns/call | ||
| 84 | |||||
| 85 | 3 | 6µs | # spent 8µs within YAML::PP::Schema::true which was called 3 times, avg 3µs/call:
# 3 times (8µs+0s) by YAML::PP::Schema::Core::register at line 35 of YAML/PP/Schema/Core.pm, avg 3µs/call | ||
| 86 | 3 | 6µs | # spent 2µs within YAML::PP::Schema::false which was called 3 times, avg 667ns/call:
# 3 times (2µs+0s) by YAML::PP::Schema::Core::register at line 39 of YAML/PP/Schema/Core.pm, avg 667ns/call | ||
| 87 | 2 | 5µs | # spent 3µs within YAML::PP::Schema::bool_class which was called 2 times, avg 2µs/call:
# 2 times (3µs+0s) by YAML::PP::Schema::Core::register at line 98 of YAML/PP/Schema/Core.pm, avg 2µs/call | ||
| 88 | 1 | 9µs | # spent 8µs within YAML::PP::Schema::yaml_version which was called:
# once (8µs+0s) by YAML::PP::Schema::load_subschemas at line 100 | ||
| 89 | |||||
| 90 | 1 | 2µs | my %LOADED_SCHEMA = ( | ||
| 91 | JSON => 1, | ||||
| 92 | ); | ||||
| 93 | 1 | 1µs | my %DEFAULT_SCHEMA = ( | ||
| 94 | '1.2' => 'Core', | ||||
| 95 | '1.1' => 'YAML1_1', | ||||
| 96 | ); | ||||
| 97 | |||||
| 98 | # spent 3.10ms (43µs+3.06) within YAML::PP::Schema::load_subschemas which was called:
# once (43µs+3.06ms) by YAML::PP::new at line 59 of YAML/PP.pm | ||||
| 99 | 1 | 1µs | my ($self, @schemas) = @_; | ||
| 100 | 1 | 2µs | 1 | 8µs | my $yaml_version = $self->yaml_version; # spent 8µs making 1 call to YAML::PP::Schema::yaml_version |
| 101 | 1 | 1µs | my $i = 0; | ||
| 102 | 1 | 7µs | while ($i < @schemas) { | ||
| 103 | 1 | 0s | my $item = $schemas[ $i ]; | ||
| 104 | 1 | 1µs | if ($item eq '+') { | ||
| 105 | $item = $DEFAULT_SCHEMA{ $yaml_version }; | ||||
| 106 | } | ||||
| 107 | 1 | 0s | $i++; | ||
| 108 | 1 | 4µs | 1 | 1µs | if (blessed($item)) { # spent 1µs making 1 call to Scalar::Util::blessed |
| 109 | $item->register( | ||||
| 110 | schema => $self, | ||||
| 111 | ); | ||||
| 112 | next; | ||||
| 113 | } | ||||
| 114 | 1 | 1µs | my @options; | ||
| 115 | 1 | 1µs | while ($i < @schemas | ||
| 116 | and ( | ||||
| 117 | $schemas[ $i ] =~ m/^[^A-Za-z]/ | ||||
| 118 | or | ||||
| 119 | $schemas[ $i ] =~ m/^[a-zA-Z0-9]+=/ | ||||
| 120 | ) | ||||
| 121 | ) { | ||||
| 122 | push @options, $schemas[ $i ]; | ||||
| 123 | $i++; | ||||
| 124 | } | ||||
| 125 | |||||
| 126 | 1 | 0s | my $class; | ||
| 127 | 1 | 9µs | 1 | 3µs | if ($item =~ m/^\:(.*)/) { # spent 3µs making 1 call to YAML::PP::Schema::CORE:match |
| 128 | $class = "$1"; | ||||
| 129 | unless ($class =~ m/\A[A-Za-z0-9_:]+\z/) { | ||||
| 130 | die "Module name '$class' is invalid"; | ||||
| 131 | } | ||||
| 132 | Module::Load::load $class; | ||||
| 133 | } | ||||
| 134 | else { | ||||
| 135 | 1 | 1µs | $class = "YAML::PP::Schema::$item"; | ||
| 136 | 1 | 9µs | 1 | 6µs | unless ($class =~ m/\A[A-Za-z0-9_:]+\z/) { # spent 6µs making 1 call to YAML::PP::Schema::CORE:match |
| 137 | die "Module name '$class' is invalid"; | ||||
| 138 | } | ||||
| 139 | 1 | 4µs | 1 | 4µs | $LOADED_SCHEMA{ $item } ||= Module::Load::load $class; # spent 4µs making 1 call to Module::Load::load |
| 140 | } | ||||
| 141 | 1 | 6µs | 1 | 806µs | $class->register( # spent 806µs making 1 call to YAML::PP::Schema::Core::register |
| 142 | schema => $self, | ||||
| 143 | options => \@options, | ||||
| 144 | ); | ||||
| 145 | |||||
| 146 | } | ||||
| 147 | } | ||||
| 148 | |||||
| 149 | # spent 315µs (295+20) within YAML::PP::Schema::add_resolver which was called 28 times, avg 11µs/call:
# 6 times (26µs+4µs) by YAML::PP::Schema::Core::register at line 59 of YAML/PP/Schema/Core.pm, avg 5µs/call
# 5 times (151µs+5µs) by YAML::PP::Schema::Core::register at line 31 of YAML/PP/Schema/Core.pm, avg 31µs/call
# 3 times (27µs+3µs) by YAML::PP::Schema::Core::register at line 39 of YAML/PP/Schema/Core.pm, avg 10µs/call
# 3 times (27µs+1µs) by YAML::PP::Schema::Core::register at line 35 of YAML/PP/Schema/Core.pm, avg 9µs/call
# 3 times (14µs+3µs) by YAML::PP::Schema::Core::register at line 67 of YAML/PP/Schema/Core.pm, avg 6µs/call
# 3 times (16µs+1µs) by YAML::PP::Schema::Core::register at line 63 of YAML/PP/Schema/Core.pm, avg 6µs/call
# once (11µs+1µs) by YAML::PP::Schema::Core::register at line 40 of YAML/PP/Schema/Core.pm
# once (7µs+0s) by YAML::PP::Schema::Core::register at line 44 of YAML/PP/Schema/Core.pm
# once (5µs+1000ns) by YAML::PP::Schema::Core::register at line 48 of YAML/PP/Schema/Core.pm
# once (6µs+0s) by YAML::PP::Schema::Core::register at line 52 of YAML/PP/Schema/Core.pm
# once (5µs+1000ns) by YAML::PP::Schema::Core::register at line 70 of YAML/PP/Schema/Core.pm | ||||
| 150 | 28 | 10µs | my ($self, %args) = @_; | ||
| 151 | 28 | 9µs | my $tag = $args{tag}; | ||
| 152 | 28 | 2µs | my $rule = $args{match}; | ||
| 153 | 28 | 21µs | 28 | 20µs | my $resolvers = $self->resolvers; # spent 20µs making 28 calls to YAML::PP::Schema::resolvers, avg 714ns/call |
| 154 | 28 | 9µs | my ($type, @rule) = @$rule; | ||
| 155 | 28 | 3µs | my $implicit = $args{implicit}; | ||
| 156 | 28 | 1µs | $implicit = 1 unless defined $implicit; | ||
| 157 | 28 | 5µs | my $resolver_list = []; | ||
| 158 | 28 | 4µs | if ($tag) { | ||
| 159 | 28 | 10µs | if (ref $tag eq 'Regexp') { | ||
| 160 | my $res = $resolvers->{tags} ||= []; | ||||
| 161 | push @$res, [ $tag, {} ]; | ||||
| 162 | push @$resolver_list, $res->[-1]->[1]; | ||||
| 163 | } | ||||
| 164 | else { | ||||
| 165 | 28 | 11µs | my $res = $resolvers->{tag}->{ $tag } ||= {}; | ||
| 166 | 28 | 9µs | push @$resolver_list, $res; | ||
| 167 | } | ||||
| 168 | } | ||||
| 169 | 28 | 8µs | if ($implicit) { | ||
| 170 | push @$resolver_list, $resolvers->{value} ||= {}; | ||||
| 171 | } | ||||
| 172 | 28 | 62µs | for my $res (@$resolver_list) { | ||
| 173 | 56 | 15µs | if ($type eq 'equals') { | ||
| 174 | 46 | 7µs | my ($match, $value) = @rule; | ||
| 175 | 46 | 37µs | unless (exists $res->{equals}->{ $match }) { | ||
| 176 | $res->{equals}->{ $match } = $value; | ||||
| 177 | } | ||||
| 178 | 46 | 7µs | next; | ||
| 179 | } | ||||
| 180 | elsif ($type eq 'regex') { | ||||
| 181 | 8 | 1µs | my ($match, $value) = @rule; | ||
| 182 | 8 | 4µs | push @{ $res->{regex} }, [ $match => $value ]; | ||
| 183 | } | ||||
| 184 | elsif ($type eq 'all') { | ||||
| 185 | 2 | 0s | my ($value) = @rule; | ||
| 186 | 2 | 1µs | $res->{all} = $value; | ||
| 187 | } | ||||
| 188 | } | ||||
| 189 | } | ||||
| 190 | |||||
| 191 | sub add_sequence_resolver { | ||||
| 192 | my ($self, %args) = @_; | ||||
| 193 | return $self->add_collection_resolver(sequence => %args); | ||||
| 194 | } | ||||
| 195 | |||||
| 196 | sub add_mapping_resolver { | ||||
| 197 | my ($self, %args) = @_; | ||||
| 198 | return $self->add_collection_resolver(mapping => %args); | ||||
| 199 | } | ||||
| 200 | |||||
| 201 | sub add_collection_resolver { | ||||
| 202 | my ($self, $type, %args) = @_; | ||||
| 203 | my $tag = $args{tag}; | ||||
| 204 | my $implicit = $args{implicit}; | ||||
| 205 | my $resolvers = $self->resolvers; | ||||
| 206 | |||||
| 207 | if ($tag and ref $tag eq 'Regexp') { | ||||
| 208 | my $res = $resolvers->{ $type }->{tags} ||= []; | ||||
| 209 | push @$res, [ $tag, { | ||||
| 210 | on_create => $args{on_create}, | ||||
| 211 | on_data => $args{on_data}, | ||||
| 212 | } ]; | ||||
| 213 | } | ||||
| 214 | elsif ($tag) { | ||||
| 215 | my $res = $resolvers->{ $type }->{tag}->{ $tag } ||= { | ||||
| 216 | on_create => $args{on_create}, | ||||
| 217 | on_data => $args{on_data}, | ||||
| 218 | }; | ||||
| 219 | } | ||||
| 220 | } | ||||
| 221 | |||||
| 222 | # spent 146µs (134+12) within YAML::PP::Schema::add_representer which was called 28 times, avg 5µs/call:
# 23 times (103µs+7µs) by YAML::PP::Schema::Core::register at line 89 of YAML/PP/Schema/Core.pm, avg 5µs/call
# once (9µs+0s) by YAML::PP::Schema::Core::register at line 100 of YAML/PP/Schema/Core.pm
# once (7µs+2µs) by YAML::PP::Schema::Core::register at line 75 of YAML/PP/Schema/Core.pm
# once (8µs+1µs) by YAML::PP::Schema::Core::register at line 83 of YAML/PP/Schema/Core.pm
# once (5µs+1000ns) by YAML::PP::Schema::Core::register at line 93 of YAML/PP/Schema/Core.pm
# once (2µs+1µs) by YAML::PP::Schema::Core::register at line 79 of YAML/PP/Schema/Core.pm | ||||
| 223 | 28 | 14µs | my ($self, %args) = @_; | ||
| 224 | |||||
| 225 | 28 | 20µs | 28 | 12µs | my $representers = $self->representers; # spent 12µs making 28 calls to YAML::PP::Schema::representers, avg 429ns/call |
| 226 | 28 | 2µs | if (my $flags = $args{flags}) { | ||
| 227 | 2 | 1µs | my $rep = $representers->{flags}; | ||
| 228 | 2 | 0s | push @$rep, \%args; | ||
| 229 | 2 | 4µs | return; | ||
| 230 | } | ||||
| 231 | 26 | 1µs | if (my $regex = $args{regex}) { | ||
| 232 | 1 | 1µs | my $rep = $representers->{regex}; | ||
| 233 | 1 | 2µs | push @$rep, \%args; | ||
| 234 | 1 | 3µs | return; | ||
| 235 | } | ||||
| 236 | 25 | 0s | if (my $regex = $args{class_matches}) { | ||
| 237 | my $rep = $representers->{class_matches}; | ||||
| 238 | push @$rep, [ $args{class_matches}, $args{code} ]; | ||||
| 239 | return; | ||||
| 240 | } | ||||
| 241 | 25 | 4µs | if (my $class_equals = $args{class_equals}) { | ||
| 242 | 1 | 1µs | if ($] >= 5.036000 and $class_equals eq 'perl_experimental') { | ||
| 243 | $representers->{bool} = { | ||||
| 244 | code => $args{code}, | ||||
| 245 | }; | ||||
| 246 | return; | ||||
| 247 | } | ||||
| 248 | 1 | 1µs | my $rep = $representers->{class_equals}; | ||
| 249 | $rep->{ $class_equals } = { | ||||
| 250 | code => $args{code}, | ||||
| 251 | 1 | 2µs | }; | ||
| 252 | 1 | 4µs | return; | ||
| 253 | } | ||||
| 254 | 24 | 3µs | if (my $class_isa = $args{class_isa}) { | ||
| 255 | my $rep = $representers->{class_isa}; | ||||
| 256 | push @$rep, [ $args{class_isa}, $args{code} ]; | ||||
| 257 | return; | ||||
| 258 | } | ||||
| 259 | 24 | 1µs | if (my $tied_equals = $args{tied_equals}) { | ||
| 260 | my $rep = $representers->{tied_equals}; | ||||
| 261 | $rep->{ $tied_equals } = { | ||||
| 262 | code => $args{code}, | ||||
| 263 | }; | ||||
| 264 | return; | ||||
| 265 | } | ||||
| 266 | 24 | 4µs | if (defined(my $equals = $args{equals})) { | ||
| 267 | 23 | 3µs | my $rep = $representers->{equals}; | ||
| 268 | $rep->{ $equals } = { | ||||
| 269 | code => $args{code}, | ||||
| 270 | 23 | 25µs | }; | ||
| 271 | 23 | 83µs | return; | ||
| 272 | } | ||||
| 273 | 1 | 0s | if (defined(my $scalarref = $args{scalarref})) { | ||
| 274 | $representers->{scalarref} = { | ||||
| 275 | code => $args{code}, | ||||
| 276 | }; | ||||
| 277 | return; | ||||
| 278 | } | ||||
| 279 | 1 | 0s | if (defined(my $refref = $args{refref})) { | ||
| 280 | $representers->{refref} = { | ||||
| 281 | code => $args{code}, | ||||
| 282 | }; | ||||
| 283 | return; | ||||
| 284 | } | ||||
| 285 | 1 | 1µs | if (defined(my $coderef = $args{coderef})) { | ||
| 286 | $representers->{coderef} = { | ||||
| 287 | code => $args{code}, | ||||
| 288 | }; | ||||
| 289 | return; | ||||
| 290 | } | ||||
| 291 | 1 | 1µs | if (defined(my $glob = $args{glob})) { | ||
| 292 | $representers->{glob} = { | ||||
| 293 | code => $args{code}, | ||||
| 294 | }; | ||||
| 295 | return; | ||||
| 296 | } | ||||
| 297 | 1 | 0s | if (my $undef = $args{undefined}) { | ||
| 298 | 1 | 0s | $representers->{undef} = $undef; | ||
| 299 | 1 | 2µs | return; | ||
| 300 | } | ||||
| 301 | } | ||||
| 302 | |||||
| 303 | # spent 747ms (523+224) within YAML::PP::Schema::load_scalar which was called 20941 times, avg 36µs/call:
# 20941 times (523ms+224ms) by YAML::PP::Constructor::scalar_event at line 287 of YAML/PP/Constructor.pm, avg 36µs/call | ||||
| 304 | 20941 | 4.50ms | my ($self, $constructor, $event) = @_; | ||
| 305 | 20941 | 7.22ms | my $tag = $event->{tag}; | ||
| 306 | 20941 | 8.02ms | my $value = $event->{value}; | ||
| 307 | |||||
| 308 | 20941 | 22.3ms | 20941 | 13.4ms | my $resolvers = $self->resolvers; # spent 13.4ms making 20941 calls to YAML::PP::Schema::resolvers, avg 638ns/call |
| 309 | 20941 | 3.08ms | my $res; | ||
| 310 | 20941 | 8.41ms | if ($tag) { | ||
| 311 | $res = $resolvers->{tag}->{ $tag }; | ||||
| 312 | if (not $res and my $matches = $resolvers->{tags}) { | ||||
| 313 | for my $match (@$matches) { | ||||
| 314 | my ($re, $rule) = @$match; | ||||
| 315 | if ($tag =~ $re) { | ||||
| 316 | $res = $rule; | ||||
| 317 | last; | ||||
| 318 | } | ||||
| 319 | } | ||||
| 320 | } | ||||
| 321 | } | ||||
| 322 | else { | ||||
| 323 | 20941 | 5.11ms | $res = $resolvers->{value}; | ||
| 324 | 20941 | 13.6ms | if ($event->{style} ne YAML_PLAIN_SCALAR_STYLE) { | ||
| 325 | return $value; | ||||
| 326 | } | ||||
| 327 | } | ||||
| 328 | |||||
| 329 | 18884 | 12.0ms | if (my $equals = $res->{equals}) { | ||
| 330 | 18884 | 17.8ms | if (exists $equals->{ $value }) { | ||
| 331 | 1024 | 619µs | my $res = $equals->{ $value }; | ||
| 332 | 1024 | 3.68ms | 989 | 6.99ms | if (ref $res eq 'CODE') { # spent 4.28ms making 581 calls to YAML::PP::Schema::_bool_jsonpp_true, avg 7µs/call
# spent 2.71ms making 408 calls to YAML::PP::Schema::_bool_jsonpp_false, avg 7µs/call |
| 333 | return $res->($constructor, $event); | ||||
| 334 | } | ||||
| 335 | 35 | 76µs | return $res; | ||
| 336 | } | ||||
| 337 | } | ||||
| 338 | 17860 | 9.53ms | if (my $regex = $res->{regex}) { | ||
| 339 | 17860 | 10.7ms | for my $item (@$regex) { | ||
| 340 | 70999 | 20.8ms | my ($re, $sub) = @$item; | ||
| 341 | 70999 | 446ms | 141998 | 181ms | my @matches = $value =~ $re; # spent 91.2ms making 70999 calls to YAML::PP::Schema::CORE:regcomp, avg 1µs/call
# spent 89.5ms making 70999 calls to YAML::PP::Schema::CORE:match, avg 1µs/call |
| 342 | 70999 | 30.7ms | 147 | 364µs | if (@matches) { # spent 364µs making 147 calls to YAML::PP::Schema::JSON::_to_int, avg 2µs/call |
| 343 | return $sub->($constructor, $event, \@matches); | ||||
| 344 | } | ||||
| 345 | } | ||||
| 346 | } | ||||
| 347 | 17713 | 6.97ms | if (my $catch_all = $res->{all}) { | ||
| 348 | 17713 | 59.8ms | 17713 | 22.8ms | if (ref $catch_all eq 'CODE') { # spent 22.8ms making 17713 calls to YAML::PP::Schema::Core::__ANON__[YAML/PP/Schema/Core.pm:70], avg 1µs/call |
| 349 | return $catch_all->($constructor, $event); | ||||
| 350 | } | ||||
| 351 | return $catch_all; | ||||
| 352 | } | ||||
| 353 | return $value; | ||||
| 354 | } | ||||
| 355 | |||||
| 356 | # spent 4.15ms (3.80+351µs) within YAML::PP::Schema::create_sequence which was called 645 times, avg 6µs/call:
# 645 times (3.80ms+351µs) by YAML::PP::Constructor::sequence_start_event at line 229 of YAML/PP/Constructor.pm, avg 6µs/call | ||||
| 357 | 645 | 289µs | my ($self, $constructor, $event) = @_; | ||
| 358 | 645 | 306µs | my $tag = $event->{tag}; | ||
| 359 | 645 | 427µs | my $data = []; | ||
| 360 | 645 | 96µs | my $on_data; | ||
| 361 | |||||
| 362 | 645 | 891µs | 645 | 351µs | my $resolvers = $self->resolvers->{sequence}; # spent 351µs making 645 calls to YAML::PP::Schema::resolvers, avg 544ns/call |
| 363 | 645 | 197µs | if ($tag) { | ||
| 364 | if (my $equals = $resolvers->{tag}->{ $tag }) { | ||||
| 365 | my $on_create = $equals->{on_create}; | ||||
| 366 | $on_data = $equals->{on_data}; | ||||
| 367 | $on_create and $data = $on_create->($constructor, $event); | ||||
| 368 | return ($data, $on_data); | ||||
| 369 | } | ||||
| 370 | if (my $matches = $resolvers->{tags}) { | ||||
| 371 | for my $match (@$matches) { | ||||
| 372 | my ($re, $actions) = @$match; | ||||
| 373 | my $on_create = $actions->{on_create}; | ||||
| 374 | if ($tag =~ $re) { | ||||
| 375 | $on_data = $actions->{on_data}; | ||||
| 376 | $on_create and $data = $on_create->($constructor, $event); | ||||
| 377 | return ($data, $on_data); | ||||
| 378 | } | ||||
| 379 | } | ||||
| 380 | } | ||||
| 381 | } | ||||
| 382 | |||||
| 383 | 645 | 1.24ms | return ($data, $on_data); | ||
| 384 | } | ||||
| 385 | |||||
| 386 | # spent 39.3ms (34.1+5.19) within YAML::PP::Schema::create_mapping which was called 6939 times, avg 6µs/call:
# 6939 times (34.1ms+5.19ms) by YAML::PP::Constructor::mapping_start_event at line 128 of YAML/PP/Constructor.pm, avg 6µs/call | ||||
| 387 | 6939 | 2.22ms | my ($self, $constructor, $event) = @_; | ||
| 388 | 6939 | 2.77ms | my $tag = $event->{tag}; | ||
| 389 | 6939 | 2.70ms | my $data = {}; | ||
| 390 | 6939 | 1.16ms | my $on_data; | ||
| 391 | |||||
| 392 | 6939 | 9.23ms | 6939 | 5.20ms | my $resolvers = $self->resolvers->{mapping}; # spent 5.20ms making 6939 calls to YAML::PP::Schema::resolvers, avg 749ns/call |
| 393 | 6939 | 1.92ms | if ($tag) { | ||
| 394 | if (my $equals = $resolvers->{tag}->{ $tag }) { | ||||
| 395 | my $on_create = $equals->{on_create}; | ||||
| 396 | $on_data = $equals->{on_data}; | ||||
| 397 | $on_create and $data = $on_create->($constructor, $event); | ||||
| 398 | return ($data, $on_data); | ||||
| 399 | } | ||||
| 400 | if (my $matches = $resolvers->{tags}) { | ||||
| 401 | for my $match (@$matches) { | ||||
| 402 | my ($re, $actions) = @$match; | ||||
| 403 | my $on_create = $actions->{on_create}; | ||||
| 404 | if ($tag =~ $re) { | ||||
| 405 | $on_data = $actions->{on_data}; | ||||
| 406 | $on_create and $data = $on_create->($constructor, $event); | ||||
| 407 | return ($data, $on_data); | ||||
| 408 | } | ||||
| 409 | } | ||||
| 410 | } | ||||
| 411 | } | ||||
| 412 | |||||
| 413 | 6939 | 14.2ms | return ($data, $on_data); | ||
| 414 | } | ||||
| 415 | |||||
| 416 | 581 | 2.61ms | 581 | 1.77ms | # spent 4.28ms (2.51+1.77) within YAML::PP::Schema::_bool_jsonpp_true which was called 581 times, avg 7µs/call:
# 581 times (2.51ms+1.77ms) by YAML::PP::Schema::load_scalar at line 332, avg 7µs/call # spent 1.77ms making 581 calls to JSON::PP::true, avg 3µs/call |
| 417 | |||||
| 418 | sub _bool_booleanpm_true { boolean::true() } | ||||
| 419 | |||||
| 420 | sub _bool_perl_true { !!1 } | ||||
| 421 | |||||
| 422 | 408 | 1.69ms | 408 | 1.01ms | # spent 2.71ms (1.70+1.01) within YAML::PP::Schema::_bool_jsonpp_false which was called 408 times, avg 7µs/call:
# 408 times (1.70ms+1.01ms) by YAML::PP::Schema::load_scalar at line 332, avg 7µs/call # spent 1.01ms making 408 calls to JSON::PP::false, avg 2µs/call |
| 423 | |||||
| 424 | sub _bool_booleanpm_false { boolean::false() } | ||||
| 425 | |||||
| 426 | sub _bool_perl_false { !!0 } | ||||
| 427 | |||||
| 428 | 1 | 6µs | 1; | ||
| 429 | |||||
| 430 | __END__ | ||||
# spent 89.5ms within YAML::PP::Schema::CORE:match which was called 71001 times, avg 1µs/call:
# 70999 times (89.5ms+0s) by YAML::PP::Schema::load_scalar at line 341, avg 1µs/call
# once (6µs+0s) by YAML::PP::Schema::load_subschemas at line 136
# once (3µs+0s) by YAML::PP::Schema::load_subschemas at line 127 | |||||
# spent 91.2ms within YAML::PP::Schema::CORE:regcomp which was called 70999 times, avg 1µs/call:
# 70999 times (91.2ms+0s) by YAML::PP::Schema::load_scalar at line 341, avg 1µs/call |