Filename | /Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Constructor.pm |
Statements | Executed 604683 statements in 721ms |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
20941 | 1 | 1 | 247ms | 1.05s | scalar_event | YAML::PP::Constructor::
6939 | 1 | 1 | 159ms | 223ms | mapping_end_event | YAML::PP::Constructor::
6939 | 1 | 1 | 120ms | 188ms | mapping_start_event | YAML::PP::Constructor::
6939 | 1 | 1 | 60.3ms | 60.3ms | __ANON__[:218] | YAML::PP::Constructor::
36111 | 7 | 1 | 21.4ms | 21.4ms | stack | YAML::PP::Constructor::
28525 | 3 | 1 | 20.8ms | 20.8ms | preserve_alias | YAML::PP::Constructor::
28525 | 3 | 1 | 19.7ms | 19.7ms | schema | YAML::PP::Constructor::
20941 | 1 | 1 | 16.2ms | 16.2ms | preserve_scalar_style | YAML::PP::Constructor::
645 | 1 | 1 | 11.0ms | 12.8ms | sequence_end_event | YAML::PP::Constructor::
645 | 1 | 1 | 10.8ms | 16.8ms | sequence_start_event | YAML::PP::Constructor::
7584 | 2 | 1 | 8.05ms | 8.05ms | preserve_flow_style | YAML::PP::Constructor::
6939 | 1 | 1 | 7.60ms | 7.60ms | preserve_order | YAML::PP::Constructor::
645 | 1 | 1 | 1.52ms | 1.52ms | __ANON__[:270] | YAML::PP::Constructor::
2 | 2 | 2 | 53µs | 79µs | init | YAML::PP::Constructor::
1 | 1 | 1 | 27µs | 31µs | BEGIN@2.290 | YAML::PP::Loader::
1 | 1 | 1 | 22µs | 67µs | new | YAML::PP::Constructor::
1 | 1 | 1 | 18µs | 18µs | BEGIN@8 | YAML::PP::Constructor::
1 | 1 | 1 | 17µs | 23µs | document_end_event | YAML::PP::Constructor::
1 | 1 | 1 | 9µs | 11µs | document_start_event | YAML::PP::Constructor::
2 | 1 | 1 | 8µs | 8µs | set_docs | YAML::PP::Constructor::
1 | 1 | 1 | 6µs | 17µs | BEGIN@12 | YAML::PP::Constructor::
1 | 1 | 1 | 6µs | 38µs | BEGIN@3.291 | YAML::PP::Loader::
1 | 1 | 1 | 5µs | 56µs | BEGIN@15 | YAML::PP::Constructor::
1 | 1 | 1 | 5µs | 42µs | BEGIN@9 | YAML::PP::Constructor::
1 | 1 | 1 | 4µs | 12µs | BEGIN@13 | YAML::PP::Constructor::
2 | 1 | 1 | 4µs | 4µs | set_schema | YAML::PP::Constructor::
3 | 2 | 1 | 4µs | 4µs | set_stack | YAML::PP::Constructor::
1 | 1 | 1 | 3µs | 19µs | BEGIN@16 | YAML::PP::Constructor::
2 | 1 | 1 | 3µs | 3µs | default_yaml_version | YAML::PP::Constructor::
2 | 2 | 2 | 3µs | 3µs | docs | YAML::PP::Constructor::
2 | 1 | 1 | 3µs | 3µs | schemas | YAML::PP::Constructor::
3 | 2 | 1 | 3µs | 3µs | set_anchors | YAML::PP::Constructor::
2 | 1 | 1 | 2µs | 2µs | set_yaml_version | YAML::PP::Constructor::
1 | 1 | 1 | 2µs | 2µs | stream_end_event | YAML::PP::Constructor::
2 | 1 | 1 | 2µs | 2µs | yaml_version | YAML::PP::Constructor::
1 | 1 | 1 | 0s | 0s | __ANON__ (xsub) | 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::
0 | 0 | 0 | 0s | 0s | duplicate_keys | YAML::PP::Constructor::
0 | 0 | 0 | 0s | 0s | set_cyclic_refs | YAML::PP::Constructor::
1 | 1 | 1 | 0s | 0s | stream_start_event | YAML::PP::Constructor::
0 | 0 | 0 | 0s | 0s | stringify_complex | YAML::PP::Constructor::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | # ABSTRACT: Construct data structure from Parser Events | ||||
2 | 2 | 28µs | 2 | 35µs | # spent 31µs (27+4) within YAML::PP::Loader::BEGIN@2.290 which was called:
# once (27µs+4µs) by YAML::PP::Loader::BEGIN@9 at line 2 # spent 31µs making 1 call to YAML::PP::Loader::BEGIN@2.290
# spent 4µs making 1 call to strict::import |
3 | 2 | 31µs | 2 | 70µs | # spent 38µs (6+32) within YAML::PP::Loader::BEGIN@3.291 which was called:
# once (6µs+32µs) by YAML::PP::Loader::BEGIN@9 at line 3 # spent 38µs making 1 call to YAML::PP::Loader::BEGIN@3.291
# spent 32µ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 | 34µs | 2 | 18µs | # spent 18µs within YAML::PP::Constructor::BEGIN@8 which was called:
# once (18µs+0s) by YAML::PP::Loader::BEGIN@9 at line 8 # spent 18µs making 1 call to YAML::PP::Constructor::BEGIN@8
# spent 0s making 1 call to YAML::PP::Constructor::__ANON__ |
9 | 1 | 0s | # spent 42µs (5+37) within YAML::PP::Constructor::BEGIN@9 which was called:
# once (5µs+37µs) by YAML::PP::Loader::BEGIN@9 at line 11 | ||
10 | PRESERVE_ORDER PRESERVE_SCALAR_STYLE PRESERVE_FLOW_STYLE PRESERVE_ALIAS | ||||
11 | 1 | 17µs | 2 | 79µs | /; # spent 42µs making 1 call to YAML::PP::Constructor::BEGIN@9
# spent 37µs making 1 call to Exporter::import |
12 | 2 | 17µs | 2 | 28µs | # spent 17µs (6+11) within YAML::PP::Constructor::BEGIN@12 which was called:
# once (6µs+11µs) by YAML::PP::Loader::BEGIN@9 at line 12 # spent 17µs making 1 call to YAML::PP::Constructor::BEGIN@12
# spent 11µs making 1 call to Exporter::import |
13 | 2 | 25µs | 2 | 20µs | # spent 12µs (4+8) within YAML::PP::Constructor::BEGIN@13 which was called:
# once (4µs+8µs) by YAML::PP::Loader::BEGIN@9 at line 13 # spent 12µs making 1 call to YAML::PP::Constructor::BEGIN@13
# spent 8µs making 1 call to Exporter::import |
14 | |||||
15 | 2 | 25µs | 2 | 107µs | # spent 56µs (5+51) within YAML::PP::Constructor::BEGIN@15 which was called:
# once (5µs+51µs) by YAML::PP::Loader::BEGIN@9 at line 15 # spent 56µs making 1 call to YAML::PP::Constructor::BEGIN@15
# spent 51µs making 1 call to constant::import |
16 | 2 | 1.83ms | 2 | 35µs | # spent 19µs (3+16) within YAML::PP::Constructor::BEGIN@16 which was called:
# once (3µs+16µs) by YAML::PP::Loader::BEGIN@9 at line 16 # spent 19µs making 1 call to YAML::PP::Constructor::BEGIN@16
# spent 16µ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 67µs (22+45) within YAML::PP::Constructor::new which was called:
# once (22µ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 | 1µs | my $preserve = delete $args{preserve} || 0; | ||
29 | 1 | 1µs | 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 | 1µs | 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 | 3µ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 79µs (53+26) within YAML::PP::Constructor::init which was called 2 times, avg 40µs/call:
# once (31µs+14µs) by YAML::PP::Constructor::new at line 48
# once (22µs+12µs) by YAML::PP::Loader::load at line 93 of YAML/PP/Loader.pm | ||||
65 | 2 | 1µs | my ($self) = @_; | ||
66 | 2 | 6µs | 2 | 8µs | $self->set_docs([]); # spent 8µs making 2 calls to YAML::PP::Constructor::set_docs, avg 4µs/call |
67 | 2 | 2µs | 2 | 3µs | $self->set_stack([]); # spent 3µs making 2 calls to YAML::PP::Constructor::set_stack, avg 2µs/call |
68 | 2 | 2µs | 2 | 1µs | $self->set_anchors({}); # spent 1µs making 2 calls to YAML::PP::Constructor::set_anchors, avg 500ns/call |
69 | 2 | 5µs | 4 | 5µs | $self->set_yaml_version($self->default_yaml_version); # spent 3µs making 2 calls to YAML::PP::Constructor::default_yaml_version, avg 2µs/call
# spent 2µs making 2 calls to YAML::PP::Constructor::set_yaml_version, avg 1µs/call |
70 | 2 | 15µs | 6 | 9µs | $self->set_schema($self->schemas->{ $self->yaml_version } ); # spent 4µs making 2 calls to YAML::PP::Constructor::set_schema, avg 2µs/call
# spent 3µs making 2 calls to YAML::PP::Constructor::schemas, avg 2µs/call
# spent 2µs making 2 calls to YAML::PP::Constructor::yaml_version, avg 1µs/call |
71 | } | ||||
72 | |||||
73 | 2 | 4µs | # spent 3µs within YAML::PP::Constructor::docs which was called 2 times, avg 2µs/call:
# once (2µs+0s) by YAML::PP::Constructor::document_end_event at line 120
# once (1µs+0s) by YAML::PP::Loader::load at line 96 of YAML/PP/Loader.pm | ||
74 | 36111 | 55.3ms | # spent 21.4ms within YAML::PP::Constructor::stack which was called 36111 times, avg 592ns/call:
# 20941 times (13.5ms+0s) by YAML::PP::Constructor::scalar_event at line 288, avg 645ns/call
# 6939 times (4.23ms+0s) by YAML::PP::Constructor::mapping_start_event at line 136, avg 610ns/call
# 6939 times (2.97ms+0s) by YAML::PP::Constructor::mapping_end_event at line 164, avg 427ns/call
# 645 times (388µs+0s) by YAML::PP::Constructor::sequence_start_event at line 237, avg 602ns/call
# 645 times (270µs+0s) by YAML::PP::Constructor::sequence_end_event at line 262, avg 419ns/call
# once (2µs+0s) by YAML::PP::Constructor::document_start_event at line 95
# once (1µs+0s) by YAML::PP::Constructor::document_end_event at line 114 | ||
75 | sub anchors { return $_[0]->{anchors} } | ||||
76 | 2 | 11µs | # spent 8µs within YAML::PP::Constructor::set_docs which was called 2 times, avg 4µs/call:
# 2 times (8µs+0s) by YAML::PP::Constructor::init at line 66, avg 4µs/call | ||
77 | 3 | 8µs | sub set_stack { $_[0]->{stack} = $_[1] } | ||
78 | 3 | 9µs | sub set_anchors { $_[0]->{anchors} = $_[1] } | ||
79 | 2 | 5µs | # spent 3µs within YAML::PP::Constructor::schemas which was called 2 times, avg 2µs/call:
# 2 times (3µs+0s) by YAML::PP::Constructor::init at line 70, avg 2µs/call | ||
80 | 28525 | 44.3ms | # spent 19.7ms within YAML::PP::Constructor::schema which was called 28525 times, avg 692ns/call:
# 20941 times (13.8ms+0s) by YAML::PP::Constructor::scalar_event at line 287, avg 658ns/call
# 6939 times (5.52ms+0s) by YAML::PP::Constructor::mapping_start_event at line 128, avg 795ns/call
# 645 times (435µs+0s) by YAML::PP::Constructor::sequence_start_event at line 229, avg 674ns/call | ||
81 | 2 | 7µs | # spent 4µs within YAML::PP::Constructor::set_schema which was called 2 times, avg 2µs/call:
# 2 times (4µs+0s) by YAML::PP::Constructor::init at line 70, avg 2µs/call | ||
82 | sub cyclic_refs { return $_[0]->{cyclic_refs} } | ||||
83 | sub set_cyclic_refs { $_[0]->{cyclic_refs} = $_[1] } | ||||
84 | 2 | 4µs | # spent 2µs within YAML::PP::Constructor::yaml_version 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 | ||
85 | 2 | 4µs | # spent 2µs within YAML::PP::Constructor::set_yaml_version which was called 2 times, avg 1µs/call:
# 2 times (2µs+0s) by YAML::PP::Constructor::init at line 69, avg 1µs/call | ||
86 | 2 | 10µs | # spent 3µs within YAML::PP::Constructor::default_yaml_version which was called 2 times, avg 2µs/call:
# 2 times (3µs+0s) by YAML::PP::Constructor::init at line 69, avg 2µs/call | ||
87 | 6939 | 14.3ms | # spent 7.60ms within YAML::PP::Constructor::preserve_order which was called 6939 times, avg 1µs/call:
# 6939 times (7.60ms+0s) by YAML::PP::Constructor::mapping_start_event at line 138, avg 1µs/call | ||
88 | 20941 | 34.1ms | # spent 16.2ms within YAML::PP::Constructor::preserve_scalar_style which was called 20941 times, avg 771ns/call:
# 20941 times (16.2ms+0s) by YAML::PP::Constructor::scalar_event at line 290, avg 771ns/call | ||
89 | 7584 | 13.0ms | # spent 8.05ms within YAML::PP::Constructor::preserve_flow_style which was called 7584 times, avg 1µs/call:
# 6939 times (7.37ms+0s) by YAML::PP::Constructor::mapping_start_event at line 139, avg 1µs/call
# 645 times (677µs+0s) by YAML::PP::Constructor::sequence_start_event at line 239, avg 1µs/call | ||
90 | 28525 | 45.9ms | # spent 20.8ms within YAML::PP::Constructor::preserve_alias which was called 28525 times, avg 729ns/call:
# 20941 times (16.5ms+0s) by YAML::PP::Constructor::scalar_event at line 289, avg 786ns/call
# 6939 times (3.98ms+0s) by YAML::PP::Constructor::mapping_start_event at line 140, avg 574ns/call
# 645 times (334µs+0s) by YAML::PP::Constructor::sequence_start_event at line 240, avg 518ns/call | ||
91 | sub duplicate_keys { return $_[0]->{duplicate_keys} } | ||||
92 | |||||
93 | # spent 11µs (9+2) within YAML::PP::Constructor::document_start_event which was called:
# once (9µ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 | ||||
94 | 1 | 1µs | my ($self, $event) = @_; | ||
95 | 1 | 2µs | 1 | 2µs | my $stack = $self->stack; # spent 2µ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 | 5µs | push @$stack, { type => 'document', ref => $ref, data => $ref, event => $event }; | ||
110 | } | ||||
111 | |||||
112 | # spent 23µs (17+6) within YAML::PP::Constructor::document_end_event which was called:
# once (17µs+6µ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 | 1µs | my ($self, $event) = @_; | ||
114 | 1 | 2µs | 1 | 1µs | my $stack = $self->stack; # spent 1µs 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 | 2µs | my $docs = $self->docs; # spent 2µs making 1 call to YAML::PP::Constructor::docs |
121 | 1 | 0s | push @$docs, $last->{ref}->[0]; | ||
122 | 1 | 2µs | 1 | 2µs | $self->set_anchors({}); # spent 2µs making 1 call to YAML::PP::Constructor::set_anchors |
123 | 1 | 4µs | 1 | 1µs | $self->set_stack([]); # spent 1µs making 1 call to YAML::PP::Constructor::set_stack |
124 | } | ||||
125 | |||||
126 | # spent 188ms (120+68.1) within YAML::PP::Constructor::mapping_start_event which was called 6939 times, avg 27µs/call:
# 6939 times (120ms+68.1ms) 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 27µs/call | ||||
127 | 6939 | 2.14ms | my ($self, $event) = @_; | ||
128 | 6939 | 19.2ms | 13878 | 44.9ms | my ($data, $on_data) = $self->schema->create_mapping($self, $event); # spent 39.3ms making 6939 calls to YAML::PP::Schema::create_mapping, avg 6µs/call
# spent 5.52ms making 6939 calls to YAML::PP::Constructor::schema, avg 795ns/call |
129 | 6939 | 19.1ms | my $ref = { | ||
130 | type => 'mapping', | ||||
131 | ref => [], | ||||
132 | data => \$data, | ||||
133 | event => $event, | ||||
134 | on_data => $on_data, | ||||
135 | }; | ||||
136 | 6939 | 6.41ms | 6939 | 4.23ms | my $stack = $self->stack; # spent 4.23ms making 6939 calls to YAML::PP::Constructor::stack, avg 610ns/call |
137 | |||||
138 | 6939 | 8.51ms | 6939 | 7.60ms | my $preserve_order = $self->preserve_order; # spent 7.60ms making 6939 calls to YAML::PP::Constructor::preserve_order, avg 1µs/call |
139 | 6939 | 7.57ms | 6939 | 7.37ms | my $preserve_style = $self->preserve_flow_style; # spent 7.37ms making 6939 calls to YAML::PP::Constructor::preserve_flow_style, avg 1µs/call |
140 | 6939 | 5.94ms | 6939 | 3.98ms | my $preserve_alias = $self->preserve_alias; # spent 3.98ms making 6939 calls to YAML::PP::Constructor::preserve_alias, avg 574ns/call |
141 | 6939 | 1.97ms | 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.40ms | if ($preserve_style) { | ||
145 | my $t = tied %$data; | ||||
146 | $t->{style} = $event->{style}; | ||||
147 | } | ||||
148 | |||||
149 | 6939 | 2.18ms | push @$stack, $ref; | ||
150 | 6939 | 16.4ms | 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 223ms (159+63.3) within YAML::PP::Constructor::mapping_end_event which was called 6939 times, avg 32µs/call:
# 6939 times (159ms+63.3ms) 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 32µs/call | ||||
163 | 6939 | 1.57ms | my ($self, $event) = @_; | ||
164 | 6939 | 5.21ms | 6939 | 2.97ms | my $stack = $self->stack; # spent 2.97ms making 6939 calls to YAML::PP::Constructor::stack, avg 427ns/call |
165 | |||||
166 | 6939 | 1.98ms | my $last = pop @$stack; | ||
167 | 6939 | 5.09ms | my ($ref, $data) = @{ $last }{qw/ ref data /}; | ||
168 | 6939 | 2.64ms | $last->{type} eq 'mapping' or die "Expected mapping, but got $last->{type}"; | ||
169 | |||||
170 | 6939 | 1.56ms | my @merge_keys; | ||
171 | my @ref; | ||||
172 | 6939 | 9.92ms | for (my $i = 0; $i < @$ref; $i += 2) { | ||
173 | 13444 | 6.93ms | my $key = $ref->[ $i ]; | ||
174 | 13444 | 4.59ms | 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 | 6.99ms | push @ref, $key, $ref->[ $i + 1 ]; | ||
195 | } | ||||
196 | } | ||||
197 | 6939 | 3.63ms | 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 60.3ms 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 9µs/call:
# 6939 times (60.3ms+0s) by YAML::PP::Constructor::mapping_end_event at line 219, avg 9µs/call | ||||
205 | 6939 | 1.76ms | my ($self, $hash, $items) = @_; | ||
206 | 6939 | 1.29ms | my %seen; | ||
207 | 6939 | 43.7ms | for (my $i = 0; $i < @$items; $i += 2) { | ||
208 | 13444 | 7.84ms | my ($key, $value) = @$items[ $i, $i + 1 ]; | ||
209 | 13444 | 1.99ms | $key = '' unless defined $key; | ||
210 | 13444 | 1.31ms | if (ref $key) { | ||
211 | $key = $self->stringify_complex($key); | ||||
212 | } | ||||
213 | 13444 | 17.4ms | if ($seen{ $key }++ and not $self->duplicate_keys) { | ||
214 | croak "Duplicate key '$key'"; | ||||
215 | } | ||||
216 | 13444 | 10.7ms | $$hash->{ $key } = $value; | ||
217 | } | ||||
218 | 6939 | 20.5ms | }; | ||
219 | 6939 | 7.37ms | 6939 | 60.3ms | $on_data->($self, $data, \@ref); # spent 60.3ms making 6939 calls to YAML::PP::Constructor::__ANON__[YAML/PP/Constructor.pm:218], avg 9µs/call |
220 | 6939 | 6.89ms | push @{ $stack->[-1]->{ref} }, $$data; | ||
221 | 6939 | 3.50ms | if (defined(my $anchor = $last->{event}->{anchor})) { | ||
222 | $self->anchors->{ $anchor }->{finished} = 1; | ||||
223 | } | ||||
224 | 6939 | 46.2ms | return; | ||
225 | } | ||||
226 | |||||
227 | # spent 16.8ms (10.8+5.99) within YAML::PP::Constructor::sequence_start_event which was called 645 times, avg 26µs/call:
# 645 times (10.8ms+5.99ms) 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 26µs/call | ||||
228 | 645 | 292µs | my ($self, $event) = @_; | ||
229 | 645 | 1.95ms | 1290 | 4.59ms | my ($data, $on_data) = $self->schema->create_sequence($self, $event); # spent 4.15ms making 645 calls to YAML::PP::Schema::create_sequence, avg 6µs/call
# spent 435µs making 645 calls to YAML::PP::Constructor::schema, avg 674ns/call |
230 | 645 | 1.87ms | my $ref = { | ||
231 | type => 'sequence', | ||||
232 | ref => [], | ||||
233 | data => \$data, | ||||
234 | event => $event, | ||||
235 | on_data => $on_data, | ||||
236 | }; | ||||
237 | 645 | 637µs | 645 | 388µs | my $stack = $self->stack; # spent 388µs making 645 calls to YAML::PP::Constructor::stack, avg 602ns/call |
238 | |||||
239 | 645 | 968µs | 645 | 677µs | my $preserve_style = $self->preserve_flow_style; # spent 677µs making 645 calls to YAML::PP::Constructor::preserve_flow_style, avg 1µs/call |
240 | 645 | 603µs | 645 | 334µs | my $preserve_alias = $self->preserve_alias; # spent 334µs making 645 calls to YAML::PP::Constructor::preserve_alias, avg 518ns/call |
241 | 645 | 384µ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 | 281µs | push @$stack, $ref; | ||
248 | 645 | 1.76ms | 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 12.8ms (11.0+1.79) within YAML::PP::Constructor::sequence_end_event which was called 645 times, avg 20µs/call:
# 645 times (11.0ms+1.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 20µs/call | ||||
261 | 645 | 347µs | my ($self, $event) = @_; | ||
262 | 645 | 685µs | 645 | 270µs | my $stack = $self->stack; # spent 270µs making 645 calls to YAML::PP::Constructor::stack, avg 419ns/call |
263 | 645 | 356µs | my $last = pop @$stack; | ||
264 | 645 | 503µs | $last->{type} eq 'sequence' or die "Expected mapping, but got $last->{type}"; | ||
265 | 645 | 644µs | my ($ref, $data) = @{ $last }{qw/ ref data /}; | ||
266 | |||||
267 | # spent 1.52ms 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.52ms+0s) by YAML::PP::Constructor::sequence_end_event at line 271, avg 2µs/call | ||||
268 | 645 | 154µs | my ($self, $array, $items) = @_; | ||
269 | 645 | 2.74ms | push @$$array, @$items; | ||
270 | 645 | 1.95ms | }; | ||
271 | 645 | 702µs | 645 | 1.52ms | $on_data->($self, $data, $ref); # spent 1.52ms making 645 calls to YAML::PP::Constructor::__ANON__[YAML/PP/Constructor.pm:270], avg 2µs/call |
272 | 645 | 535µs | push @{ $stack->[-1]->{ref} }, $$data; | ||
273 | 645 | 386µs | if (defined(my $anchor = $last->{event}->{anchor})) { | ||
274 | my $test = $self->anchors->{ $anchor }; | ||||
275 | $self->anchors->{ $anchor }->{finished} = 1; | ||||
276 | } | ||||
277 | 645 | 3.44ms | return; | ||
278 | } | ||||
279 | |||||
280 | 1 | 3µs | # spent 0s within YAML::PP::Constructor::stream_start_event which was called:
# once (0s+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 | 2µs | # spent 2µs within YAML::PP::Constructor::stream_end_event which was called:
# once (2µ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 1.05s (247ms+807ms) within YAML::PP::Constructor::scalar_event which was called 20941 times, avg 50µs/call:
# 20941 times (247ms+807ms) 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 50µs/call | ||||
285 | 20941 | 4.59ms | my ($self, $event) = @_; | ||
286 | DEBUG and warn "CONTENT $event->{value} ($event->{style})\n"; | ||||
287 | 20941 | 44.4ms | 41882 | 761ms | my $value = $self->schema->load_scalar($self, $event); # spent 747ms making 20941 calls to YAML::PP::Schema::load_scalar, avg 36µs/call
# spent 13.8ms making 20941 calls to YAML::PP::Constructor::schema, avg 658ns/call |
288 | 20941 | 22.9ms | 20941 | 13.5ms | my $last = $self->stack->[-1]; # spent 13.5ms making 20941 calls to YAML::PP::Constructor::stack, avg 645ns/call |
289 | 20941 | 17.8ms | 20941 | 16.5ms | my $preserve_alias = $self->preserve_alias; # spent 16.5ms making 20941 calls to YAML::PP::Constructor::preserve_alias, avg 786ns/call |
290 | 20941 | 20.3ms | 20941 | 16.2ms | my $preserve_style = $self->preserve_scalar_style; # spent 16.2ms making 20941 calls to YAML::PP::Constructor::preserve_scalar_style, avg 771ns/call |
291 | 20941 | 5.57ms | 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 | 8.32ms | if (defined (my $name = $event->{anchor})) { | ||
309 | $self->anchors->{ $name } = { data => \$value, finished => 1 }; | ||||
310 | } | ||||
311 | 20941 | 55.6ms | 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 | 5µs | 1; | ||
363 | |||||
364 | __END__ | ||||
# spent 0s within YAML::PP::Constructor::__ANON__ which was called:
# once (0s+0s) by YAML::PP::Constructor::BEGIN@8 at line 8 |