Filename | /Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Constructor.pm |
Statements | Executed 604683 statements in 649ms |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
20941 | 1 | 1 | 229ms | 887ms | scalar_event | YAML::PP::Constructor::
6939 | 1 | 1 | 135ms | 193ms | mapping_end_event | YAML::PP::Constructor::
6939 | 1 | 1 | 113ms | 172ms | mapping_start_event | YAML::PP::Constructor::
6939 | 1 | 1 | 55.6ms | 55.6ms | __ANON__[:218] | YAML::PP::Constructor::
36111 | 7 | 1 | 18.2ms | 18.2ms | stack | YAML::PP::Constructor::
28525 | 3 | 1 | 17.5ms | 17.5ms | preserve_alias | YAML::PP::Constructor::
28525 | 3 | 1 | 16.0ms | 16.0ms | schema | YAML::PP::Constructor::
20941 | 1 | 1 | 13.3ms | 13.3ms | preserve_scalar_style | YAML::PP::Constructor::
645 | 1 | 1 | 13.0ms | 18.8ms | sequence_start_event | YAML::PP::Constructor::
645 | 1 | 1 | 9.95ms | 11.6ms | sequence_end_event | YAML::PP::Constructor::
6939 | 1 | 1 | 6.29ms | 6.29ms | preserve_order | YAML::PP::Constructor::
7584 | 2 | 1 | 6.15ms | 6.15ms | preserve_flow_style | YAML::PP::Constructor::
645 | 1 | 1 | 1.36ms | 1.36ms | __ANON__[:270] | YAML::PP::Constructor::
1 | 1 | 1 | 45µs | 49µs | BEGIN@2.290 | YAML::PP::Loader::
2 | 2 | 2 | 39µs | 66µs | init | YAML::PP::Constructor::
1 | 1 | 1 | 29µs | 30µs | BEGIN@8 | YAML::PP::Constructor::
1 | 1 | 1 | 21µs | 66µs | new | YAML::PP::Constructor::
1 | 1 | 1 | 16µs | 18µs | document_end_event | YAML::PP::Constructor::
1 | 1 | 1 | 13µs | 62µs | BEGIN@9 | YAML::PP::Constructor::
1 | 1 | 1 | 10µs | 169µs | BEGIN@15 | YAML::PP::Constructor::
1 | 1 | 1 | 10µs | 11µs | document_start_event | YAML::PP::Constructor::
1 | 1 | 1 | 9µs | 40µs | BEGIN@16 | YAML::PP::Constructor::
2 | 1 | 1 | 9µs | 9µs | set_yaml_version | YAML::PP::Constructor::
1 | 1 | 1 | 8µs | 30µs | BEGIN@12 | YAML::PP::Constructor::
2 | 1 | 1 | 8µs | 8µs | default_yaml_version | YAML::PP::Constructor::
1 | 1 | 1 | 8µs | 52µs | BEGIN@3.291 | YAML::PP::Loader::
1 | 1 | 1 | 6µs | 26µs | BEGIN@13 | YAML::PP::Constructor::
2 | 1 | 1 | 4µs | 4µs | set_docs | YAML::PP::Constructor::
3 | 2 | 1 | 3µs | 3µs | set_anchors | YAML::PP::Constructor::
3 | 2 | 1 | 3µs | 3µs | set_stack | YAML::PP::Constructor::
2 | 1 | 1 | 2µs | 2µs | schemas | YAML::PP::Constructor::
1 | 1 | 1 | 1µs | 1µs | __ANON__ (xsub) | YAML::PP::Constructor::
1 | 1 | 1 | 1µs | 1µs | stream_end_event | YAML::PP::Constructor::
1 | 1 | 1 | 1µs | 1µs | stream_start_event | YAML::PP::Constructor::
0 | 0 | 0 | 0s | 0s | alias_event | YAML::PP::Constructor::
0 | 0 | 0 | 0s | 0s | anchors | YAML::PP::Constructor::
0 | 0 | 0 | 0s | 0s | clone | YAML::PP::Constructor::
0 | 0 | 0 | 0s | 0s | cyclic_refs | YAML::PP::Constructor::
2 | 2 | 2 | 0s | 0s | docs | YAML::PP::Constructor::
0 | 0 | 0 | 0s | 0s | duplicate_keys | YAML::PP::Constructor::
0 | 0 | 0 | 0s | 0s | set_cyclic_refs | YAML::PP::Constructor::
2 | 1 | 1 | 0s | 0s | set_schema | YAML::PP::Constructor::
0 | 0 | 0 | 0s | 0s | stringify_complex | YAML::PP::Constructor::
2 | 1 | 1 | 0s | 0s | yaml_version | YAML::PP::Constructor::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | # ABSTRACT: Construct data structure from Parser Events | ||||
2 | 2 | 52µs | 2 | 53µs | # spent 49µs (45+4) within YAML::PP::Loader::BEGIN@2.290 which was called:
# once (45µs+4µs) by YAML::PP::Loader::BEGIN@9 at line 2 # spent 49µs making 1 call to YAML::PP::Loader::BEGIN@2.290
# spent 4µs making 1 call to strict::import |
3 | 2 | 52µs | 2 | 96µs | # spent 52µs (8+44) within YAML::PP::Loader::BEGIN@3.291 which was called:
# once (8µs+44µs) by YAML::PP::Loader::BEGIN@9 at line 3 # spent 52µs making 1 call to YAML::PP::Loader::BEGIN@3.291
# spent 44µs making 1 call to warnings::import |
4 | package YAML::PP::Constructor; | ||||
5 | |||||
6 | 1 | 1µs | our $VERSION = '0.035'; # VERSION | ||
7 | |||||
8 | 2 | 54µs | 2 | 31µs | # spent 30µs (29+1) within YAML::PP::Constructor::BEGIN@8 which was called:
# once (29µs+1µs) by YAML::PP::Loader::BEGIN@9 at line 8 # spent 30µs making 1 call to YAML::PP::Constructor::BEGIN@8
# spent 1µs making 1 call to YAML::PP::Constructor::__ANON__ |
9 | 1 | 1µs | # spent 62µs (13+49) within YAML::PP::Constructor::BEGIN@9 which was called:
# once (13µs+49µs) by YAML::PP::Loader::BEGIN@9 at line 11 | ||
10 | PRESERVE_ORDER PRESERVE_SCALAR_STYLE PRESERVE_FLOW_STYLE PRESERVE_ALIAS | ||||
11 | 1 | 36µs | 2 | 111µs | /; # spent 62µs making 1 call to YAML::PP::Constructor::BEGIN@9
# spent 49µs making 1 call to Exporter::import |
12 | 2 | 29µs | 2 | 52µs | # spent 30µs (8+22) within YAML::PP::Constructor::BEGIN@12 which was called:
# once (8µs+22µs) by YAML::PP::Loader::BEGIN@9 at line 12 # spent 30µs making 1 call to YAML::PP::Constructor::BEGIN@12
# spent 22µs making 1 call to Exporter::import |
13 | 2 | 48µs | 2 | 46µs | # spent 26µs (6+20) within YAML::PP::Constructor::BEGIN@13 which was called:
# once (6µs+20µs) by YAML::PP::Loader::BEGIN@9 at line 13 # spent 26µs making 1 call to YAML::PP::Constructor::BEGIN@13
# spent 20µs making 1 call to Exporter::import |
14 | |||||
15 | 2 | 87µs | 2 | 328µs | # spent 169µs (10+159) within YAML::PP::Constructor::BEGIN@15 which was called:
# once (10µs+159µs) by YAML::PP::Loader::BEGIN@9 at line 15 # spent 169µs making 1 call to YAML::PP::Constructor::BEGIN@15
# spent 159µs making 1 call to constant::import |
16 | 2 | 2.25ms | 2 | 71µs | # spent 40µs (9+31) within YAML::PP::Constructor::BEGIN@16 which was called:
# once (9µs+31µs) by YAML::PP::Loader::BEGIN@9 at line 16 # spent 40µs making 1 call to YAML::PP::Constructor::BEGIN@16
# spent 31µs making 1 call to constant::import |
17 | |||||
18 | 1 | 4µs | my %cyclic_refs = qw/ allow 1 ignore 1 warn 1 fatal 1 /; | ||
19 | |||||
20 | # spent 66µs (21+45) within YAML::PP::Constructor::new which was called:
# once (21µs+45µs) by YAML::PP::Loader::new at line 26 of YAML/PP/Loader.pm | ||||
21 | 1 | 2µs | my ($class, %args) = @_; | ||
22 | |||||
23 | 1 | 1µs | my $default_yaml_version = delete $args{default_yaml_version}; | ||
24 | 1 | 1µs | my $duplicate_keys = delete $args{duplicate_keys}; | ||
25 | 1 | 1µs | unless (defined $duplicate_keys) { | ||
26 | $duplicate_keys = 0; | ||||
27 | } | ||||
28 | 1 | 0s | my $preserve = delete $args{preserve} || 0; | ||
29 | 1 | 0s | if ($preserve == 1) { | ||
30 | $preserve = PRESERVE_ORDER | PRESERVE_SCALAR_STYLE | PRESERVE_FLOW_STYLE | PRESERVE_ALIAS; | ||||
31 | } | ||||
32 | 1 | 1µs | my $cyclic_refs = delete $args{cyclic_refs} || 'allow'; | ||
33 | die "Invalid value for cyclic_refs: $cyclic_refs" | ||||
34 | 1 | 1µs | unless $cyclic_refs{ $cyclic_refs }; | ||
35 | 1 | 0s | my $schemas = delete $args{schemas}; | ||
36 | |||||
37 | 1 | 1µs | if (keys %args) { | ||
38 | die "Unexpected arguments: " . join ', ', sort keys %args; | ||||
39 | } | ||||
40 | |||||
41 | 1 | 2µs | my $self = bless { | ||
42 | default_yaml_version => $default_yaml_version, | ||||
43 | schemas => $schemas, | ||||
44 | cyclic_refs => $cyclic_refs, | ||||
45 | preserve => $preserve, | ||||
46 | duplicate_keys => $duplicate_keys, | ||||
47 | }, $class; | ||||
48 | 1 | 2µs | 1 | 45µs | $self->init; # spent 45µs making 1 call to YAML::PP::Constructor::init |
49 | 1 | 4µs | return $self; | ||
50 | } | ||||
51 | |||||
52 | sub clone { | ||||
53 | my ($self) = @_; | ||||
54 | my $clone = { | ||||
55 | schemas => $self->{schemas}, | ||||
56 | schema => $self->{schema}, | ||||
57 | default_yaml_version => $self->{default_yaml_version}, | ||||
58 | cyclic_refs => $self->cyclic_refs, | ||||
59 | preserve => $self->{preserve}, | ||||
60 | }; | ||||
61 | return bless $clone, ref $self; | ||||
62 | } | ||||
63 | |||||
64 | # spent 66µs (39+27) within YAML::PP::Constructor::init which was called 2 times, avg 33µs/call:
# once (28µs+17µs) by YAML::PP::Constructor::new at line 48
# once (11µs+10µs) by YAML::PP::Loader::load at line 93 of YAML/PP/Loader.pm | ||||
65 | 2 | 0s | my ($self) = @_; | ||
66 | 2 | 1µs | 2 | 4µs | $self->set_docs([]); # spent 4µs making 2 calls to YAML::PP::Constructor::set_docs, avg 2µs/call |
67 | 2 | 2µs | 2 | 2µs | $self->set_stack([]); # spent 2µs making 2 calls to YAML::PP::Constructor::set_stack, avg 1µs/call |
68 | 2 | 4µs | 2 | 2µs | $self->set_anchors({}); # spent 2µs making 2 calls to YAML::PP::Constructor::set_anchors, avg 1µs/call |
69 | 2 | 11µs | 4 | 17µs | $self->set_yaml_version($self->default_yaml_version); # spent 9µs making 2 calls to YAML::PP::Constructor::set_yaml_version, avg 4µs/call
# spent 8µs making 2 calls to YAML::PP::Constructor::default_yaml_version, avg 4µs/call |
70 | 2 | 23µs | 6 | 2µs | $self->set_schema($self->schemas->{ $self->yaml_version } ); # spent 2µs making 2 calls to YAML::PP::Constructor::schemas, avg 1µs/call
# spent 0s making 2 calls to YAML::PP::Constructor::set_schema, avg 0s/call
# spent 0s making 2 calls to YAML::PP::Constructor::yaml_version, avg 0s/call |
71 | } | ||||
72 | |||||
73 | 2 | 3µs | # spent 0s within YAML::PP::Constructor::docs which was called 2 times, avg 0s/call:
# once (0s+0s) by YAML::PP::Constructor::document_end_event at line 120
# once (0s+0s) by YAML::PP::Loader::load at line 96 of YAML/PP/Loader.pm | ||
74 | 36111 | 52.8ms | # spent 18.2ms within YAML::PP::Constructor::stack which was called 36111 times, avg 505ns/call:
# 20941 times (10.9ms+0s) by YAML::PP::Constructor::scalar_event at line 288, avg 523ns/call
# 6939 times (3.64ms+0s) by YAML::PP::Constructor::mapping_start_event at line 136, avg 524ns/call
# 6939 times (2.96ms+0s) by YAML::PP::Constructor::mapping_end_event at line 164, avg 427ns/call
# 645 times (380µs+0s) by YAML::PP::Constructor::sequence_start_event at line 237, avg 589ns/call
# 645 times (305µs+0s) by YAML::PP::Constructor::sequence_end_event at line 262, avg 473ns/call
# once (1µs+0s) by YAML::PP::Constructor::document_start_event at line 95
# once (0s+0s) by YAML::PP::Constructor::document_end_event at line 114 | ||
75 | sub anchors { return $_[0]->{anchors} } | ||||
76 | 2 | 8µs | # spent 4µs within YAML::PP::Constructor::set_docs which was called 2 times, avg 2µs/call:
# 2 times (4µs+0s) by YAML::PP::Constructor::init at line 66, avg 2µs/call | ||
77 | 3 | 7µs | sub set_stack { $_[0]->{stack} = $_[1] } | ||
78 | 3 | 5µs | sub set_anchors { $_[0]->{anchors} = $_[1] } | ||
79 | 2 | 4µs | # spent 2µs within YAML::PP::Constructor::schemas which was called 2 times, avg 1µs/call:
# 2 times (2µs+0s) by YAML::PP::Constructor::init at line 70, avg 1µs/call | ||
80 | 28525 | 44.6ms | # spent 16.0ms within YAML::PP::Constructor::schema which was called 28525 times, avg 561ns/call:
# 20941 times (11.7ms+0s) by YAML::PP::Constructor::scalar_event at line 287, avg 558ns/call
# 6939 times (3.95ms+0s) by YAML::PP::Constructor::mapping_start_event at line 128, avg 569ns/call
# 645 times (372µs+0s) by YAML::PP::Constructor::sequence_start_event at line 229, avg 577ns/call | ||
81 | 2 | 3µs | # spent 0s within YAML::PP::Constructor::set_schema which was called 2 times, avg 0s/call:
# 2 times (0s+0s) by YAML::PP::Constructor::init at line 70, avg 0s/call | ||
82 | sub cyclic_refs { return $_[0]->{cyclic_refs} } | ||||
83 | sub set_cyclic_refs { $_[0]->{cyclic_refs} = $_[1] } | ||||
84 | 2 | 3µs | # spent 0s within YAML::PP::Constructor::yaml_version which was called 2 times, avg 0s/call:
# 2 times (0s+0s) by YAML::PP::Constructor::init at line 70, avg 0s/call | ||
85 | 2 | 11µs | # spent 9µs within YAML::PP::Constructor::set_yaml_version which was called 2 times, avg 4µs/call:
# 2 times (9µs+0s) by YAML::PP::Constructor::init at line 69, avg 4µs/call | ||
86 | 2 | 4µs | # spent 8µs within YAML::PP::Constructor::default_yaml_version which was called 2 times, avg 4µs/call:
# 2 times (8µs+0s) by YAML::PP::Constructor::init at line 69, avg 4µs/call | ||
87 | 6939 | 14.5ms | # spent 6.29ms within YAML::PP::Constructor::preserve_order which was called 6939 times, avg 906ns/call:
# 6939 times (6.29ms+0s) by YAML::PP::Constructor::mapping_start_event at line 138, avg 906ns/call | ||
88 | 20941 | 32.3ms | # spent 13.3ms within YAML::PP::Constructor::preserve_scalar_style which was called 20941 times, avg 635ns/call:
# 20941 times (13.3ms+0s) by YAML::PP::Constructor::scalar_event at line 290, avg 635ns/call | ||
89 | 7584 | 13.9ms | # spent 6.15ms within YAML::PP::Constructor::preserve_flow_style which was called 7584 times, avg 811ns/call:
# 6939 times (5.59ms+0s) by YAML::PP::Constructor::mapping_start_event at line 139, avg 806ns/call
# 645 times (563µs+0s) by YAML::PP::Constructor::sequence_start_event at line 239, avg 873ns/call | ||
90 | 28525 | 45.2ms | # spent 17.5ms within YAML::PP::Constructor::preserve_alias which was called 28525 times, avg 614ns/call:
# 20941 times (13.6ms+0s) by YAML::PP::Constructor::scalar_event at line 289, avg 651ns/call
# 6939 times (3.58ms+0s) by YAML::PP::Constructor::mapping_start_event at line 140, avg 515ns/call
# 645 times (297µs+0s) by YAML::PP::Constructor::sequence_start_event at line 240, avg 460ns/call | ||
91 | sub duplicate_keys { return $_[0]->{duplicate_keys} } | ||||
92 | |||||
93 | # spent 11µs (10+1000ns) within YAML::PP::Constructor::document_start_event which was called:
# once (10µs+1000ns) by YAML::PP::Parser::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Parser.pm:62] at line 61 of YAML/PP/Parser.pm | ||||
94 | 1 | 0s | my ($self, $event) = @_; | ||
95 | 1 | 3µs | 1 | 1µs | my $stack = $self->stack; # spent 1µs making 1 call to YAML::PP::Constructor::stack |
96 | 1 | 0s | if ($event->{version_directive}) { | ||
97 | my $version = $event->{version_directive}; | ||||
98 | $version = "$version->{major}.$version->{minor}"; | ||||
99 | if ($self->{schemas}->{ $version }) { | ||||
100 | $self->set_yaml_version($version); | ||||
101 | $self->set_schema($self->schemas->{ $version }); | ||||
102 | } | ||||
103 | else { | ||||
104 | $self->set_yaml_version($self->default_yaml_version); | ||||
105 | $self->set_schema($self->schemas->{ $self->default_yaml_version }); | ||||
106 | } | ||||
107 | } | ||||
108 | 1 | 0s | my $ref = []; | ||
109 | 1 | 6µs | push @$stack, { type => 'document', ref => $ref, data => $ref, event => $event }; | ||
110 | } | ||||
111 | |||||
112 | # spent 18µs (16+2) within YAML::PP::Constructor::document_end_event which was called:
# once (16µs+2µs) by YAML::PP::Parser::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Parser.pm:62] at line 61 of YAML/PP/Parser.pm | ||||
113 | 1 | 0s | my ($self, $event) = @_; | ||
114 | 1 | 0s | 1 | 0s | my $stack = $self->stack; # spent 0s making 1 call to YAML::PP::Constructor::stack |
115 | 1 | 0s | my $last = pop @$stack; | ||
116 | 1 | 1µs | $last->{type} eq 'document' or die "Expected mapping, but got $last->{type}"; | ||
117 | 1 | 0s | if (@$stack) { | ||
118 | die "Got unexpected end of document"; | ||||
119 | } | ||||
120 | 1 | 1µs | 1 | 0s | my $docs = $self->docs; # spent 0s making 1 call to YAML::PP::Constructor::docs |
121 | 1 | 1µs | push @$docs, $last->{ref}->[0]; | ||
122 | 1 | 2µs | 1 | 1µs | $self->set_anchors({}); # spent 1µs making 1 call to YAML::PP::Constructor::set_anchors |
123 | 1 | 6µs | 1 | 1µs | $self->set_stack([]); # spent 1µs making 1 call to YAML::PP::Constructor::set_stack |
124 | } | ||||
125 | |||||
126 | # spent 172ms (113+58.8) within YAML::PP::Constructor::mapping_start_event which was called 6939 times, avg 25µs/call:
# 6939 times (113ms+58.8ms) by YAML::PP::Parser::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Parser.pm:62] at line 61 of YAML/PP/Parser.pm, avg 25µs/call | ||||
127 | 6939 | 1.90ms | my ($self, $event) = @_; | ||
128 | 6939 | 16.5ms | 13878 | 39.7ms | my ($data, $on_data) = $self->schema->create_mapping($self, $event); # spent 35.8ms making 6939 calls to YAML::PP::Schema::create_mapping, avg 5µs/call
# spent 3.95ms making 6939 calls to YAML::PP::Constructor::schema, avg 569ns/call |
129 | 6939 | 15.8ms | my $ref = { | ||
130 | type => 'mapping', | ||||
131 | ref => [], | ||||
132 | data => \$data, | ||||
133 | event => $event, | ||||
134 | on_data => $on_data, | ||||
135 | }; | ||||
136 | 6939 | 5.97ms | 6939 | 3.64ms | my $stack = $self->stack; # spent 3.64ms making 6939 calls to YAML::PP::Constructor::stack, avg 524ns/call |
137 | |||||
138 | 6939 | 6.45ms | 6939 | 6.29ms | my $preserve_order = $self->preserve_order; # spent 6.29ms making 6939 calls to YAML::PP::Constructor::preserve_order, avg 906ns/call |
139 | 6939 | 6.20ms | 6939 | 5.59ms | my $preserve_style = $self->preserve_flow_style; # spent 5.59ms making 6939 calls to YAML::PP::Constructor::preserve_flow_style, avg 806ns/call |
140 | 6939 | 5.28ms | 6939 | 3.58ms | my $preserve_alias = $self->preserve_alias; # spent 3.58ms making 6939 calls to YAML::PP::Constructor::preserve_alias, avg 515ns/call |
141 | 6939 | 2.22ms | if (($preserve_order or $preserve_style or $preserve_alias) and not tied(%$data)) { | ||
142 | tie %$data, 'YAML::PP::Preserve::Hash', %$data; | ||||
143 | } | ||||
144 | 6939 | 1.17ms | if ($preserve_style) { | ||
145 | my $t = tied %$data; | ||||
146 | $t->{style} = $event->{style}; | ||||
147 | } | ||||
148 | |||||
149 | 6939 | 1.87ms | push @$stack, $ref; | ||
150 | 6939 | 15.9ms | if (defined(my $anchor = $event->{anchor})) { | ||
151 | if ($preserve_alias) { | ||||
152 | my $t = tied %$data; | ||||
153 | unless (exists $self->anchors->{ $anchor }) { | ||||
154 | # Repeated anchors cannot be preserved | ||||
155 | $t->{alias} = $anchor; | ||||
156 | } | ||||
157 | } | ||||
158 | $self->anchors->{ $anchor } = { data => $ref->{data} }; | ||||
159 | } | ||||
160 | } | ||||
161 | |||||
162 | # spent 193ms (135+58.5) within YAML::PP::Constructor::mapping_end_event which was called 6939 times, avg 28µs/call:
# 6939 times (135ms+58.5ms) by YAML::PP::Parser::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Parser.pm:62] at line 61 of YAML/PP/Parser.pm, avg 28µs/call | ||||
163 | 6939 | 1.68ms | my ($self, $event) = @_; | ||
164 | 6939 | 4.75ms | 6939 | 2.96ms | my $stack = $self->stack; # spent 2.96ms making 6939 calls to YAML::PP::Constructor::stack, avg 427ns/call |
165 | |||||
166 | 6939 | 1.66ms | my $last = pop @$stack; | ||
167 | 6939 | 4.52ms | my ($ref, $data) = @{ $last }{qw/ ref data /}; | ||
168 | 6939 | 2.68ms | $last->{type} eq 'mapping' or die "Expected mapping, but got $last->{type}"; | ||
169 | |||||
170 | 6939 | 1.22ms | my @merge_keys; | ||
171 | my @ref; | ||||
172 | 6939 | 9.16ms | for (my $i = 0; $i < @$ref; $i += 2) { | ||
173 | 13444 | 5.25ms | my $key = $ref->[ $i ]; | ||
174 | 13444 | 5.18ms | if (ref $key eq 'YAML::PP::Type::MergeKey') { | ||
175 | my $merge = $ref->[ $i + 1 ]; | ||||
176 | if ((reftype($merge) || '') eq 'HASH') { | ||||
177 | push @merge_keys, $merge; | ||||
178 | } | ||||
179 | elsif ((reftype($merge) || '') eq 'ARRAY') { | ||||
180 | for my $item (@$merge) { | ||||
181 | if ((reftype($item) || '') eq 'HASH') { | ||||
182 | push @merge_keys, $item; | ||||
183 | } | ||||
184 | else { | ||||
185 | die "Expected hash for merge key"; | ||||
186 | } | ||||
187 | } | ||||
188 | } | ||||
189 | else { | ||||
190 | die "Expected hash or array for merge key"; | ||||
191 | } | ||||
192 | } | ||||
193 | else { | ||||
194 | 13444 | 7.01ms | push @ref, $key, $ref->[ $i + 1 ]; | ||
195 | } | ||||
196 | } | ||||
197 | 6939 | 3.43ms | for my $merge (@merge_keys) { | ||
198 | for my $key (keys %$merge) { | ||||
199 | unless (exists $$data->{ $key }) { | ||||
200 | $$data->{ $key } = $merge->{ $key }; | ||||
201 | } | ||||
202 | } | ||||
203 | } | ||||
204 | # spent 55.6ms within YAML::PP::Constructor::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Constructor.pm:218] which was called 6939 times, avg 8µs/call:
# 6939 times (55.6ms+0s) by YAML::PP::Constructor::mapping_end_event at line 219, avg 8µs/call | ||||
205 | 6939 | 1.58ms | my ($self, $hash, $items) = @_; | ||
206 | 6939 | 1.21ms | my %seen; | ||
207 | 6939 | 25.8ms | for (my $i = 0; $i < @$items; $i += 2) { | ||
208 | 13444 | 7.58ms | my ($key, $value) = @$items[ $i, $i + 1 ]; | ||
209 | 13444 | 1.87ms | $key = '' unless defined $key; | ||
210 | 13444 | 1.30ms | if (ref $key) { | ||
211 | $key = $self->stringify_complex($key); | ||||
212 | } | ||||
213 | 13444 | 15.5ms | if ($seen{ $key }++ and not $self->duplicate_keys) { | ||
214 | croak "Duplicate key '$key'"; | ||||
215 | } | ||||
216 | 13444 | 9.81ms | $$hash->{ $key } = $value; | ||
217 | } | ||||
218 | 6939 | 18.0ms | }; | ||
219 | 6939 | 7.82ms | 6939 | 55.6ms | $on_data->($self, $data, \@ref); # spent 55.6ms making 6939 calls to YAML::PP::Constructor::__ANON__[YAML/PP/Constructor.pm:218], avg 8µs/call |
220 | 6939 | 5.85ms | push @{ $stack->[-1]->{ref} }, $$data; | ||
221 | 6939 | 2.98ms | if (defined(my $anchor = $last->{event}->{anchor})) { | ||
222 | $self->anchors->{ $anchor }->{finished} = 1; | ||||
223 | } | ||||
224 | 6939 | 44.7ms | return; | ||
225 | } | ||||
226 | |||||
227 | # spent 18.8ms (13.0+5.79) within YAML::PP::Constructor::sequence_start_event which was called 645 times, avg 29µs/call:
# 645 times (13.0ms+5.79ms) by YAML::PP::Parser::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Parser.pm:62] at line 61 of YAML/PP/Parser.pm, avg 29µs/call | ||||
228 | 645 | 255µs | my ($self, $event) = @_; | ||
229 | 645 | 1.86ms | 1290 | 4.55ms | my ($data, $on_data) = $self->schema->create_sequence($self, $event); # spent 4.18ms making 645 calls to YAML::PP::Schema::create_sequence, avg 6µs/call
# spent 372µs making 645 calls to YAML::PP::Constructor::schema, avg 577ns/call |
230 | 645 | 1.93ms | my $ref = { | ||
231 | type => 'sequence', | ||||
232 | ref => [], | ||||
233 | data => \$data, | ||||
234 | event => $event, | ||||
235 | on_data => $on_data, | ||||
236 | }; | ||||
237 | 645 | 714µs | 645 | 380µs | my $stack = $self->stack; # spent 380µs making 645 calls to YAML::PP::Constructor::stack, avg 589ns/call |
238 | |||||
239 | 645 | 650µs | 645 | 563µs | my $preserve_style = $self->preserve_flow_style; # spent 563µs making 645 calls to YAML::PP::Constructor::preserve_flow_style, avg 873ns/call |
240 | 645 | 609µs | 645 | 297µs | my $preserve_alias = $self->preserve_alias; # spent 297µs making 645 calls to YAML::PP::Constructor::preserve_alias, avg 460ns/call |
241 | 645 | 383µs | if ($preserve_style or $preserve_alias and not tied(@$data)) { | ||
242 | tie @$data, 'YAML::PP::Preserve::Array', @$data; | ||||
243 | my $t = tied @$data; | ||||
244 | $t->{style} = $event->{style}; | ||||
245 | } | ||||
246 | |||||
247 | 645 | 283µs | push @$stack, $ref; | ||
248 | 645 | 1.92ms | if (defined(my $anchor = $event->{anchor})) { | ||
249 | if ($preserve_alias) { | ||||
250 | my $t = tied @$data; | ||||
251 | unless (exists $self->anchors->{ $anchor }) { | ||||
252 | # Repeated anchors cannot be preserved | ||||
253 | $t->{alias} = $anchor; | ||||
254 | } | ||||
255 | } | ||||
256 | $self->anchors->{ $anchor } = { data => $ref->{data} }; | ||||
257 | } | ||||
258 | } | ||||
259 | |||||
260 | # spent 11.6ms (9.95+1.66) within YAML::PP::Constructor::sequence_end_event which was called 645 times, avg 18µs/call:
# 645 times (9.95ms+1.66ms) by YAML::PP::Parser::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Parser.pm:62] at line 61 of YAML/PP/Parser.pm, avg 18µs/call | ||||
261 | 645 | 231µs | my ($self, $event) = @_; | ||
262 | 645 | 669µs | 645 | 305µs | my $stack = $self->stack; # spent 305µs making 645 calls to YAML::PP::Constructor::stack, avg 473ns/call |
263 | 645 | 240µs | my $last = pop @$stack; | ||
264 | 645 | 406µs | $last->{type} eq 'sequence' or die "Expected mapping, but got $last->{type}"; | ||
265 | 645 | 430µs | my ($ref, $data) = @{ $last }{qw/ ref data /}; | ||
266 | |||||
267 | # spent 1.36ms within YAML::PP::Constructor::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Constructor.pm:270] which was called 645 times, avg 2µs/call:
# 645 times (1.36ms+0s) by YAML::PP::Constructor::sequence_end_event at line 271, avg 2µs/call | ||||
268 | 645 | 116µs | my ($self, $array, $items) = @_; | ||
269 | 645 | 2.00ms | push @$$array, @$items; | ||
270 | 645 | 1.94ms | }; | ||
271 | 645 | 798µs | 645 | 1.36ms | $on_data->($self, $data, $ref); # spent 1.36ms making 645 calls to YAML::PP::Constructor::__ANON__[YAML/PP/Constructor.pm:270], avg 2µs/call |
272 | 645 | 549µs | push @{ $stack->[-1]->{ref} }, $$data; | ||
273 | 645 | 339µs | if (defined(my $anchor = $last->{event}->{anchor})) { | ||
274 | my $test = $self->anchors->{ $anchor }; | ||||
275 | $self->anchors->{ $anchor }->{finished} = 1; | ||||
276 | } | ||||
277 | 645 | 3.87ms | return; | ||
278 | } | ||||
279 | |||||
280 | 1 | 3µs | # spent 1µs within YAML::PP::Constructor::stream_start_event which was called:
# once (1µs+0s) by YAML::PP::Parser::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Parser.pm:62] at line 61 of YAML/PP/Parser.pm | ||
281 | |||||
282 | 1 | 27µs | # spent 1µs within YAML::PP::Constructor::stream_end_event which was called:
# once (1µs+0s) by YAML::PP::Parser::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Parser.pm:62] at line 61 of YAML/PP/Parser.pm | ||
283 | |||||
284 | # spent 887ms (229+658) within YAML::PP::Constructor::scalar_event which was called 20941 times, avg 42µs/call:
# 20941 times (229ms+658ms) by YAML::PP::Parser::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Parser.pm:62] at line 61 of YAML/PP/Parser.pm, avg 42µs/call | ||||
285 | 20941 | 4.12ms | my ($self, $event) = @_; | ||
286 | DEBUG and warn "CONTENT $event->{value} ($event->{style})\n"; | ||||
287 | 20941 | 36.5ms | 41882 | 620ms | my $value = $self->schema->load_scalar($self, $event); # spent 608ms making 20941 calls to YAML::PP::Schema::load_scalar, avg 29µs/call
# spent 11.7ms making 20941 calls to YAML::PP::Constructor::schema, avg 558ns/call |
288 | 20941 | 19.2ms | 20941 | 10.9ms | my $last = $self->stack->[-1]; # spent 10.9ms making 20941 calls to YAML::PP::Constructor::stack, avg 523ns/call |
289 | 20941 | 15.0ms | 20941 | 13.6ms | my $preserve_alias = $self->preserve_alias; # spent 13.6ms making 20941 calls to YAML::PP::Constructor::preserve_alias, avg 651ns/call |
290 | 20941 | 16.9ms | 20941 | 13.3ms | my $preserve_style = $self->preserve_scalar_style; # spent 13.3ms making 20941 calls to YAML::PP::Constructor::preserve_scalar_style, avg 635ns/call |
291 | 20941 | 4.22ms | if (($preserve_style or $preserve_alias) and not ref $value) { | ||
292 | my %args = ( | ||||
293 | value => $value, | ||||
294 | tag => $event->{tag}, | ||||
295 | ); | ||||
296 | if ($preserve_style) { | ||||
297 | $args{style} = $event->{style}; | ||||
298 | } | ||||
299 | if ($preserve_alias and defined $event->{anchor}) { | ||||
300 | my $anchor = $event->{anchor}; | ||||
301 | unless (exists $self->anchors->{ $anchor }) { | ||||
302 | # Repeated anchors cannot be preserved | ||||
303 | $args{alias} = $event->{anchor}; | ||||
304 | } | ||||
305 | } | ||||
306 | $value = YAML::PP::Preserve::Scalar->new( %args ); | ||||
307 | } | ||||
308 | 20941 | 6.33ms | if (defined (my $name = $event->{anchor})) { | ||
309 | $self->anchors->{ $name } = { data => \$value, finished => 1 }; | ||||
310 | } | ||||
311 | 20941 | 51.0ms | push @{ $last->{ref} }, $value; | ||
312 | } | ||||
313 | |||||
314 | sub alias_event { | ||||
315 | my ($self, $event) = @_; | ||||
316 | my $value; | ||||
317 | my $name = $event->{value}; | ||||
318 | if (my $anchor = $self->anchors->{ $name }) { | ||||
319 | # We know this is a cyclic ref since the node hasn't | ||||
320 | # been constructed completely yet | ||||
321 | unless ($anchor->{finished} ) { | ||||
322 | my $cyclic_refs = $self->cyclic_refs; | ||||
323 | if ($cyclic_refs ne 'allow') { | ||||
324 | if ($cyclic_refs eq 'fatal') { | ||||
325 | die "Found cyclic ref for alias '$name'"; | ||||
326 | } | ||||
327 | if ($cyclic_refs eq 'warn') { | ||||
328 | $anchor = { data => \undef }; | ||||
329 | warn "Found cyclic ref for alias '$name'"; | ||||
330 | } | ||||
331 | elsif ($cyclic_refs eq 'ignore') { | ||||
332 | $anchor = { data => \undef }; | ||||
333 | } | ||||
334 | } | ||||
335 | } | ||||
336 | $value = $anchor->{data}; | ||||
337 | } | ||||
338 | else { | ||||
339 | croak "No anchor defined for alias '$name'"; | ||||
340 | } | ||||
341 | my $last = $self->stack->[-1]; | ||||
342 | push @{ $last->{ref} }, $$value; | ||||
343 | } | ||||
344 | |||||
345 | sub stringify_complex { | ||||
346 | my ($self, $data) = @_; | ||||
347 | return $data if ( | ||||
348 | ref $data eq 'YAML::PP::Preserve::Scalar' | ||||
349 | and ($self->preserve_scalar_style or $self->preserve_alias) | ||||
350 | ); | ||||
351 | require Data::Dumper; | ||||
352 | local $Data::Dumper::Quotekeys = 0; | ||||
353 | local $Data::Dumper::Terse = 1; | ||||
354 | local $Data::Dumper::Indent = 0; | ||||
355 | local $Data::Dumper::Useqq = 0; | ||||
356 | local $Data::Dumper::Sortkeys = 1; | ||||
357 | my $string = Data::Dumper->Dump([$data], ['data']); | ||||
358 | $string =~ s/^\$data = //; | ||||
359 | return $string; | ||||
360 | } | ||||
361 | |||||
362 | 1 | 6µs | 1; | ||
363 | |||||
364 | __END__ | ||||
# spent 1µs within YAML::PP::Constructor::__ANON__ which was called:
# once (1µs+0s) by YAML::PP::Constructor::BEGIN@8 at line 8 |