Filename | /Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Lexer.pm |
Statements | Executed 3206241 statements in 3.10s |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
61685 | 10 | 1 | 769ms | 889ms | _push_tokens | YAML::PP::Lexer::
27926 | 3 | 1 | 517ms | 1.08s | _fetch_next_tokens | YAML::PP::Lexer::
18884 | 1 | 1 | 450ms | 1.86s | fetch_plain | YAML::PP::Lexer::
18497 | 3 | 1 | 222ms | 355ms | _fetch_next_line | YAML::PP::Lexer::
13451 | 1 | 1 | 211ms | 1.00s | fetch_next_tokens | YAML::PP::Lexer::
58874 | 19 | 1 | 201ms | 201ms | CORE:regcomp (opcode) | YAML::PP::Lexer::
75666 | 16 | 1 | 181ms | 181ms | CORE:subst (opcode) | YAML::PP::Lexer::
160784 | 22 | 1 | 80.5ms | 80.5ms | line | YAML::PP::Lexer::
2056 | 1 | 1 | 66.3ms | 251ms | fetch_quoted | YAML::PP::Lexer::
2057 | 2 | 1 | 59.7ms | 64.1ms | push_subtokens | YAML::PP::Lexer::
2056 | 1 | 1 | 44.1ms | 59.1ms | _read_quoted_tokens | YAML::PP::Lexer::
63742 | 2 | 1 | 38.1ms | 38.1ms | set_offset | YAML::PP::Lexer::
77194 | 4 | 2 | 37.6ms | 37.6ms | next_tokens | YAML::PP::Lexer::
76215 | 7 | 2 | 36.5ms | 36.5ms | flowcontext | YAML::PP::Lexer::
63742 | 2 | 1 | 28.1ms | 28.1ms | offset | YAML::PP::Lexer::
13456 | 2 | 1 | 24.7ms | 24.7ms | CORE:match (opcode) | YAML::PP::Lexer::
39438 | 4 | 1 | 19.7ms | 19.7ms | next_line | YAML::PP::Lexer::
37475 | 1 | 1 | 19.5ms | 19.5ms | context | YAML::PP::Lexer::
26911 | 8 | 1 | 17.3ms | 17.3ms | set_next_line | YAML::PP::Lexer::
13455 | 1 | 1 | 8.54ms | 8.54ms | inc_line | YAML::PP::Lexer::
13455 | 1 | 1 | 8.24ms | 8.24ms | set_block | YAML::PP::Lexer::
13456 | 1 | 1 | 7.55ms | 7.55ms | reader | YAML::PP::Lexer::
14025 | 1 | 1 | 6.92ms | 6.92ms | block | YAML::PP::Lexer::
1 | 1 | 1 | 4.17ms | 4.47ms | BEGIN@10 | YAML::PP::Lexer::
1102 | 1 | 1 | 1.06ms | 1.06ms | set_flowcontext | YAML::PP::Lexer::
176 | 2 | 1 | 176µs | 176µs | set_context | YAML::PP::Lexer::
1 | 1 | 1 | 135µs | 423µs | fetch_block | YAML::PP::Lexer::
1 | 1 | 1 | 89µs | 158µs | BEGIN@2.285 | YAML::PP::Parser::
1 | 1 | 1 | 29µs | 33µs | BEGIN@1 | YAML::PP::Parser::
3 | 3 | 2 | 14µs | 14µs | init | YAML::PP::Lexer::
11 | 8 | 1 | 11µs | 11µs | CORE:qr (opcode) | YAML::PP::Lexer::
1 | 1 | 1 | 10µs | 32µs | BEGIN@11 | YAML::PP::Lexer::
1 | 1 | 1 | 10µs | 59µs | BEGIN@7 | YAML::PP::Lexer::
1 | 1 | 1 | 8µs | 33µs | BEGIN@8 | YAML::PP::Lexer::
1 | 1 | 1 | 5µs | 13µs | new | YAML::PP::Lexer::
1 | 1 | 1 | 4µs | 4µs | set_reader | YAML::PP::Lexer::
0 | 0 | 0 | 0s | 0s | _fetch_next_tokens_directive | YAML::PP::Lexer::
0 | 0 | 0 | 0s | 0s | _read_doublequoted | YAML::PP::Lexer::
0 | 0 | 0 | 0s | 0s | exception | YAML::PP::Lexer::
0 | 0 | 0 | 0s | 0s | set_line | YAML::PP::Lexer::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | 2 | 104µs | 2 | 37µs | # spent 33µs (29+4) within YAML::PP::Parser::BEGIN@1 which was called:
# once (29µs+4µs) by YAML::PP::Parser::BEGIN@18 at line 1 # spent 33µs making 1 call to YAML::PP::Parser::BEGIN@1
# spent 4µs making 1 call to strict::import |
2 | 2 | 83µs | 2 | 227µs | # spent 158µs (89+69) within YAML::PP::Parser::BEGIN@2.285 which was called:
# once (89µs+69µs) by YAML::PP::Parser::BEGIN@18 at line 2 # spent 158µs making 1 call to YAML::PP::Parser::BEGIN@2.285
# spent 69µs making 1 call to warnings::import |
3 | package YAML::PP::Lexer; | ||||
4 | |||||
5 | 1 | 1µs | our $VERSION = '0.035'; # VERSION | ||
6 | |||||
7 | 2 | 39µs | 2 | 108µs | # spent 59µs (10+49) within YAML::PP::Lexer::BEGIN@7 which was called:
# once (10µs+49µs) by YAML::PP::Parser::BEGIN@18 at line 7 # spent 59µs making 1 call to YAML::PP::Lexer::BEGIN@7
# spent 49µs making 1 call to constant::import |
8 | 2 | 28µs | 2 | 58µs | # spent 33µs (8+25) within YAML::PP::Lexer::BEGIN@8 which was called:
# once (8µs+25µs) by YAML::PP::Parser::BEGIN@18 at line 8 # spent 33µs making 1 call to YAML::PP::Lexer::BEGIN@8
# spent 25µs making 1 call to constant::import |
9 | |||||
10 | 2 | 609µs | 2 | 4.60ms | # spent 4.47ms (4.17+307µs) within YAML::PP::Lexer::BEGIN@10 which was called:
# once (4.17ms+307µs) by YAML::PP::Parser::BEGIN@18 at line 10 # spent 4.47ms making 1 call to YAML::PP::Lexer::BEGIN@10
# spent 128µs making 1 call to Exporter::import |
11 | 2 | 5.54ms | 2 | 54µs | # spent 32µs (10+22) within YAML::PP::Lexer::BEGIN@11 which was called:
# once (10µs+22µs) by YAML::PP::Parser::BEGIN@18 at line 11 # spent 32µs making 1 call to YAML::PP::Lexer::BEGIN@11
# spent 22µs making 1 call to Exporter::import |
12 | |||||
13 | # spent 13µs (5+8) within YAML::PP::Lexer::new which was called:
# once (5µs+8µs) by YAML::PP::Parser::new at line 29 of YAML/PP/Parser.pm | ||||
14 | 1 | 1µs | my ($class, %args) = @_; | ||
15 | my $self = bless { | ||||
16 | reader => $args{reader}, | ||||
17 | 1 | 1µs | }, $class; | ||
18 | 1 | 1µs | 1 | 8µs | $self->init; # spent 8µs making 1 call to YAML::PP::Lexer::init |
19 | 1 | 3µs | return $self; | ||
20 | } | ||||
21 | |||||
22 | # spent 14µs within YAML::PP::Lexer::init which was called 3 times, avg 5µs/call:
# once (8µs+0s) by YAML::PP::Lexer::new at line 18
# once (3µs+0s) by YAML::PP::Parser::parse at line 151 of YAML/PP/Parser.pm
# once (3µs+0s) by YAML::PP::Parser::init at line 115 of YAML/PP/Parser.pm | ||||
23 | 3 | 2µs | my ($self) = @_; | ||
24 | 3 | 3µs | $self->{next_tokens} = []; | ||
25 | 3 | 0s | $self->{next_line} = undef; | ||
26 | 3 | 2µs | $self->{line} = 0; | ||
27 | 3 | 0s | $self->{offset} = 0; | ||
28 | 3 | 15µs | $self->{flowcontext} = 0; | ||
29 | } | ||||
30 | |||||
31 | 39438 | 54.7ms | # spent 19.7ms within YAML::PP::Lexer::next_line which was called 39438 times, avg 500ns/call:
# 18884 times (10.0ms+0s) by YAML::PP::Lexer::fetch_plain at line 367, avg 530ns/call
# 18497 times (8.61ms+0s) by YAML::PP::Lexer::_fetch_next_line at line 136, avg 465ns/call
# 2056 times (1.09ms+0s) by YAML::PP::Lexer::fetch_quoted at line 620, avg 530ns/call
# once (0s+0s) by YAML::PP::Lexer::fetch_block at line 519 | ||
32 | 26911 | 43.0ms | # spent 17.3ms within YAML::PP::Lexer::set_next_line which was called 26911 times, avg 643ns/call:
# 13455 times (8.03ms+0s) by YAML::PP::Lexer::_fetch_next_line at line 150, avg 597ns/call
# 6386 times (4.25ms+0s) by YAML::PP::Lexer::fetch_plain at line 398, avg 665ns/call
# 5040 times (3.49ms+0s) by YAML::PP::Lexer::fetch_plain at line 392, avg 693ns/call
# 1424 times (1.08ms+0s) by YAML::PP::Lexer::fetch_quoted at line 706, avg 761ns/call
# 598 times (435µs+0s) by YAML::PP::Lexer::fetch_quoted at line 697, avg 727ns/call
# 6 times (4µs+0s) by YAML::PP::Lexer::fetch_block at line 561, avg 667ns/call
# once (1µs+0s) by YAML::PP::Lexer::_fetch_next_line at line 143
# once (0s+0s) by YAML::PP::Lexer::fetch_next_tokens at line 221 | ||
33 | 13456 | 18.0ms | # spent 7.55ms within YAML::PP::Lexer::reader which was called 13456 times, avg 561ns/call:
# 13456 times (7.55ms+0s) by YAML::PP::Lexer::_fetch_next_line at line 141, avg 561ns/call | ||
34 | 1 | 5µs | # spent 4µs within YAML::PP::Lexer::set_reader which was called:
# once (4µs+0s) by YAML::PP::Parser::set_reader at line 70 of YAML/PP/Parser.pm | ||
35 | 77194 | 111ms | # spent 37.6ms within YAML::PP::Lexer::next_tokens which was called 77194 times, avg 487ns/call:
# 61685 times (30.1ms+0s) by YAML::PP::Lexer::_push_tokens at line 880, avg 488ns/call
# 13451 times (6.39ms+0s) by YAML::PP::Lexer::fetch_next_tokens at line 182, avg 475ns/call
# 2057 times (1.12ms+0s) by YAML::PP::Lexer::push_subtokens at line 906, avg 542ns/call
# once (1µs+0s) by YAML::PP::Parser::parse_tokens at line 344 of YAML/PP/Parser.pm | ||
36 | 160784 | 216ms | # spent 80.5ms within YAML::PP::Lexer::line which was called 160784 times, avg 500ns/call:
# 61685 times (25.8ms+0s) by YAML::PP::Lexer::_push_tokens at line 881, avg 418ns/call
# 18884 times (15.0ms+0s) by YAML::PP::Lexer::fetch_plain at line 381, avg 796ns/call
# 18884 times (8.64ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 355, avg 458ns/call
# 14054 times (6.86ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 295, avg 488ns/call
# 13449 times (6.55ms+0s) by YAML::PP::Lexer::fetch_next_tokens at line 217, avg 487ns/call
# 7598 times (4.12ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 307, avg 542ns/call
# 6456 times (3.37ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 303, avg 522ns/call
# 5040 times (2.77ms+0s) by YAML::PP::Lexer::fetch_plain at line 391, avg 549ns/call
# 2057 times (916µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 278, avg 445ns/call
# 2057 times (884µs+0s) by YAML::PP::Lexer::push_subtokens at line 907, avg 430ns/call
# 2056 times (1.29ms+0s) by YAML::PP::Lexer::_read_quoted_tokens at line 742, avg 629ns/call
# 2056 times (1.17ms+0s) by YAML::PP::Lexer::fetch_quoted at line 626, avg 568ns/call
# 2056 times (893µs+0s) by YAML::PP::Lexer::_read_quoted_tokens at line 748, avg 434ns/call
# 1791 times (793µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 340, avg 443ns/call
# 1424 times (694µs+0s) by YAML::PP::Lexer::fetch_quoted at line 704, avg 487ns/call
# 689 times (396µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 336, avg 575ns/call
# 529 times (263µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 256, avg 497ns/call
# 15 times (10µs+0s) by YAML::PP::Lexer::fetch_block at line 605, avg 667ns/call
# once (2µs+0s) by YAML::PP::Lexer::fetch_next_tokens at line 208
# once (1µs+0s) by YAML::PP::Lexer::fetch_block at line 526
# once (1µs+0s) by YAML::PP::Lexer::fetch_block at line 538
# once (0s+0s) by YAML::PP::Lexer::fetch_block at line 548 | ||
37 | sub set_line { $_[0]->{line} = $_[1] } | ||||
38 | 63742 | 82.4ms | sub offset { return $_[0]->{offset} } | ||
39 | 63742 | 114ms | sub set_offset { $_[0]->{offset} = $_[1] } | ||
40 | 13455 | 19.4ms | # spent 8.54ms within YAML::PP::Lexer::inc_line which was called 13455 times, avg 635ns/call:
# 13455 times (8.54ms+0s) by YAML::PP::Lexer::_fetch_next_line at line 147, avg 635ns/call | ||
41 | 37475 | 53.1ms | # spent 19.5ms within YAML::PP::Lexer::context which was called 37475 times, avg 519ns/call:
# 37475 times (19.5ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 263, avg 519ns/call | ||
42 | 176 | 400µs | sub set_context { $_[0]->{context} = $_[1] } | ||
43 | 76215 | 105ms | # spent 36.5ms within YAML::PP::Lexer::flowcontext which was called 76215 times, avg 479ns/call:
# 20941 times (9.87ms+0s) by YAML::PP::Parser::parse_tokens at line 379 of YAML/PP/Parser.pm, avg 471ns/call
# 18884 times (7.67ms+0s) by YAML::PP::Lexer::fetch_plain at line 371, avg 406ns/call
# 14054 times (7.46ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 286, avg 531ns/call
# 13449 times (7.55ms+0s) by YAML::PP::Lexer::fetch_next_tokens at line 208, avg 562ns/call
# 5040 times (2.16ms+0s) by YAML::PP::Lexer::fetch_plain at line 405, avg 428ns/call
# 2056 times (1.02ms+0s) by YAML::PP::Lexer::fetch_quoted at line 694, avg 497ns/call
# 1791 times (749µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 342, avg 418ns/call | ||
44 | 1102 | 2.10ms | # spent 1.06ms within YAML::PP::Lexer::set_flowcontext which was called 1102 times, avg 961ns/call:
# 1102 times (1.06ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 343, avg 961ns/call | ||
45 | 14025 | 24.2ms | # spent 6.92ms within YAML::PP::Lexer::block which was called 14025 times, avg 494ns/call:
# 14025 times (6.92ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 286, avg 494ns/call | ||
46 | 13455 | 25.9ms | # spent 8.24ms within YAML::PP::Lexer::set_block which was called 13455 times, avg 612ns/call:
# 13455 times (8.24ms+0s) by YAML::PP::Lexer::_fetch_next_line at line 146, avg 612ns/call | ||
47 | |||||
48 | 1 | 1µs | my $RE_WS = '[\t ]'; | ||
49 | 1 | 0s | my $RE_LB = '[\r\n]'; | ||
50 | 1 | 42µs | 2 | 24µs | my $RE_DOC_END = qr/\A(\.\.\.)(?=$RE_WS|$)/m; # spent 22µs making 1 call to YAML::PP::Lexer::CORE:regcomp
# spent 2µs making 1 call to YAML::PP::Lexer::CORE:qr |
51 | 1 | 14µs | 2 | 10µs | my $RE_DOC_START = qr/\A(---)(?=$RE_WS|$)/m; # spent 9µs making 1 call to YAML::PP::Lexer::CORE:regcomp
# spent 1µs making 1 call to YAML::PP::Lexer::CORE:qr |
52 | 1 | 18µs | 2 | 14µs | my $RE_EOL = qr/\A($RE_WS+#.*|$RE_WS+)\z/; # spent 13µs making 1 call to YAML::PP::Lexer::CORE:regcomp
# spent 1µs making 1 call to YAML::PP::Lexer::CORE:qr |
53 | #my $RE_COMMENT_EOL = qr/\A(#.*)?(?:$RE_LB|\z)/; | ||||
54 | |||||
55 | #ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-” | ||||
56 | 1 | 1µs | my $RE_NS_WORD_CHAR = '[0-9A-Za-z-]'; | ||
57 | 1 | 1µs | my $RE_URI_CHAR = '(?:' . '%[0-9a-fA-F]{2}' .'|'. q{[0-9A-Za-z#;/?:@&=+$,_.!*'\(\)\[\]-]} . ')'; | ||
58 | 1 | 0s | my $RE_NS_TAG_CHAR = '(?:' . '%[0-9a-fA-F]{2}' .'|'. q{[0-9A-Za-z#;/?:@&=+$_.~*'\(\)-]} . ')'; | ||
59 | |||||
60 | # [#x21-#x7E] /* 8 bit */ | ||||
61 | # | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] /* 16 bit */ | ||||
62 | # | [#x10000-#x10FFFF] /* 32 bit */ | ||||
63 | |||||
64 | #nb-char ::= c-printable - b-char - c-byte-order-mark | ||||
65 | #my $RE_NB_CHAR = '[\x21-\x7E]'; | ||||
66 | 1 | 1µs | my $RE_ANCHOR_CAR = '[\x21-\x2B\x2D-\x5A\x5C\x5E-\x7A\x7C\x7E\xA0-\xFF\x{100}-\x{10FFFF}]'; | ||
67 | |||||
68 | 1 | 0s | my $RE_PLAIN_START = '[\x21\x22\x24-\x39\x3B-\x7E\xA0-\xFF\x{100}-\x{10FFFF}]'; | ||
69 | 1 | 1µs | my $RE_PLAIN_END = '[\x21-\x39\x3B-\x7E\x85\xA0-\x{D7FF}\x{E000}-\x{FEFE}\x{FF00}-\x{FFFD}\x{10000}-\x{10FFFF}]'; | ||
70 | 1 | 0s | my $RE_PLAIN_FIRST = '[\x24\x28-\x29\x2B\x2E-\x39\x3B-\x3D\x41-\x5A\x5C\x5E-\x5F\x61-\x7A\x7E\xA0-\xFF\x{100}-\x{10FFFF}]'; | ||
71 | |||||
72 | 1 | 0s | my $RE_PLAIN_START_FLOW = '[\x21\x22\x24-\x2B\x2D-\x39\x3B-\x5A\x5C\x5E-\x7A\x7C\x7E\xA0-\xFF\x{100}-\x{10FFFF}]'; | ||
73 | 1 | 0s | my $RE_PLAIN_END_FLOW = '[\x21-\x2B\x2D-\x39\x3B-\x5A\x5C\x5E-\x7A\x7C\x7E\x85\xA0-\x{D7FF}\x{E000}-\x{FEFE}\x{FF00}-\x{FFFD}\x{10000}-\x{10FFFF}]'; | ||
74 | 1 | 0s | my $RE_PLAIN_FIRST_FLOW = '[\x24\x28-\x29\x2B\x2E-\x39\x3B-\x3D\x41-\x5A\x5C\x5E-\x5F\x61-\x7A\x7C\x7E\xA0-\xFF\x{100}-\x{10FFFF}]'; | ||
75 | # c-indicators | ||||
76 | #! 21 | ||||
77 | #" 22 | ||||
78 | ## 23 | ||||
79 | #% 25 | ||||
80 | #& 26 | ||||
81 | #' 27 | ||||
82 | #* 2A | ||||
83 | #, 2C FLOW | ||||
84 | #- 2D XX | ||||
85 | #: 3A XX | ||||
86 | #> 3E | ||||
87 | #? 3F XX | ||||
88 | #@ 40 | ||||
89 | #[ 5B FLOW | ||||
90 | #] 5D FLOW | ||||
91 | #` 60 | ||||
92 | #{ 7B FLOW | ||||
93 | #| 7C | ||||
94 | #} 7D FLOW | ||||
95 | |||||
96 | |||||
97 | 1 | 1µs | my $RE_PLAIN_WORD = "(?::+$RE_PLAIN_END|$RE_PLAIN_START)(?::+$RE_PLAIN_END|$RE_PLAIN_END)*"; | ||
98 | 1 | 4µs | my $RE_PLAIN_FIRST_WORD = "(?:[:?-]+$RE_PLAIN_END|$RE_PLAIN_FIRST)(?::+$RE_PLAIN_END|$RE_PLAIN_END)*"; | ||
99 | 1 | 0s | my $RE_PLAIN_WORDS = "(?:$RE_PLAIN_FIRST_WORD(?:$RE_WS+$RE_PLAIN_WORD)*)"; | ||
100 | 1 | 1µs | my $RE_PLAIN_WORDS2 = "(?:$RE_PLAIN_WORD(?:$RE_WS+$RE_PLAIN_WORD)*)"; | ||
101 | |||||
102 | 1 | 1µs | my $RE_PLAIN_WORD_FLOW = "(?::+$RE_PLAIN_END_FLOW|$RE_PLAIN_START_FLOW)(?::+$RE_PLAIN_END_FLOW|$RE_PLAIN_END_FLOW)*"; | ||
103 | 1 | 0s | my $RE_PLAIN_FIRST_WORD_FLOW = "(?:[:?-]+$RE_PLAIN_END_FLOW|$RE_PLAIN_FIRST_FLOW)(?::+$RE_PLAIN_END_FLOW|$RE_PLAIN_END_FLOW)*"; | ||
104 | 1 | 0s | my $RE_PLAIN_WORDS_FLOW = "(?:$RE_PLAIN_FIRST_WORD_FLOW(?:$RE_WS+$RE_PLAIN_WORD_FLOW)*)"; | ||
105 | 1 | 3µs | my $RE_PLAIN_WORDS_FLOW2 = "(?:$RE_PLAIN_WORD_FLOW(?:$RE_WS+$RE_PLAIN_WORD_FLOW)*)"; | ||
106 | |||||
107 | |||||
108 | #c-secondary-tag-handle ::= “!” “!” | ||||
109 | #c-named-tag-handle ::= “!” ns-word-char+ “!” | ||||
110 | #ns-tag-char ::= ns-uri-char - “!” - c-flow-indicator | ||||
111 | #ns-global-tag-prefix ::= ns-tag-char ns-uri-char* | ||||
112 | #c-ns-local-tag-prefix ::= “!” ns-uri-char* | ||||
113 | 1 | 0s | my $RE_TAG = "!(?:$RE_NS_WORD_CHAR*!$RE_NS_TAG_CHAR+|$RE_NS_TAG_CHAR+|<$RE_URI_CHAR+>|)"; | ||
114 | |||||
115 | #c-ns-anchor-property ::= “&” ns-anchor-name | ||||
116 | #ns-char ::= nb-char - s-white | ||||
117 | #ns-anchor-char ::= ns-char - c-flow-indicator | ||||
118 | #ns-anchor-name ::= ns-anchor-char+ | ||||
119 | |||||
120 | 1 | 16µs | 2 | 9µs | my $RE_SEQSTART = qr/\A(-)(?=$RE_WS|$)/m; # spent 9µs making 1 call to YAML::PP::Lexer::CORE:regcomp
# spent 0s making 1 call to YAML::PP::Lexer::CORE:qr |
121 | 1 | 23µs | 2 | 10µs | my $RE_COMPLEX = qr/(\?)(?=$RE_WS|$)/m; # spent 9µs making 1 call to YAML::PP::Lexer::CORE:regcomp
# spent 1µs making 1 call to YAML::PP::Lexer::CORE:qr |
122 | 1 | 13µs | 2 | 8µs | my $RE_COMPLEXCOLON = qr/\A(:)(?=$RE_WS|$)/m; # spent 8µs making 1 call to YAML::PP::Lexer::CORE:regcomp
# spent 0s making 1 call to YAML::PP::Lexer::CORE:qr |
123 | 1 | 0s | my $RE_ANCHOR = "&$RE_ANCHOR_CAR+"; | ||
124 | 1 | 1µs | my $RE_ALIAS = "\\*$RE_ANCHOR_CAR+"; | ||
125 | |||||
126 | |||||
127 | 1 | 284µs | 7 | 261µs | my %REGEXES = ( # spent 256µs making 3 calls to YAML::PP::Lexer::CORE:regcomp, avg 85µs/call
# spent 5µs making 4 calls to YAML::PP::Lexer::CORE:qr, avg 1µs/call |
128 | ANCHOR => qr{($RE_ANCHOR)}, | ||||
129 | TAG => qr{($RE_TAG)}, | ||||
130 | ALIAS => qr{($RE_ALIAS)}, | ||||
131 | SINGLEQUOTED => qr{(?:''|[^'\r\n]+)*}, | ||||
132 | ); | ||||
133 | |||||
134 | # spent 355ms (222+133) within YAML::PP::Lexer::_fetch_next_line which was called 18497 times, avg 19µs/call:
# 13451 times (147ms+88.4ms) by YAML::PP::Lexer::fetch_next_tokens at line 185, avg 18µs/call
# 5040 times (75.2ms+44.1ms) by YAML::PP::Lexer::fetch_plain at line 412, avg 24µs/call
# 6 times (82µs+45µs) by YAML::PP::Lexer::fetch_block at line 562, avg 21µs/call | ||||
135 | 18497 | 3.36ms | my ($self) = @_; | ||
136 | 18497 | 12.4ms | 18497 | 8.61ms | my $next_line = $self->next_line; # spent 8.61ms making 18497 calls to YAML::PP::Lexer::next_line, avg 465ns/call |
137 | 18497 | 10.9ms | if (defined $next_line ) { | ||
138 | return $next_line; | ||||
139 | } | ||||
140 | |||||
141 | 13456 | 25.9ms | 26912 | 74.5ms | my $line = $self->reader->readline; # spent 67.0ms making 13456 calls to YAML::PP::Reader::File::readline, avg 5µs/call
# spent 7.55ms making 13456 calls to YAML::PP::Lexer::reader, avg 561ns/call |
142 | 13456 | 2.08ms | unless (defined $line) { | ||
143 | 1 | 1µs | 1 | 1µs | $self->set_next_line(undef); # spent 1µs making 1 call to YAML::PP::Lexer::set_next_line |
144 | 1 | 1µs | return; | ||
145 | } | ||||
146 | 13455 | 10.3ms | 13455 | 8.24ms | $self->set_block(1); # spent 8.24ms making 13455 calls to YAML::PP::Lexer::set_block, avg 612ns/call |
147 | 13455 | 9.60ms | 13455 | 8.54ms | $self->inc_line; # spent 8.54ms making 13455 calls to YAML::PP::Lexer::inc_line, avg 635ns/call |
148 | 13455 | 44.5ms | 13455 | 24.7ms | $line =~ m/\A( *)([^\r\n]*)([\r\n]|\z)/ or die "Unexpected"; # spent 24.7ms making 13455 calls to YAML::PP::Lexer::CORE:match, avg 2µs/call |
149 | 13455 | 23.1ms | $next_line = [ $1, $2, $3 ]; | ||
150 | 13455 | 9.77ms | 13455 | 8.03ms | $self->set_next_line($next_line); # spent 8.03ms making 13455 calls to YAML::PP::Lexer::set_next_line, avg 597ns/call |
151 | # $ESCAPE_CHAR from YAML.pm | ||||
152 | 13455 | 6.76ms | if ($line =~ tr/\x00-\x08\x0b-\x0c\x0e-\x1f//) { | ||
153 | $self->exception("Control characters are not allowed"); | ||||
154 | } | ||||
155 | |||||
156 | 13455 | 31.2ms | return $next_line; | ||
157 | } | ||||
158 | |||||
159 | 1 | 10µs | my %TOKEN_NAMES = ( | ||
160 | '"' => 'DOUBLEQUOTE', | ||||
161 | "'" => 'SINGLEQUOTE', | ||||
162 | '|' => 'LITERAL', | ||||
163 | '>' => 'FOLDED', | ||||
164 | '!' => 'TAG', | ||||
165 | '*' => 'ALIAS', | ||||
166 | '&' => 'ANCHOR', | ||||
167 | ':' => 'COLON', | ||||
168 | '-' => 'DASH', | ||||
169 | '?' => 'QUESTION', | ||||
170 | '[' => 'FLOWSEQ_START', | ||||
171 | ']' => 'FLOWSEQ_END', | ||||
172 | '{' => 'FLOWMAP_START', | ||||
173 | '}' => 'FLOWMAP_END', | ||||
174 | ',' => 'FLOW_COMMA', | ||||
175 | '---' => 'DOC_START', | ||||
176 | '...' => 'DOC_END', | ||||
177 | ); | ||||
178 | |||||
179 | |||||
180 | # spent 1.00s (211ms+790ms) within YAML::PP::Lexer::fetch_next_tokens which was called 13451 times, avg 74µs/call:
# 13451 times (211ms+790ms) by YAML::PP::Parser::lex_next_tokens at line 179 of YAML/PP/Parser.pm, avg 74µs/call | ||||
181 | 13451 | 2.80ms | my ($self) = @_; | ||
182 | 13451 | 8.93ms | 13451 | 6.39ms | my $next = $self->next_tokens; # spent 6.39ms making 13451 calls to YAML::PP::Lexer::next_tokens, avg 475ns/call |
183 | 13451 | 1.87ms | return $next if @$next; | ||
184 | |||||
185 | 13451 | 12.7ms | 13451 | 236ms | my $next_line = $self->_fetch_next_line; # spent 236ms making 13451 calls to YAML::PP::Lexer::_fetch_next_line, avg 18µs/call |
186 | 13451 | 1.74ms | if (not $next_line) { | ||
187 | return []; | ||||
188 | } | ||||
189 | |||||
190 | 13450 | 4.72ms | my $spaces = $next_line->[0]; | ||
191 | 13450 | 4.14ms | my $yaml = \$next_line->[1]; | ||
192 | 13450 | 3.61ms | if (not length $$yaml) { | ||
193 | $self->_push_tokens([ EOL => join('', @$next_line), $self->line ]); | ||||
194 | $self->set_next_line(undef); | ||||
195 | return $next; | ||||
196 | } | ||||
197 | 13450 | 13.1ms | if (substr($$yaml, 0, 1) eq '#') { | ||
198 | $self->_push_tokens([ EOL => join('', @$next_line), $self->line ]); | ||||
199 | $self->set_next_line(undef); | ||||
200 | return $next; | ||||
201 | } | ||||
202 | 13450 | 2.55ms | if (not $spaces and substr($$yaml, 0, 1) eq "%") { | ||
203 | $self->_fetch_next_tokens_directive($yaml, $next_line->[2]); | ||||
204 | $self->set_context(0); | ||||
205 | $self->set_next_line(undef); | ||||
206 | return $next; | ||||
207 | } | ||||
208 | 13450 | 21.9ms | 13463 | 7.64ms | if (not $spaces and $$yaml =~ s/\A(---|\.\.\.)(?=$RE_WS|\z)//) { # spent 7.55ms making 13449 calls to YAML::PP::Lexer::flowcontext, avg 562ns/call
# spent 49µs making 6 calls to YAML::PP::Lexer::CORE:regcomp, avg 8µs/call
# spent 34µs making 1 call to YAML::PP::Lexer::_push_tokens
# spent 7µs making 6 calls to YAML::PP::Lexer::CORE:subst, avg 1µs/call
# spent 2µs making 1 call to YAML::PP::Lexer::line |
209 | $self->_push_tokens([ $TOKEN_NAMES{ $1 } => $1, $self->line ]); | ||||
210 | } | ||||
211 | elsif ($self->flowcontext and $$yaml =~ m/\A[ \t]+(#.*)?\z/) { | ||||
212 | $self->_push_tokens([ EOL => join('', @$next_line), $self->line ]); | ||||
213 | $self->set_next_line(undef); | ||||
214 | return $next; | ||||
215 | } | ||||
216 | else { | ||||
217 | 13449 | 24.9ms | 26898 | 192ms | $self->_push_tokens([ SPACE => $spaces, $self->line ]); # spent 185ms making 13449 calls to YAML::PP::Lexer::_push_tokens, avg 14µs/call
# spent 6.55ms making 13449 calls to YAML::PP::Lexer::line, avg 487ns/call |
218 | } | ||||
219 | |||||
220 | 13450 | 12.2ms | 13450 | 348ms | my $partial = $self->_fetch_next_tokens($next_line); # spent 348ms making 13450 calls to YAML::PP::Lexer::_fetch_next_tokens, avg 26µs/call |
221 | 13450 | 1.75ms | 1 | 0s | unless ($partial) { # spent 0s making 1 call to YAML::PP::Lexer::set_next_line |
222 | $self->set_next_line(undef); | ||||
223 | } | ||||
224 | 13450 | 24.4ms | return $next; | ||
225 | } | ||||
226 | |||||
227 | 1 | 1µs | my %ANCHOR_ALIAS_TAG = ( '&' => 1, '*' => 1, '!' => 1 ); | ||
228 | 1 | 1µs | my %BLOCK_SCALAR = ( '|' => 1, '>' => 1 ); | ||
229 | 1 | 12µs | my %COLON_DASH_QUESTION = ( ':' => 1, '-' => 1, '?' => 1 ); | ||
230 | 1 | 2µs | my %QUOTED = ( '"' => 1, "'" => 1 ); | ||
231 | 1 | 1µs | my %FLOW = ( '{' => 1, '[' => 1, '}' => 1, ']' => 1, ',' => 1 ); | ||
232 | 1 | 0s | my %CONTEXT = ( '"' => 1, "'" => 1, '>' => 1, '|' => 1 ); | ||
233 | |||||
234 | 1 | 4µs | 1 | 1µs | my $RE_ESCAPES = qr{(?: # spent 1µs making 1 call to YAML::PP::Lexer::CORE:qr |
235 | \\([ \\\/_0abefnrtvLNP\t"]) | \\x([0-9a-fA-F]{2}) | ||||
236 | | \\u([A-Fa-f0-9]{4}) | \\U([A-Fa-f0-9]{4,8}) | ||||
237 | )}x; | ||||
238 | 1 | 9µs | my %CONTROL = ( | ||
239 | '\\' => '\\', '/' => '/', n => "\n", t => "\t", r => "\r", b => "\b", | ||||
240 | 'a' => "\a", 'b' => "\b", 'e' => "\e", 'f' => "\f", 'v' => "\x0b", "\t" => "\t", | ||||
241 | 'P' => "\x{2029}", L => "\x{2028}", 'N' => "\x85", | ||||
242 | '0' => "\0", '_' => "\xa0", ' ' => ' ', q/"/ => q/"/, | ||||
243 | ); | ||||
244 | |||||
245 | # spent 1.08s (517ms+558ms) within YAML::PP::Lexer::_fetch_next_tokens which was called 27926 times, avg 38µs/call:
# 13844 times (361ms+336ms) by YAML::PP::Lexer::fetch_plain at line 397, avg 50µs/call
# 13450 times (141ms+207ms) by YAML::PP::Lexer::fetch_next_tokens at line 220, avg 26µs/call
# 632 times (14.9ms+14.6ms) by YAML::PP::Lexer::fetch_quoted at line 696, avg 47µs/call | ||||
246 | TRACE and warn __PACKAGE__.':'.__LINE__.": _fetch_next_tokens\n"; | ||||
247 | 27926 | 5.29ms | my ($self, $next_line) = @_; | ||
248 | |||||
249 | 27926 | 7.87ms | my $yaml = \$next_line->[1]; | ||
250 | 27926 | 5.49ms | my $eol = $next_line->[2]; | ||
251 | |||||
252 | 27926 | 3.35ms | my @tokens; | ||
253 | |||||
254 | 27926 | 3.80ms | while (1) { | ||
255 | 38004 | 7.05ms | unless (length $$yaml) { | ||
256 | 529 | 675µs | 529 | 263µs | push @tokens, ( EOL => $eol, $self->line ); # spent 263µs making 529 calls to YAML::PP::Lexer::line, avg 497ns/call |
257 | 529 | 514µs | 529 | 10.3ms | $self->_push_tokens(\@tokens); # spent 10.3ms making 529 calls to YAML::PP::Lexer::_push_tokens, avg 19µs/call |
258 | 529 | 1.44ms | return; | ||
259 | } | ||||
260 | 37475 | 15.7ms | my $first = substr($$yaml, 0, 1); | ||
261 | 37475 | 4.83ms | my $plain = 0; | ||
262 | |||||
263 | 37475 | 26.8ms | 37475 | 19.5ms | if ($self->context) { # spent 19.5ms making 37475 calls to YAML::PP::Lexer::context, avg 519ns/call |
264 | 88 | 421µs | 176 | 171µs | if ($$yaml =~ s/\A($RE_WS*)://) { # spent 119µs making 88 calls to YAML::PP::Lexer::CORE:regcomp, avg 1µs/call
# spent 52µs making 88 calls to YAML::PP::Lexer::CORE:subst, avg 591ns/call |
265 | push @tokens, ( WS => $1, $self->line ) if $1; | ||||
266 | push @tokens, ( COLON => ':', $self->line ); | ||||
267 | $self->set_context(0); | ||||
268 | next; | ||||
269 | } | ||||
270 | 88 | 396µs | 176 | 136µs | if ($$yaml =~ s/\A($RE_WS*(?: #.*))\z//) { # spent 105µs making 88 calls to YAML::PP::Lexer::CORE:regcomp, avg 1µs/call
# spent 31µs making 88 calls to YAML::PP::Lexer::CORE:subst, avg 352ns/call |
271 | push @tokens, ( EOL => $1 . $eol, $self->line ); | ||||
272 | $self->_push_tokens(\@tokens); | ||||
273 | return; | ||||
274 | } | ||||
275 | 88 | 120µs | 88 | 56µs | $self->set_context(0); # spent 56µs making 88 calls to YAML::PP::Lexer::set_context, avg 636ns/call |
276 | } | ||||
277 | 37475 | 28.9ms | if ($CONTEXT{ $first }) { | ||
278 | 2057 | 2.96ms | 2057 | 916µs | push @tokens, ( CONTEXT => $first, $self->line ); # spent 916µs making 2057 calls to YAML::PP::Lexer::line, avg 445ns/call |
279 | 2057 | 1.90ms | 2057 | 32.8ms | $self->_push_tokens(\@tokens); # spent 32.8ms making 2057 calls to YAML::PP::Lexer::_push_tokens, avg 16µs/call |
280 | 2057 | 4.85ms | return 1; | ||
281 | } | ||||
282 | elsif ($COLON_DASH_QUESTION{ $first }) { | ||||
283 | 14054 | 4.62ms | my $token_name = $TOKEN_NAMES{ $first }; | ||
284 | 14054 | 106ms | 28108 | 63.2ms | if ($$yaml =~ s/\A\Q$first\E($RE_WS+|\z)//) { # spent 38.4ms making 14054 calls to YAML::PP::Lexer::CORE:regcomp, avg 3µs/call
# spent 24.8ms making 14054 calls to YAML::PP::Lexer::CORE:subst, avg 2µs/call |
285 | 14054 | 5.45ms | my $after = $1; | ||
286 | 14054 | 20.0ms | 28079 | 14.4ms | if (not $self->flowcontext and not $self->block) { # spent 7.46ms making 14054 calls to YAML::PP::Lexer::flowcontext, avg 531ns/call
# spent 6.92ms making 14025 calls to YAML::PP::Lexer::block, avg 494ns/call |
287 | push @tokens, ERROR => $first . $after, $self->line; | ||||
288 | $self->_push_tokens(\@tokens); | ||||
289 | $self->exception("Tabs can not be used for indentation"); | ||||
290 | } | ||||
291 | 14054 | 4.93ms | if ($after =~ tr/\t//) { | ||
292 | $self->set_block(0); | ||||
293 | } | ||||
294 | 14054 | 3.34ms | my $token_name = $TOKEN_NAMES{ $first }; | ||
295 | 14054 | 16.4ms | 14054 | 6.86ms | push @tokens, ( $token_name => $first, $self->line ); # spent 6.86ms making 14054 calls to YAML::PP::Lexer::line, avg 488ns/call |
296 | 14054 | 4.21ms | if (not defined $1) { | ||
297 | push @tokens, ( EOL => $eol, $self->line ); | ||||
298 | $self->_push_tokens(\@tokens); | ||||
299 | return; | ||||
300 | } | ||||
301 | 14054 | 4.25ms | my $ws = $1; | ||
302 | 14054 | 36.3ms | 14054 | 16.1ms | if ($$yaml =~ s/\A(#.*|)\z//) { # spent 16.1ms making 14054 calls to YAML::PP::Lexer::CORE:subst, avg 1µs/call |
303 | 6456 | 13.3ms | 6456 | 3.37ms | push @tokens, ( EOL => $ws . $1 . $eol, $self->line ); # spent 3.37ms making 6456 calls to YAML::PP::Lexer::line, avg 522ns/call |
304 | 6456 | 5.07ms | 6456 | 98.1ms | $self->_push_tokens(\@tokens); # spent 98.1ms making 6456 calls to YAML::PP::Lexer::_push_tokens, avg 15µs/call |
305 | 6456 | 21.8ms | return; | ||
306 | } | ||||
307 | 7598 | 10.2ms | 7598 | 4.12ms | push @tokens, ( WS => $ws, $self->line ); # spent 4.12ms making 7598 calls to YAML::PP::Lexer::line, avg 542ns/call |
308 | 7598 | 8.60ms | next; | ||
309 | } | ||||
310 | elsif ($self->flowcontext and $$yaml =~ s/\A:(?=[,\{\}\[\]])//) { | ||||
311 | push @tokens, ( $token_name => $first, $self->line ); | ||||
312 | next; | ||||
313 | } | ||||
314 | $plain = 1; | ||||
315 | } | ||||
316 | elsif ($ANCHOR_ALIAS_TAG{ $first }) { | ||||
317 | my $token_name = $TOKEN_NAMES{ $first }; | ||||
318 | my $REGEX = $REGEXES{ $token_name }; | ||||
319 | if ($$yaml =~ s/\A$REGEX//) { | ||||
320 | push @tokens, ( $token_name => $1, $self->line ); | ||||
321 | } | ||||
322 | else { | ||||
323 | push @tokens, ( "Invalid $token_name" => $$yaml, $self->line ); | ||||
324 | $self->_push_tokens(\@tokens); | ||||
325 | return; | ||||
326 | } | ||||
327 | } | ||||
328 | elsif ($first eq ' ' or $first eq "\t") { | ||||
329 | 689 | 3.58ms | 1378 | 1.48ms | if ($$yaml =~ s/\A($RE_WS+)//) { # spent 965µs making 689 calls to YAML::PP::Lexer::CORE:subst, avg 1µs/call
# spent 516µs making 689 calls to YAML::PP::Lexer::CORE:regcomp, avg 749ns/call |
330 | 689 | 325µs | my $ws = $1; | ||
331 | 689 | 1.68ms | 689 | 684µs | if ($$yaml =~ s/\A((?:#.*)?\z)//) { # spent 684µs making 689 calls to YAML::PP::Lexer::CORE:subst, avg 993ns/call |
332 | push @tokens, ( EOL => $ws . $1 . $eol, $self->line ); | ||||
333 | $self->_push_tokens(\@tokens); | ||||
334 | return; | ||||
335 | } | ||||
336 | 689 | 871µs | 689 | 396µs | push @tokens, ( WS => $ws, $self->line ); # spent 396µs making 689 calls to YAML::PP::Lexer::line, avg 575ns/call |
337 | } | ||||
338 | } | ||||
339 | elsif ($FLOW{ $first }) { | ||||
340 | 1791 | 2.51ms | 1791 | 793µs | push @tokens, ( $TOKEN_NAMES{ $first } => $first, $self->line ); # spent 793µs making 1791 calls to YAML::PP::Lexer::line, avg 443ns/call |
341 | 1791 | 1.99ms | substr($$yaml, 0, 1, ''); | ||
342 | 1791 | 1.28ms | 1791 | 749µs | my $flowcontext = $self->flowcontext; # spent 749µs making 1791 calls to YAML::PP::Lexer::flowcontext, avg 418ns/call |
343 | 1791 | 1.99ms | 1102 | 1.06ms | if ($first eq '{' or $first eq '[') { # spent 1.06ms making 1102 calls to YAML::PP::Lexer::set_flowcontext, avg 961ns/call |
344 | $self->set_flowcontext(++$flowcontext); | ||||
345 | } | ||||
346 | elsif ($first eq '}' or $first eq ']') { | ||||
347 | $self->set_flowcontext(--$flowcontext); | ||||
348 | } | ||||
349 | } | ||||
350 | else { | ||||
351 | 18884 | 2.81ms | $plain = 1; | ||
352 | } | ||||
353 | |||||
354 | 21364 | 4.21ms | if ($plain) { | ||
355 | 18884 | 18.1ms | 18884 | 8.64ms | push @tokens, ( CONTEXT => '', $self->line ); # spent 8.64ms making 18884 calls to YAML::PP::Lexer::line, avg 458ns/call |
356 | 18884 | 14.2ms | 18884 | 274ms | $self->_push_tokens(\@tokens); # spent 274ms making 18884 calls to YAML::PP::Lexer::_push_tokens, avg 15µs/call |
357 | 18884 | 41.5ms | return 1; | ||
358 | } | ||||
359 | |||||
360 | } | ||||
361 | |||||
362 | return; | ||||
363 | } | ||||
364 | |||||
365 | # spent 1.86s (450ms+1.41) within YAML::PP::Lexer::fetch_plain which was called 18884 times, avg 99µs/call:
# 18884 times (450ms+1.41s) by YAML::PP::Parser::parse_tokens at line 381 of YAML/PP/Parser.pm, avg 99µs/call | ||||
366 | 18884 | 6.55ms | my ($self, $indent, $context) = @_; | ||
367 | 18884 | 14.9ms | 18884 | 10.0ms | my $next_line = $self->next_line; # spent 10.0ms making 18884 calls to YAML::PP::Lexer::next_line, avg 530ns/call |
368 | 18884 | 5.68ms | my $yaml = \$next_line->[1]; | ||
369 | 18884 | 4.38ms | my $eol = $next_line->[2]; | ||
370 | 18884 | 4.21ms | my $REGEX = $RE_PLAIN_WORDS; | ||
371 | 18884 | 11.2ms | 18884 | 7.67ms | if ($self->flowcontext) { # spent 7.67ms making 18884 calls to YAML::PP::Lexer::flowcontext, avg 406ns/call |
372 | $REGEX = $RE_PLAIN_WORDS_FLOW; | ||||
373 | } | ||||
374 | |||||
375 | 18884 | 2.60ms | my @tokens; | ||
376 | 18884 | 300ms | 37768 | 238ms | unless ($$yaml =~ s/\A($REGEX)//) { # spent 138ms making 18884 calls to YAML::PP::Lexer::CORE:regcomp, avg 7µs/call
# spent 100ms making 18884 calls to YAML::PP::Lexer::CORE:subst, avg 5µs/call |
377 | $self->_push_tokens(\@tokens); | ||||
378 | $self->exception("Invalid plain scalar"); | ||||
379 | } | ||||
380 | 18884 | 12.4ms | my $plain = $1; | ||
381 | 18884 | 26.3ms | 18884 | 15.0ms | push @tokens, ( PLAIN => $plain, $self->line ); # spent 15.0ms making 18884 calls to YAML::PP::Lexer::line, avg 796ns/call |
382 | |||||
383 | 18884 | 92.5ms | 37768 | 41.9ms | if ($$yaml =~ s/\A(?:($RE_WS+#.*)|($RE_WS*))\z//) { # spent 23.9ms making 18884 calls to YAML::PP::Lexer::CORE:subst, avg 1µs/call
# spent 18.0ms making 18884 calls to YAML::PP::Lexer::CORE:regcomp, avg 954ns/call |
384 | 5040 | 2.67ms | if (defined $1) { | ||
385 | push @tokens, ( EOL => $1 . $eol, $self->line ); | ||||
386 | $self->_push_tokens(\@tokens); | ||||
387 | $self->set_next_line(undef); | ||||
388 | return; | ||||
389 | } | ||||
390 | else { | ||||
391 | 5040 | 8.40ms | 5040 | 2.77ms | push @tokens, ( EOL => $2. $eol, $self->line ); # spent 2.77ms making 5040 calls to YAML::PP::Lexer::line, avg 549ns/call |
392 | 5040 | 4.96ms | 5040 | 3.49ms | $self->set_next_line(undef); # spent 3.49ms making 5040 calls to YAML::PP::Lexer::set_next_line, avg 693ns/call |
393 | } | ||||
394 | } | ||||
395 | else { | ||||
396 | 13844 | 12.2ms | 13844 | 180ms | $self->_push_tokens(\@tokens); # spent 180ms making 13844 calls to YAML::PP::Lexer::_push_tokens, avg 13µs/call |
397 | 13844 | 12.3ms | 13844 | 698ms | my $partial = $self->_fetch_next_tokens($next_line); # spent 698ms making 13844 calls to YAML::PP::Lexer::_fetch_next_tokens, avg 50µs/call |
398 | 13844 | 7.21ms | 6386 | 4.25ms | if (not $partial) { # spent 4.25ms making 6386 calls to YAML::PP::Lexer::set_next_line, avg 665ns/call |
399 | $self->set_next_line(undef); | ||||
400 | } | ||||
401 | 13844 | 43.1ms | return; | ||
402 | } | ||||
403 | |||||
404 | 5040 | 1.53ms | my $RE2 = $RE_PLAIN_WORDS2; | ||
405 | 5040 | 3.66ms | 5040 | 2.16ms | if ($self->flowcontext) { # spent 2.16ms making 5040 calls to YAML::PP::Lexer::flowcontext, avg 428ns/call |
406 | $RE2 = $RE_PLAIN_WORDS_FLOW2; | ||||
407 | } | ||||
408 | 5040 | 1.09ms | my $fetch_next = 0; | ||
409 | 5040 | 3.28ms | my @lines = ($plain); | ||
410 | 5040 | 854µs | my @next; | ||
411 | 5040 | 669µs | LOOP: while (1) { | ||
412 | 5040 | 7.84ms | 5040 | 119ms | $next_line = $self->_fetch_next_line; # spent 119ms making 5040 calls to YAML::PP::Lexer::_fetch_next_line, avg 24µs/call |
413 | 5040 | 821µs | if (not $next_line) { | ||
414 | last LOOP; | ||||
415 | } | ||||
416 | 5040 | 1.67ms | my $spaces = $next_line->[0]; | ||
417 | 5040 | 1.79ms | my $yaml = \$next_line->[1]; | ||
418 | 5040 | 1.41ms | my $eol = $next_line->[2]; | ||
419 | |||||
420 | 5040 | 1.44ms | if (not length $$yaml) { | ||
421 | push @tokens, ( EOL => $spaces . $eol, $self->line ); | ||||
422 | $self->set_next_line(undef); | ||||
423 | push @lines, ''; | ||||
424 | next LOOP; | ||||
425 | } | ||||
426 | |||||
427 | 5040 | 1.57ms | 6 | 31µs | if (not $spaces and $$yaml =~ s/\A(---|\.\.\.)(?=$RE_WS|\z)//) { # spent 29µs making 3 calls to YAML::PP::Lexer::CORE:regcomp, avg 10µs/call
# spent 2µs making 3 calls to YAML::PP::Lexer::CORE:subst, avg 667ns/call |
428 | push @next, $TOKEN_NAMES{ $1 } => $1, $self->line; | ||||
429 | $fetch_next = 1; | ||||
430 | last LOOP; | ||||
431 | } | ||||
432 | 5040 | 3.85ms | if ((length $spaces) < $indent) { | ||
433 | 5040 | 4.19ms | last LOOP; | ||
434 | } | ||||
435 | |||||
436 | my $ws = ''; | ||||
437 | if ($$yaml =~ s/\A($RE_WS+)//) { | ||||
438 | $ws = $1; | ||||
439 | } | ||||
440 | if (not length $$yaml) { | ||||
441 | push @tokens, ( EOL => $spaces . $ws . $eol, $self->line ); | ||||
442 | $self->set_next_line(undef); | ||||
443 | push @lines, ''; | ||||
444 | next LOOP; | ||||
445 | } | ||||
446 | if ($$yaml =~ s/\A(#.*)\z//) { | ||||
447 | push @tokens, ( EOL => $spaces . $ws . $1 . $eol, $self->line ); | ||||
448 | $self->set_next_line(undef); | ||||
449 | last LOOP; | ||||
450 | } | ||||
451 | |||||
452 | if ($$yaml =~ s/\A($RE2)//) { | ||||
453 | push @tokens, INDENT => $spaces, $self->line; | ||||
454 | push @tokens, WS => $ws, $self->line; | ||||
455 | push @tokens, PLAIN => $1, $self->line; | ||||
456 | push @lines, $1; | ||||
457 | my $ws = ''; | ||||
458 | if ($$yaml =~ s/\A($RE_WS+)//) { | ||||
459 | $ws = $1; | ||||
460 | } | ||||
461 | if (not length $$yaml) { | ||||
462 | push @tokens, EOL => $ws . $eol, $self->line; | ||||
463 | $self->set_next_line(undef); | ||||
464 | next LOOP; | ||||
465 | } | ||||
466 | |||||
467 | if ($$yaml =~ s/\A(#.*)\z//) { | ||||
468 | push @tokens, EOL => $ws . $1 . $eol, $self->line; | ||||
469 | $self->set_next_line(undef); | ||||
470 | last LOOP; | ||||
471 | } | ||||
472 | else { | ||||
473 | push @tokens, WS => $ws, $self->line if $ws; | ||||
474 | $fetch_next = 1; | ||||
475 | } | ||||
476 | } | ||||
477 | else { | ||||
478 | push @tokens, SPACE => $spaces, $self->line; | ||||
479 | push @tokens, WS => $ws, $self->line; | ||||
480 | if ($self->flowcontext) { | ||||
481 | $fetch_next = 1; | ||||
482 | } | ||||
483 | else { | ||||
484 | push @tokens, ERROR => $$yaml, $self->line; | ||||
485 | } | ||||
486 | } | ||||
487 | |||||
488 | last LOOP; | ||||
489 | |||||
490 | } | ||||
491 | # remove empty lines at the end | ||||
492 | 5040 | 3.28ms | while (@lines > 1 and $lines[-1] eq '') { | ||
493 | pop @lines; | ||||
494 | } | ||||
495 | 5040 | 5.59ms | if (@lines > 1) { | ||
496 | my $value = YAML::PP::Render->render_multi_val(\@lines); | ||||
497 | my @eol; | ||||
498 | if ($tokens[-3] eq 'EOL') { | ||||
499 | @eol = splice @tokens, -3; | ||||
500 | } | ||||
501 | $self->push_subtokens( { name => 'PLAIN_MULTI', value => $value }, \@tokens); | ||||
502 | $self->_push_tokens([ @eol, @next ]); | ||||
503 | } | ||||
504 | else { | ||||
505 | 5040 | 8.49ms | 5040 | 88.3ms | $self->_push_tokens([ @tokens, @next ]); # spent 88.3ms making 5040 calls to YAML::PP::Lexer::_push_tokens, avg 18µs/call |
506 | } | ||||
507 | 5040 | 3.68ms | @tokens = (); | ||
508 | 5040 | 1.22ms | if ($fetch_next) { | ||
509 | my $partial = $self->_fetch_next_tokens($next_line); | ||||
510 | if (not $partial) { | ||||
511 | $self->set_next_line(undef); | ||||
512 | } | ||||
513 | } | ||||
514 | 5040 | 15.7ms | return; | ||
515 | } | ||||
516 | |||||
517 | # spent 423µs (135+288) within YAML::PP::Lexer::fetch_block which was called:
# once (135µs+288µs) by YAML::PP::Parser::parse_tokens at line 381 of YAML/PP/Parser.pm | ||||
518 | 1 | 1µs | my ($self, $indent, $context) = @_; | ||
519 | 1 | 1µs | 1 | 0s | my $next_line = $self->next_line; # spent 0s making 1 call to YAML::PP::Lexer::next_line |
520 | 1 | 1µs | my $yaml = \$next_line->[1]; | ||
521 | 1 | 1µs | my $eol = $next_line->[2]; | ||
522 | |||||
523 | 1 | 0s | my @tokens; | ||
524 | 1 | 1µs | my $token_name = $TOKEN_NAMES{ $context }; | ||
525 | 1 | 22µs | 2 | 16µs | $$yaml =~ s/\A\Q$context\E// or die "Unexpected"; # spent 13µs making 1 call to YAML::PP::Lexer::CORE:regcomp
# spent 3µs making 1 call to YAML::PP::Lexer::CORE:subst |
526 | 1 | 2µs | 1 | 1µs | push @tokens, ( $token_name => $context, $self->line ); # spent 1µs making 1 call to YAML::PP::Lexer::line |
527 | 1 | 0s | my $current_indent = $indent; | ||
528 | 1 | 0s | my $started = 0; | ||
529 | 1 | 0s | my $set_indent = 0; | ||
530 | 1 | 0s | my $chomp = ''; | ||
531 | 1 | 9µs | 2 | 2µs | if ($$yaml =~ s/\A([1-9])([+-]?)//) { # spent 2µs making 2 calls to YAML::PP::Lexer::CORE:subst, avg 1µs/call |
532 | push @tokens, ( BLOCK_SCALAR_INDENT => $1, $self->line ); | ||||
533 | $set_indent = $1; | ||||
534 | $chomp = $2 if $2; | ||||
535 | push @tokens, ( BLOCK_SCALAR_CHOMP => $2, $self->line ) if $2; | ||||
536 | } | ||||
537 | elsif ($$yaml =~ s/\A([+-])([1-9])?//) { | ||||
538 | 1 | 3µs | 1 | 1µs | push @tokens, ( BLOCK_SCALAR_CHOMP => $1, $self->line ); # spent 1µs making 1 call to YAML::PP::Lexer::line |
539 | 1 | 1µs | $chomp = $1; | ||
540 | 1 | 0s | push @tokens, ( BLOCK_SCALAR_INDENT => $2, $self->line ) if $2; | ||
541 | 1 | 0s | $set_indent = $2 if $2; | ||
542 | } | ||||
543 | 1 | 1µs | if ($set_indent) { | ||
544 | $started = 1; | ||||
545 | $indent-- if $indent > 0; | ||||
546 | $current_indent = $indent + $set_indent; | ||||
547 | } | ||||
548 | 1 | 3µs | 1 | 0s | if (not length $$yaml) { # spent 0s making 1 call to YAML::PP::Lexer::line |
549 | push @tokens, ( EOL => $eol, $self->line ); | ||||
550 | } | ||||
551 | elsif ($$yaml =~ s/\A($RE_WS*(?:$RE_WS#.*|))\z//) { | ||||
552 | push @tokens, ( EOL => $1 . $eol, $self->line ); | ||||
553 | } | ||||
554 | else { | ||||
555 | $self->_push_tokens(\@tokens); | ||||
556 | $self->exception("Invalid block scalar"); | ||||
557 | } | ||||
558 | |||||
559 | 1 | 0s | my @lines; | ||
560 | 1 | 0s | while (1) { | ||
561 | 6 | 4µs | 6 | 4µs | $self->set_next_line(undef); # spent 4µs making 6 calls to YAML::PP::Lexer::set_next_line, avg 667ns/call |
562 | 6 | 8µs | 6 | 127µs | $next_line = $self->_fetch_next_line; # spent 127µs making 6 calls to YAML::PP::Lexer::_fetch_next_line, avg 21µs/call |
563 | 6 | 2µs | if (not $next_line) { | ||
564 | last; | ||||
565 | } | ||||
566 | 6 | 0s | my $spaces = $next_line->[0]; | ||
567 | 6 | 1µs | my $content = $next_line->[1]; | ||
568 | 6 | 2µs | my $eol = $next_line->[2]; | ||
569 | 6 | 1µs | if (not $spaces and $content =~ m/\A(---|\.\.\.)(?=$RE_WS|\z)/) { | ||
570 | last; | ||||
571 | } | ||||
572 | 6 | 3µs | if ((length $spaces) < $current_indent) { | ||
573 | 1 | 1µs | if (length $content) { | ||
574 | 1 | 4µs | 1 | 1µs | if ($content =~ m/\A\t/) { # spent 1µs making 1 call to YAML::PP::Lexer::CORE:match |
575 | $self->_push_tokens(\@tokens); | ||||
576 | $self->exception("Invalid block scalar"); | ||||
577 | } | ||||
578 | 1 | 1µs | last; | ||
579 | } | ||||
580 | else { | ||||
581 | push @lines, ''; | ||||
582 | push @tokens, ( EOL => $spaces . $eol, $self->line ); | ||||
583 | next; | ||||
584 | } | ||||
585 | } | ||||
586 | 5 | 1µs | if ((length $spaces) > $current_indent) { | ||
587 | 1 | 0s | if ($started) { | ||
588 | ($spaces, my $more_spaces) = unpack "a${current_indent}a*", $spaces; | ||||
589 | $content = $more_spaces . $content; | ||||
590 | } | ||||
591 | } | ||||
592 | 5 | 1µs | unless (length $content) { | ||
593 | push @lines, ''; | ||||
594 | push @tokens, ( INDENT => $spaces, $self->line, EOL => $eol, $self->line ); | ||||
595 | unless ($started) { | ||||
596 | $current_indent = length $spaces; | ||||
597 | } | ||||
598 | next; | ||||
599 | } | ||||
600 | 5 | 1µs | unless ($started) { | ||
601 | 1 | 0s | $started = 1; | ||
602 | 1 | 0s | $current_indent = length $spaces; | ||
603 | } | ||||
604 | 5 | 3µs | push @lines, $content; | ||
605 | 5 | 16µs | 15 | 10µs | push @tokens, ( # spent 10µs making 15 calls to YAML::PP::Lexer::line, avg 667ns/call |
606 | INDENT => $spaces, $self->line, | ||||
607 | BLOCK_SCALAR_CONTENT => $content, $self->line, | ||||
608 | EOL => $eol, $self->line, | ||||
609 | ); | ||||
610 | } | ||||
611 | 1 | 6µs | 1 | 19µs | my $value = YAML::PP::Render->render_block_scalar($context, $chomp, \@lines); # spent 19µs making 1 call to YAML::PP::Render::render_block_scalar |
612 | 1 | 1µs | my @eol = splice @tokens, -3; | ||
613 | 1 | 2µs | 1 | 91µs | $self->push_subtokens( { name => 'BLOCK_SCALAR', value => $value }, \@tokens ); # spent 91µs making 1 call to YAML::PP::Lexer::push_subtokens |
614 | 1 | 3µs | 1 | 16µs | $self->_push_tokens([ @eol ]); # spent 16µs making 1 call to YAML::PP::Lexer::_push_tokens |
615 | 1 | 8µs | return 0; | ||
616 | } | ||||
617 | |||||
618 | # spent 251ms (66.3+185) within YAML::PP::Lexer::fetch_quoted which was called 2056 times, avg 122µs/call:
# 2056 times (66.3ms+185ms) by YAML::PP::Parser::parse_tokens at line 381 of YAML/PP/Parser.pm, avg 122µs/call | ||||
619 | 2056 | 919µs | my ($self, $indent, $context) = @_; | ||
620 | 2056 | 2.29ms | 2056 | 1.09ms | my $next_line = $self->next_line; # spent 1.09ms making 2056 calls to YAML::PP::Lexer::next_line, avg 530ns/call |
621 | 2056 | 1.16ms | my $yaml = \$next_line->[1]; | ||
622 | 2056 | 965µs | my $spaces = $next_line->[0]; | ||
623 | |||||
624 | 2056 | 1.04ms | my $token_name = $TOKEN_NAMES{ $context }; | ||
625 | 2056 | 14.4ms | 4112 | 6.43ms | $$yaml =~ s/\A\Q$context// or die "Unexpected";; # spent 4.86ms making 2056 calls to YAML::PP::Lexer::CORE:subst, avg 2µs/call
# spent 1.57ms making 2056 calls to YAML::PP::Lexer::CORE:regcomp, avg 766ns/call |
626 | 2056 | 3.76ms | 2056 | 1.17ms | my @tokens = ( $token_name => $context, $self->line ); # spent 1.17ms making 2056 calls to YAML::PP::Lexer::line, avg 568ns/call |
627 | |||||
628 | 2056 | 533µs | my $start = 1; | ||
629 | 2056 | 430µs | my @values; | ||
630 | 2056 | 427µs | while (1) { | ||
631 | |||||
632 | 2056 | 609µs | unless ($start) { | ||
633 | $next_line = $self->_fetch_next_line or do { | ||||
634 | for (my $i = 0; $i < @tokens; $i+= 3) { | ||||
635 | my $token = $tokens[ $i + 1 ]; | ||||
636 | if (ref $token) { | ||||
637 | $tokens[ $i + 1 ] = $token->{orig}; | ||||
638 | } | ||||
639 | } | ||||
640 | $self->_push_tokens(\@tokens); | ||||
641 | $self->exception("Missing closing quote <$context> at EOF"); | ||||
642 | }; | ||||
643 | $start = 0; | ||||
644 | $spaces = $next_line->[0]; | ||||
645 | $yaml = \$next_line->[1]; | ||||
646 | |||||
647 | if (not length $$yaml) { | ||||
648 | push @tokens, ( EOL => $spaces . $next_line->[2], $self->line ); | ||||
649 | $self->set_next_line(undef); | ||||
650 | push @values, { value => '', orig => '' }; | ||||
651 | next; | ||||
652 | } | ||||
653 | elsif (not $spaces and $$yaml =~ m/\A(---|\.\.\.)(?=$RE_WS|\z)/) { | ||||
654 | for (my $i = 0; $i < @tokens; $i+= 3) { | ||||
655 | my $token = $tokens[ $i + 1 ]; | ||||
656 | if (ref $token) { | ||||
657 | $tokens[ $i + 1 ] = $token->{orig}; | ||||
658 | } | ||||
659 | } | ||||
660 | $self->_push_tokens(\@tokens); | ||||
661 | $self->exception("Missing closing quote <$context> or invalid document marker"); | ||||
662 | } | ||||
663 | elsif ((length $spaces) < $indent) { | ||||
664 | for (my $i = 0; $i < @tokens; $i+= 3) { | ||||
665 | my $token = $tokens[ $i + 1 ]; | ||||
666 | if (ref $token) { | ||||
667 | $tokens[ $i + 1 ] = $token->{orig}; | ||||
668 | } | ||||
669 | } | ||||
670 | $self->_push_tokens(\@tokens); | ||||
671 | $self->exception("Wrong indendation or missing closing quote <$context>"); | ||||
672 | } | ||||
673 | |||||
674 | if ($$yaml =~ s/\A($RE_WS+)//) { | ||||
675 | $spaces .= $1; | ||||
676 | } | ||||
677 | push @tokens, ( WS => $spaces, $self->line ); | ||||
678 | } | ||||
679 | |||||
680 | 2056 | 4.50ms | 2056 | 59.1ms | my $v = $self->_read_quoted_tokens($start, $context, $yaml, \@tokens); # spent 59.1ms making 2056 calls to YAML::PP::Lexer::_read_quoted_tokens, avg 29µs/call |
681 | 2056 | 529µs | push @values, $v; | ||
682 | 2056 | 1.38ms | if ($tokens[-3] eq $token_name) { | ||
683 | 2056 | 5.92ms | 2056 | 64.0ms | if ($start) { # spent 64.0ms making 2056 calls to YAML::PP::Lexer::push_subtokens, avg 31µs/call |
684 | $self->push_subtokens( | ||||
685 | { name => 'QUOTED', value => $v->{value} }, \@tokens | ||||
686 | ); | ||||
687 | } | ||||
688 | else { | ||||
689 | my $value = YAML::PP::Render->render_quoted($context, \@values); | ||||
690 | $self->push_subtokens( | ||||
691 | { name => 'QUOTED_MULTILINE', value => $value }, \@tokens | ||||
692 | ); | ||||
693 | } | ||||
694 | 2056 | 1.78ms | 2144 | 1.14ms | $self->set_context(1) if $self->flowcontext; # spent 1.02ms making 2056 calls to YAML::PP::Lexer::flowcontext, avg 497ns/call
# spent 120µs making 88 calls to YAML::PP::Lexer::set_context, avg 1µs/call |
695 | 2056 | 1.01ms | if (length $$yaml) { | ||
696 | 632 | 726µs | 632 | 29.6ms | my $partial = $self->_fetch_next_tokens($next_line); # spent 29.6ms making 632 calls to YAML::PP::Lexer::_fetch_next_tokens, avg 47µs/call |
697 | 632 | 632µs | 598 | 435µs | if (not $partial) { # spent 435µs making 598 calls to YAML::PP::Lexer::set_next_line, avg 727ns/call |
698 | $self->set_next_line(undef); | ||||
699 | } | ||||
700 | 632 | 3.53ms | return 0; | ||
701 | } | ||||
702 | else { | ||||
703 | 1424 | 1.49ms | @tokens = (); | ||
704 | 1424 | 2.08ms | 1424 | 694µs | push @tokens, ( EOL => $next_line->[2], $self->line ); # spent 694µs making 1424 calls to YAML::PP::Lexer::line, avg 487ns/call |
705 | 1424 | 1.50ms | 1424 | 19.9ms | $self->_push_tokens(\@tokens); # spent 19.9ms making 1424 calls to YAML::PP::Lexer::_push_tokens, avg 14µs/call |
706 | 1424 | 1.49ms | 1424 | 1.08ms | $self->set_next_line(undef); # spent 1.08ms making 1424 calls to YAML::PP::Lexer::set_next_line, avg 761ns/call |
707 | 1424 | 6.81ms | return; | ||
708 | } | ||||
709 | } | ||||
710 | $tokens[-2] .= $next_line->[2]; | ||||
711 | $self->set_next_line(undef); | ||||
712 | $start = 0; | ||||
713 | } | ||||
714 | } | ||||
715 | |||||
716 | # spent 59.1ms (44.1+14.9) within YAML::PP::Lexer::_read_quoted_tokens which was called 2056 times, avg 29µs/call:
# 2056 times (44.1ms+14.9ms) by YAML::PP::Lexer::fetch_quoted at line 680, avg 29µs/call | ||||
717 | 2056 | 1.15ms | my ($self, $start, $first, $yaml, $tokens) = @_; | ||
718 | 2056 | 873µs | my $quoted = ''; | ||
719 | 2056 | 545µs | my $decoded = ''; | ||
720 | 2056 | 1.13ms | my $token_name = $TOKEN_NAMES{ $first }; | ||
721 | 2056 | 702µs | my $eol = ''; | ||
722 | 2056 | 1.19ms | if ($first eq "'") { | ||
723 | 2056 | 1.10ms | my $regex = $REGEXES{SINGLEQUOTED}; | ||
724 | 2056 | 15.2ms | 4112 | 7.91ms | if ($$yaml =~ s/\A($regex)//) { # spent 5.15ms making 2056 calls to YAML::PP::Lexer::CORE:subst, avg 3µs/call
# spent 2.76ms making 2056 calls to YAML::PP::Lexer::CORE:regcomp, avg 1µs/call |
725 | 2056 | 2.69ms | $quoted .= $1; | ||
726 | 2056 | 1.15ms | $decoded .= $1; | ||
727 | 2056 | 4.30ms | 2056 | 1.56ms | $decoded =~ s/''/'/g; # spent 1.56ms making 2056 calls to YAML::PP::Lexer::CORE:subst, avg 761ns/call |
728 | } | ||||
729 | 2056 | 1.46ms | unless (length $$yaml) { | ||
730 | if ($quoted =~ s/($RE_WS+)\z//) { | ||||
731 | $eol = $1; | ||||
732 | $decoded =~ s/($eol)\z//; | ||||
733 | } | ||||
734 | } | ||||
735 | } | ||||
736 | else { | ||||
737 | ($quoted, $decoded, $eol) = $self->_read_doublequoted($yaml); | ||||
738 | } | ||||
739 | 2056 | 3.51ms | my $value = { value => $decoded, orig => $quoted }; | ||
740 | |||||
741 | 2056 | 8.65ms | 4112 | 3.27ms | if ($$yaml =~ s/\A$first//) { # spent 2.29ms making 2056 calls to YAML::PP::Lexer::CORE:subst, avg 1µs/call
# spent 981µs making 2056 calls to YAML::PP::Lexer::CORE:regcomp, avg 477ns/call |
742 | 2056 | 3.45ms | 2056 | 1.29ms | if ($start) { # spent 1.29ms making 2056 calls to YAML::PP::Lexer::line, avg 629ns/call |
743 | push @$tokens, ( $token_name . 'D' => $value, $self->line ); | ||||
744 | } | ||||
745 | else { | ||||
746 | push @$tokens, ( $token_name . 'D_LINE' => $value, $self->line ); | ||||
747 | } | ||||
748 | 2056 | 2.45ms | 2056 | 893µs | push @$tokens, ( $token_name => $first, $self->line ); # spent 893µs making 2056 calls to YAML::PP::Lexer::line, avg 434ns/call |
749 | 2056 | 5.26ms | return $value; | ||
750 | } | ||||
751 | if (length $$yaml) { | ||||
752 | push @$tokens, ( $token_name . 'D' => $value->{orig}, $self->line ); | ||||
753 | $self->_push_tokens($tokens); | ||||
754 | $self->exception("Invalid quoted <$first> string"); | ||||
755 | } | ||||
756 | |||||
757 | push @$tokens, ( $token_name . 'D_LINE' => $value, $self->line ); | ||||
758 | push @$tokens, ( EOL => $eol, $self->line ); | ||||
759 | |||||
760 | return $value; | ||||
761 | } | ||||
762 | |||||
763 | sub _read_doublequoted { | ||||
764 | my ($self, $yaml) = @_; | ||||
765 | my $quoted = ''; | ||||
766 | my $decoded = ''; | ||||
767 | my $eol = ''; | ||||
768 | while (1) { | ||||
769 | my $last = 1; | ||||
770 | if ($$yaml =~ s/\A([^"\\ \t]+)//) { | ||||
771 | $quoted .= $1; | ||||
772 | $decoded .= $1; | ||||
773 | $last = 0; | ||||
774 | } | ||||
775 | if ($$yaml =~ s/\A($RE_ESCAPES)//) { | ||||
776 | $quoted .= $1; | ||||
777 | my $dec = defined $2 ? $CONTROL{ $2 } | ||||
778 | : defined $3 ? chr hex $3 | ||||
779 | : defined $4 ? chr hex $4 | ||||
780 | : chr hex $5; | ||||
781 | $decoded .= $dec; | ||||
782 | $last = 0; | ||||
783 | } | ||||
784 | if ($$yaml =~ s/\A([ \t]+)//) { | ||||
785 | my $spaces = $1; | ||||
786 | if (length $$yaml) { | ||||
787 | $quoted .= $spaces; | ||||
788 | $decoded .= $spaces; | ||||
789 | $last = 0; | ||||
790 | } | ||||
791 | else { | ||||
792 | $eol = $spaces; | ||||
793 | last; | ||||
794 | } | ||||
795 | } | ||||
796 | if ($$yaml =~ s/\A(\\)\z//) { | ||||
797 | $quoted .= $1; | ||||
798 | $decoded .= $1; | ||||
799 | last; | ||||
800 | } | ||||
801 | last if $last; | ||||
802 | } | ||||
803 | return ($quoted, $decoded, $eol); | ||||
804 | } | ||||
805 | |||||
806 | sub _fetch_next_tokens_directive { | ||||
807 | my ($self, $yaml, $eol) = @_; | ||||
808 | my @tokens; | ||||
809 | |||||
810 | my $trailing_ws = ''; | ||||
811 | my $warn = $ENV{YAML_PP_RESERVED_DIRECTIVE} || 'warn'; | ||||
812 | if ($$yaml =~ s/\A(\s*%YAML[ \t]+([0-9]+\.[0-9]+))//) { | ||||
813 | my $dir = $1; | ||||
814 | my $version = $2; | ||||
815 | if ($$yaml =~ s/\A($RE_WS+)//) { | ||||
816 | $trailing_ws = $1; | ||||
817 | } | ||||
818 | elsif (length $$yaml) { | ||||
819 | push @tokens, ( 'Invalid directive' => $dir.$$yaml.$eol, $self->line ); | ||||
820 | $self->_push_tokens(\@tokens); | ||||
821 | return; | ||||
822 | } | ||||
823 | if ($version !~ m/^1\.[12]$/) { | ||||
824 | if ($warn eq 'warn') { | ||||
825 | warn "Unsupported YAML version '$dir'"; | ||||
826 | } | ||||
827 | elsif ($warn eq 'fatal') { | ||||
828 | push @tokens, ( 'Unsupported YAML version' => $dir, $self->line ); | ||||
829 | $self->_push_tokens(\@tokens); | ||||
830 | return; | ||||
831 | } | ||||
832 | } | ||||
833 | push @tokens, ( YAML_DIRECTIVE => $dir, $self->line ); | ||||
834 | } | ||||
835 | elsif ($$yaml =~ s/\A(\s*%TAG[ \t]+(!$RE_NS_WORD_CHAR*!|!)[ \t]+(tag:\S+|!$RE_URI_CHAR+))($RE_WS*)//) { | ||||
836 | push @tokens, ( TAG_DIRECTIVE => $1, $self->line ); | ||||
837 | # TODO | ||||
838 | my $tag_alias = $2; | ||||
839 | my $tag_url = $3; | ||||
840 | $trailing_ws = $4; | ||||
841 | } | ||||
842 | elsif ($$yaml =~ s/\A(\s*\A%(?:\w+).*)//) { | ||||
843 | push @tokens, ( RESERVED_DIRECTIVE => $1, $self->line ); | ||||
844 | if ($warn eq 'warn') { | ||||
845 | warn "Found reserved directive '$1'"; | ||||
846 | } | ||||
847 | elsif ($warn eq 'fatal') { | ||||
848 | die "Found reserved directive '$1'"; | ||||
849 | } | ||||
850 | } | ||||
851 | else { | ||||
852 | push @tokens, ( 'Invalid directive' => $$yaml, $self->line ); | ||||
853 | push @tokens, ( EOL => $eol, $self->line ); | ||||
854 | $self->_push_tokens(\@tokens); | ||||
855 | return; | ||||
856 | } | ||||
857 | if (not length $$yaml) { | ||||
858 | push @tokens, ( EOL => $eol, $self->line ); | ||||
859 | } | ||||
860 | elsif ($trailing_ws and $$yaml =~ s/\A(#.*)?\z//) { | ||||
861 | push @tokens, ( EOL => "$trailing_ws$1$eol", $self->line ); | ||||
862 | $self->_push_tokens(\@tokens); | ||||
863 | return; | ||||
864 | } | ||||
865 | elsif ($$yaml =~ s/\A([ \t]+#.*)?\z//) { | ||||
866 | push @tokens, ( EOL => "$1$eol", $self->line ); | ||||
867 | $self->_push_tokens(\@tokens); | ||||
868 | return; | ||||
869 | } | ||||
870 | else { | ||||
871 | push @tokens, ( 'Invalid directive' => $trailing_ws.$$yaml, $self->line ); | ||||
872 | push @tokens, ( EOL => $eol, $self->line ); | ||||
873 | } | ||||
874 | $self->_push_tokens(\@tokens); | ||||
875 | return; | ||||
876 | } | ||||
877 | |||||
878 | # spent 889ms (769+120) within YAML::PP::Lexer::_push_tokens which was called 61685 times, avg 14µs/call:
# 18884 times (239ms+35.2ms) by YAML::PP::Lexer::_fetch_next_tokens at line 356, avg 15µs/call
# 13844 times (153ms+27.6ms) by YAML::PP::Lexer::fetch_plain at line 396, avg 13µs/call
# 13449 times (160ms+25.4ms) by YAML::PP::Lexer::fetch_next_tokens at line 217, avg 14µs/call
# 6456 times (85.4ms+12.7ms) by YAML::PP::Lexer::_fetch_next_tokens at line 304, avg 15µs/call
# 5040 times (77.3ms+10.9ms) by YAML::PP::Lexer::fetch_plain at line 505, avg 18µs/call
# 2057 times (28.7ms+4.10ms) by YAML::PP::Lexer::_fetch_next_tokens at line 279, avg 16µs/call
# 1424 times (17.3ms+2.67ms) by YAML::PP::Lexer::fetch_quoted at line 705, avg 14µs/call
# 529 times (9.23ms+1.06ms) by YAML::PP::Lexer::_fetch_next_tokens at line 257, avg 19µs/call
# once (29µs+5µs) by YAML::PP::Lexer::fetch_next_tokens at line 208
# once (13µs+3µs) by YAML::PP::Lexer::fetch_block at line 614 | ||||
879 | 61685 | 11.5ms | my ($self, $new_tokens) = @_; | ||
880 | 61685 | 40.2ms | 61685 | 30.1ms | my $next = $self->next_tokens; # spent 30.1ms making 61685 calls to YAML::PP::Lexer::next_tokens, avg 488ns/call |
881 | 61685 | 36.4ms | 61685 | 25.8ms | my $line = $self->line; # spent 25.8ms making 61685 calls to YAML::PP::Lexer::line, avg 418ns/call |
882 | 61685 | 39.9ms | 61685 | 27.1ms | my $column = $self->offset; # spent 27.1ms making 61685 calls to YAML::PP::Lexer::offset, avg 440ns/call |
883 | |||||
884 | 61685 | 68.0ms | for (my $i = 0; $i < @$new_tokens; $i += 3) { | ||
885 | 90857 | 27.9ms | my $value = $new_tokens->[ $i + 1 ]; | ||
886 | 90857 | 21.4ms | my $name = $new_tokens->[ $i ]; | ||
887 | 90857 | 15.9ms | my $line = $new_tokens->[ $i + 2 ]; | ||
888 | 90857 | 109ms | my $push = { | ||
889 | name => $name, | ||||
890 | line => $line, | ||||
891 | column => $column, | ||||
892 | value => $value, | ||||
893 | }; | ||||
894 | 90857 | 31.2ms | $column += length $value unless $name eq 'CONTEXT'; | ||
895 | 90857 | 16.1ms | push @$next, $push; | ||
896 | 90857 | 34.2ms | if ($name eq 'EOL') { | ||
897 | $column = 0; | ||||
898 | } | ||||
899 | } | ||||
900 | 61685 | 43.1ms | 61685 | 36.6ms | $self->set_offset($column); # spent 36.6ms making 61685 calls to YAML::PP::Lexer::set_offset, avg 594ns/call |
901 | 61685 | 104ms | return $next; | ||
902 | } | ||||
903 | |||||
904 | sub push_subtokens { | ||||
905 | 2057 | 653µs | my ($self, $token, $subtokens) = @_; | ||
906 | 2057 | 1.61ms | 2057 | 1.12ms | my $next = $self->next_tokens; # spent 1.12ms making 2057 calls to YAML::PP::Lexer::next_tokens, avg 542ns/call |
907 | 2057 | 1.44ms | 2057 | 884µs | my $line = $self->line; # spent 884µs making 2057 calls to YAML::PP::Lexer::line, avg 430ns/call |
908 | 2057 | 1.99ms | 2057 | 974µs | my $column = $self->offset; # spent 974µs making 2057 calls to YAML::PP::Lexer::offset, avg 474ns/call |
909 | 2057 | 1.19ms | $token->{column} = $column; | ||
910 | 2057 | 1.30ms | $token->{subtokens} = \my @sub; | ||
911 | |||||
912 | 2057 | 4.90ms | for (my $i = 0; $i < @$subtokens; $i+=3) { | ||
913 | 6185 | 1.45ms | my $name = $subtokens->[ $i ]; | ||
914 | 6185 | 3.28ms | my $value = $subtokens->[ $i + 1 ]; | ||
915 | 6185 | 1.51ms | my $line = $subtokens->[ $i + 2 ]; | ||
916 | 6185 | 7.58ms | my $push = { | ||
917 | name => $subtokens->[ $i ], | ||||
918 | line => $line, | ||||
919 | column => $column, | ||||
920 | }; | ||||
921 | 6185 | 3.19ms | if (ref $value eq 'HASH') { | ||
922 | 2056 | 7.68ms | %$push = ( %$push, %$value ); | ||
923 | 2056 | 1.60ms | $column += length $value->{orig}; | ||
924 | } | ||||
925 | else { | ||||
926 | 4129 | 2.38ms | $push->{value} = $value; | ||
927 | 4129 | 870µs | $column += length $value; | ||
928 | } | ||||
929 | 6185 | 1.59ms | if ($push->{name} eq 'EOL') { | ||
930 | $column = 0; | ||||
931 | } | ||||
932 | 6185 | 2.34ms | push @sub, $push; | ||
933 | } | ||||
934 | 2057 | 1.06ms | $token->{line} = $sub[0]->{line}; | ||
935 | 2057 | 656µs | push @$next, $token; | ||
936 | 2057 | 1.60ms | 2057 | 1.43ms | $self->set_offset($column); # spent 1.43ms making 2057 calls to YAML::PP::Lexer::set_offset, avg 697ns/call |
937 | 2057 | 4.32ms | return $next; | ||
938 | } | ||||
939 | |||||
940 | sub exception { | ||||
941 | my ($self, $msg) = @_; | ||||
942 | my $next = $self->next_tokens; | ||||
943 | $next = []; | ||||
944 | my $line = @$next ? $next->[0]->{line} : $self->line; | ||||
945 | my @caller = caller(0); | ||||
946 | my $yaml = ''; | ||||
947 | if (my $nl = $self->next_line) { | ||||
948 | $yaml = join '', @$nl; | ||||
949 | $yaml = $nl->[1]; | ||||
950 | } | ||||
951 | my $e = YAML::PP::Exception->new( | ||||
952 | line => $line, | ||||
953 | column => $self->offset + 1, | ||||
954 | msg => $msg, | ||||
955 | next => $next, | ||||
956 | where => $caller[1] . ' line ' . $caller[2], | ||||
957 | yaml => $yaml, | ||||
958 | ); | ||||
959 | croak $e; | ||||
960 | } | ||||
961 | |||||
962 | 1 | 56µs | 1; | ||
sub YAML::PP::Lexer::CORE:match; # opcode | |||||
# spent 11µs within YAML::PP::Lexer::CORE:qr which was called 11 times, avg 1µs/call:
# 4 times (5µs+0s) by YAML::PP::Parser::BEGIN@18 at line 127, avg 1µs/call
# once (2µs+0s) by YAML::PP::Parser::BEGIN@18 at line 50
# once (1µs+0s) by YAML::PP::Parser::BEGIN@18 at line 51
# once (1µs+0s) by YAML::PP::Parser::BEGIN@18 at line 52
# once (1µs+0s) by YAML::PP::Parser::BEGIN@18 at line 121
# once (1µs+0s) by YAML::PP::Parser::BEGIN@18 at line 234
# once (0s+0s) by YAML::PP::Parser::BEGIN@18 at line 122
# once (0s+0s) by YAML::PP::Parser::BEGIN@18 at line 120 | |||||
# spent 201ms within YAML::PP::Lexer::CORE:regcomp which was called 58874 times, avg 3µs/call:
# 18884 times (138ms+0s) by YAML::PP::Lexer::fetch_plain at line 376, avg 7µs/call
# 18884 times (18.0ms+0s) by YAML::PP::Lexer::fetch_plain at line 383, avg 954ns/call
# 14054 times (38.4ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 284, avg 3µs/call
# 2056 times (2.76ms+0s) by YAML::PP::Lexer::_read_quoted_tokens at line 724, avg 1µs/call
# 2056 times (1.57ms+0s) by YAML::PP::Lexer::fetch_quoted at line 625, avg 766ns/call
# 2056 times (981µs+0s) by YAML::PP::Lexer::_read_quoted_tokens at line 741, avg 477ns/call
# 689 times (516µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 329, avg 749ns/call
# 88 times (119µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 264, avg 1µs/call
# 88 times (105µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 270, avg 1µs/call
# 6 times (49µs+0s) by YAML::PP::Lexer::fetch_next_tokens at line 208, avg 8µs/call
# 3 times (256µs+0s) by YAML::PP::Parser::BEGIN@18 at line 127, avg 85µs/call
# 3 times (29µs+0s) by YAML::PP::Lexer::fetch_plain at line 427, avg 10µs/call
# once (22µs+0s) by YAML::PP::Parser::BEGIN@18 at line 50
# once (13µs+0s) by YAML::PP::Lexer::fetch_block at line 525
# once (13µs+0s) by YAML::PP::Parser::BEGIN@18 at line 52
# once (9µs+0s) by YAML::PP::Parser::BEGIN@18 at line 121
# once (9µs+0s) by YAML::PP::Parser::BEGIN@18 at line 120
# once (9µs+0s) by YAML::PP::Parser::BEGIN@18 at line 51
# once (8µs+0s) by YAML::PP::Parser::BEGIN@18 at line 122 | |||||
# spent 181ms within YAML::PP::Lexer::CORE:subst which was called 75666 times, avg 2µs/call:
# 18884 times (100ms+0s) by YAML::PP::Lexer::fetch_plain at line 376, avg 5µs/call
# 18884 times (23.9ms+0s) by YAML::PP::Lexer::fetch_plain at line 383, avg 1µs/call
# 14054 times (24.8ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 284, avg 2µs/call
# 14054 times (16.1ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 302, avg 1µs/call
# 2056 times (5.15ms+0s) by YAML::PP::Lexer::_read_quoted_tokens at line 724, avg 3µs/call
# 2056 times (4.86ms+0s) by YAML::PP::Lexer::fetch_quoted at line 625, avg 2µs/call
# 2056 times (2.29ms+0s) by YAML::PP::Lexer::_read_quoted_tokens at line 741, avg 1µs/call
# 2056 times (1.56ms+0s) by YAML::PP::Lexer::_read_quoted_tokens at line 727, avg 761ns/call
# 689 times (965µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 329, avg 1µs/call
# 689 times (684µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 331, avg 993ns/call
# 88 times (52µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 264, avg 591ns/call
# 88 times (31µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 270, avg 352ns/call
# 6 times (7µs+0s) by YAML::PP::Lexer::fetch_next_tokens at line 208, avg 1µs/call
# 3 times (2µs+0s) by YAML::PP::Lexer::fetch_plain at line 427, avg 667ns/call
# 2 times (2µs+0s) by YAML::PP::Lexer::fetch_block at line 531, avg 1µs/call
# once (3µs+0s) by YAML::PP::Lexer::fetch_block at line 525 |