| Filename | /Users/ether/.perlbrew/libs/36.0@std/lib/perl5/YAML/PP/Lexer.pm |
| Statements | Executed 3206241 statements in 3.31s |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 61685 | 10 | 1 | 873ms | 994ms | YAML::PP::Lexer::_push_tokens |
| 27926 | 3 | 1 | 539ms | 1.22s | YAML::PP::Lexer::_fetch_next_tokens |
| 18884 | 1 | 1 | 469ms | 1.93s | YAML::PP::Lexer::fetch_plain |
| 18497 | 3 | 1 | 235ms | 379ms | YAML::PP::Lexer::_fetch_next_line |
| 13451 | 1 | 1 | 223ms | 1.03s | YAML::PP::Lexer::fetch_next_tokens |
| 58874 | 19 | 1 | 202ms | 202ms | YAML::PP::Lexer::CORE:regcomp (opcode) |
| 75666 | 16 | 1 | 196ms | 196ms | YAML::PP::Lexer::CORE:subst (opcode) |
| 160784 | 22 | 1 | 75.1ms | 75.1ms | YAML::PP::Lexer::line |
| 2056 | 1 | 1 | 69.0ms | 357ms | YAML::PP::Lexer::fetch_quoted |
| 2057 | 2 | 1 | 59.8ms | 64.2ms | YAML::PP::Lexer::push_subtokens |
| 2056 | 1 | 1 | 46.0ms | 61.3ms | YAML::PP::Lexer::_read_quoted_tokens |
| 77194 | 4 | 2 | 40.4ms | 40.4ms | YAML::PP::Lexer::next_tokens |
| 63742 | 2 | 1 | 39.4ms | 39.4ms | YAML::PP::Lexer::set_offset |
| 76215 | 7 | 2 | 37.2ms | 37.2ms | YAML::PP::Lexer::flowcontext |
| 13456 | 2 | 1 | 27.2ms | 27.2ms | YAML::PP::Lexer::CORE:match (opcode) |
| 63742 | 2 | 1 | 26.6ms | 26.6ms | YAML::PP::Lexer::offset |
| 39438 | 4 | 1 | 22.2ms | 22.2ms | YAML::PP::Lexer::next_line |
| 37475 | 1 | 1 | 20.1ms | 20.1ms | YAML::PP::Lexer::context |
| 26911 | 8 | 1 | 18.9ms | 18.9ms | YAML::PP::Lexer::set_next_line |
| 13455 | 1 | 1 | 9.49ms | 9.49ms | YAML::PP::Lexer::set_block |
| 13455 | 1 | 1 | 8.63ms | 8.63ms | YAML::PP::Lexer::inc_line |
| 14025 | 1 | 1 | 8.34ms | 8.34ms | YAML::PP::Lexer::block |
| 13456 | 1 | 1 | 7.62ms | 7.62ms | YAML::PP::Lexer::reader |
| 1 | 1 | 1 | 3.48ms | 3.77ms | YAML::PP::Lexer::BEGIN@10 |
| 1102 | 1 | 1 | 990µs | 990µs | YAML::PP::Lexer::set_flowcontext |
| 1 | 1 | 1 | 149µs | 320µs | YAML::PP::Lexer::fetch_block |
| 176 | 2 | 1 | 106µs | 106µs | YAML::PP::Lexer::set_context |
| 1 | 1 | 1 | 33µs | 36µs | YAML::PP::Parser::BEGIN@1 |
| 11 | 8 | 1 | 20µs | 20µs | YAML::PP::Lexer::CORE:qr (opcode) |
| 3 | 3 | 2 | 18µs | 18µs | YAML::PP::Lexer::init |
| 1 | 1 | 1 | 13µs | 41µs | YAML::PP::Lexer::BEGIN@11 |
| 1 | 1 | 1 | 13µs | 26µs | YAML::PP::Lexer::new |
| 1 | 1 | 1 | 9µs | 35µs | YAML::PP::Parser::BEGIN@2.286 |
| 1 | 1 | 1 | 6µs | 48µs | YAML::PP::Lexer::BEGIN@7 |
| 1 | 1 | 1 | 4µs | 21µs | YAML::PP::Lexer::BEGIN@8 |
| 1 | 1 | 1 | 3µs | 3µs | YAML::PP::Lexer::set_reader |
| 0 | 0 | 0 | 0s | 0s | YAML::PP::Lexer::_fetch_next_tokens_directive |
| 0 | 0 | 0 | 0s | 0s | YAML::PP::Lexer::_read_doublequoted |
| 0 | 0 | 0 | 0s | 0s | YAML::PP::Lexer::exception |
| 0 | 0 | 0 | 0s | 0s | YAML::PP::Lexer::set_line |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | 2 | 40µs | 2 | 39µs | # spent 36µs (33+3) within YAML::PP::Parser::BEGIN@1 which was called:
# once (33µs+3µs) by YAML::PP::Parser::BEGIN@18 at line 1 # spent 36µs making 1 call to YAML::PP::Parser::BEGIN@1
# spent 3µs making 1 call to strict::import |
| 2 | 2 | 50µs | 2 | 61µs | # spent 35µs (9+26) within YAML::PP::Parser::BEGIN@2.286 which was called:
# once (9µs+26µs) by YAML::PP::Parser::BEGIN@18 at line 2 # spent 35µs making 1 call to YAML::PP::Parser::BEGIN@2.286
# spent 26µ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 | 33µs | 2 | 90µs | # spent 48µs (6+42) within YAML::PP::Lexer::BEGIN@7 which was called:
# once (6µs+42µs) by YAML::PP::Parser::BEGIN@18 at line 7 # spent 48µs making 1 call to YAML::PP::Lexer::BEGIN@7
# spent 42µs making 1 call to constant::import |
| 8 | 2 | 20µs | 2 | 38µs | # spent 21µs (4+17) within YAML::PP::Lexer::BEGIN@8 which was called:
# once (4µs+17µs) by YAML::PP::Parser::BEGIN@18 at line 8 # spent 21µs making 1 call to YAML::PP::Lexer::BEGIN@8
# spent 17µs making 1 call to constant::import |
| 9 | |||||
| 10 | 2 | 541µs | 2 | 3.96ms | # spent 3.77ms (3.48+293µs) within YAML::PP::Lexer::BEGIN@10 which was called:
# once (3.48ms+293µs) by YAML::PP::Parser::BEGIN@18 at line 10 # spent 3.77ms making 1 call to YAML::PP::Lexer::BEGIN@10
# spent 187µs making 1 call to Exporter::import |
| 11 | 2 | 17.1ms | 2 | 69µs | # spent 41µs (13+28) within YAML::PP::Lexer::BEGIN@11 which was called:
# once (13µs+28µs) by YAML::PP::Parser::BEGIN@18 at line 11 # spent 41µs making 1 call to YAML::PP::Lexer::BEGIN@11
# spent 28µs making 1 call to Exporter::import |
| 12 | |||||
| 13 | # spent 26µs (13+13) within YAML::PP::Lexer::new which was called:
# once (13µs+13µs) by YAML::PP::Parser::new at line 29 of YAML/PP/Parser.pm | ||||
| 14 | 1 | 6µs | my ($class, %args) = @_; | ||
| 15 | my $self = bless { | ||||
| 16 | reader => $args{reader}, | ||||
| 17 | 1 | 1µs | }, $class; | ||
| 18 | 1 | 3µs | 1 | 13µs | $self->init; # spent 13µs making 1 call to YAML::PP::Lexer::init |
| 19 | 1 | 4µs | return $self; | ||
| 20 | } | ||||
| 21 | |||||
| 22 | # spent 18µs within YAML::PP::Lexer::init which was called 3 times, avg 6µs/call:
# once (13µs+0s) by YAML::PP::Lexer::new at line 18
# once (4µs+0s) by YAML::PP::Parser::init at line 115 of YAML/PP/Parser.pm
# once (1µs+0s) by YAML::PP::Parser::parse at line 151 of YAML/PP/Parser.pm | ||||
| 23 | 3 | 1µs | my ($self) = @_; | ||
| 24 | 3 | 6µs | $self->{next_tokens} = []; | ||
| 25 | 3 | 3µs | $self->{next_line} = undef; | ||
| 26 | 3 | 1µs | $self->{line} = 0; | ||
| 27 | 3 | 2µs | $self->{offset} = 0; | ||
| 28 | 3 | 8µs | $self->{flowcontext} = 0; | ||
| 29 | } | ||||
| 30 | |||||
| 31 | 39438 | 56.4ms | # spent 22.2ms within YAML::PP::Lexer::next_line which was called 39438 times, avg 563ns/call:
# 18884 times (11.1ms+0s) by YAML::PP::Lexer::fetch_plain at line 367, avg 590ns/call
# 18497 times (9.75ms+0s) by YAML::PP::Lexer::_fetch_next_line at line 136, avg 527ns/call
# 2056 times (1.31ms+0s) by YAML::PP::Lexer::fetch_quoted at line 620, avg 639ns/call
# once (1µs+0s) by YAML::PP::Lexer::fetch_block at line 519 | ||
| 32 | 26911 | 48.1ms | # spent 18.9ms within YAML::PP::Lexer::set_next_line which was called 26911 times, avg 702ns/call:
# 13455 times (8.34ms+0s) by YAML::PP::Lexer::_fetch_next_line at line 150, avg 620ns/call
# 6386 times (5.20ms+0s) by YAML::PP::Lexer::fetch_plain at line 398, avg 814ns/call
# 5040 times (3.85ms+0s) by YAML::PP::Lexer::fetch_plain at line 392, avg 765ns/call
# 1424 times (1.02ms+0s) by YAML::PP::Lexer::fetch_quoted at line 706, avg 716ns/call
# 598 times (460µs+0s) by YAML::PP::Lexer::fetch_quoted at line 697, avg 769ns/call
# 6 times (0s+0s) by YAML::PP::Lexer::fetch_block at line 561, avg 0s/call
# once (1µs+0s) by YAML::PP::Lexer::fetch_next_tokens at line 221
# once (1µs+0s) by YAML::PP::Lexer::_fetch_next_line at line 143 | ||
| 33 | 13456 | 19.4ms | # spent 7.62ms within YAML::PP::Lexer::reader which was called 13456 times, avg 567ns/call:
# 13456 times (7.62ms+0s) by YAML::PP::Lexer::_fetch_next_line at line 141, avg 567ns/call | ||
| 34 | 1 | 7µs | # spent 3µs within YAML::PP::Lexer::set_reader which was called:
# once (3µs+0s) by YAML::PP::Parser::set_reader at line 70 of YAML/PP/Parser.pm | ||
| 35 | 77194 | 106ms | # spent 40.4ms within YAML::PP::Lexer::next_tokens which was called 77194 times, avg 523ns/call:
# 61685 times (32.4ms+0s) by YAML::PP::Lexer::_push_tokens at line 880, avg 526ns/call
# 13451 times (6.72ms+0s) by YAML::PP::Lexer::fetch_next_tokens at line 182, avg 499ns/call
# 2057 times (1.21ms+0s) by YAML::PP::Lexer::push_subtokens at line 906, avg 590ns/call
# once (3µs+0s) by YAML::PP::Parser::parse_tokens at line 344 of YAML/PP/Parser.pm | ||
| 36 | 160784 | 217ms | # spent 75.1ms within YAML::PP::Lexer::line which was called 160784 times, avg 467ns/call:
# 61685 times (25.1ms+0s) by YAML::PP::Lexer::_push_tokens at line 881, avg 406ns/call
# 18884 times (11.5ms+0s) by YAML::PP::Lexer::fetch_plain at line 381, avg 607ns/call
# 18884 times (8.15ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 355, avg 432ns/call
# 14054 times (5.90ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 295, avg 420ns/call
# 13449 times (6.76ms+0s) by YAML::PP::Lexer::fetch_next_tokens at line 217, avg 503ns/call
# 7598 times (3.94ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 307, avg 519ns/call
# 6456 times (3.49ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 303, avg 541ns/call
# 5040 times (2.76ms+0s) by YAML::PP::Lexer::fetch_plain at line 391, avg 548ns/call
# 2057 times (1.01ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 278, avg 490ns/call
# 2057 times (799µs+0s) by YAML::PP::Lexer::push_subtokens at line 907, avg 388ns/call
# 2056 times (1.39ms+0s) by YAML::PP::Lexer::_read_quoted_tokens at line 742, avg 675ns/call
# 2056 times (1.15ms+0s) by YAML::PP::Lexer::fetch_quoted at line 626, avg 559ns/call
# 2056 times (950µs+0s) by YAML::PP::Lexer::_read_quoted_tokens at line 748, avg 462ns/call
# 1791 times (729µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 340, avg 407ns/call
# 1424 times (660µs+0s) by YAML::PP::Lexer::fetch_quoted at line 704, avg 463ns/call
# 689 times (656µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 336, avg 952ns/call
# 529 times (244µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 256, avg 461ns/call
# 15 times (5µs+0s) by YAML::PP::Lexer::fetch_block at line 605, avg 333ns/call
# once (3µs+0s) by YAML::PP::Lexer::fetch_next_tokens at line 208
# once (1µs+0s) by YAML::PP::Lexer::fetch_block at line 538
# once (1µs+0s) by YAML::PP::Lexer::fetch_block at line 548
# once (0s+0s) by YAML::PP::Lexer::fetch_block at line 526 | ||
| 37 | sub set_line { $_[0]->{line} = $_[1] } | ||||
| 38 | 63742 | 187ms | sub offset { return $_[0]->{offset} } | ||
| 39 | 63742 | 97.9ms | sub set_offset { $_[0]->{offset} = $_[1] } | ||
| 40 | 13455 | 19.5ms | # spent 8.63ms within YAML::PP::Lexer::inc_line which was called 13455 times, avg 641ns/call:
# 13455 times (8.63ms+0s) by YAML::PP::Lexer::_fetch_next_line at line 147, avg 641ns/call | ||
| 41 | 37475 | 60.7ms | # spent 20.1ms within YAML::PP::Lexer::context which was called 37475 times, avg 537ns/call:
# 37475 times (20.1ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 263, avg 537ns/call | ||
| 42 | 176 | 262µs | sub set_context { $_[0]->{context} = $_[1] } | ||
| 43 | 76215 | 111ms | # spent 37.2ms within YAML::PP::Lexer::flowcontext which was called 76215 times, avg 488ns/call:
# 20941 times (10.0ms+0s) by YAML::PP::Parser::parse_tokens at line 379 of YAML/PP/Parser.pm, avg 478ns/call
# 18884 times (7.68ms+0s) by YAML::PP::Lexer::fetch_plain at line 371, avg 407ns/call
# 14054 times (7.92ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 286, avg 564ns/call
# 13449 times (7.62ms+0s) by YAML::PP::Lexer::fetch_next_tokens at line 208, avg 566ns/call
# 5040 times (2.21ms+0s) by YAML::PP::Lexer::fetch_plain at line 405, avg 438ns/call
# 2056 times (1.01ms+0s) by YAML::PP::Lexer::fetch_quoted at line 694, avg 490ns/call
# 1791 times (762µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 342, avg 425ns/call | ||
| 44 | 1102 | 2.51ms | # spent 990µs within YAML::PP::Lexer::set_flowcontext which was called 1102 times, avg 898ns/call:
# 1102 times (990µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 343, avg 898ns/call | ||
| 45 | 14025 | 19.3ms | # spent 8.34ms within YAML::PP::Lexer::block which was called 14025 times, avg 594ns/call:
# 14025 times (8.34ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 286, avg 594ns/call | ||
| 46 | 13455 | 20.8ms | # spent 9.49ms within YAML::PP::Lexer::set_block which was called 13455 times, avg 706ns/call:
# 13455 times (9.49ms+0s) by YAML::PP::Lexer::_fetch_next_line at line 146, avg 706ns/call | ||
| 47 | |||||
| 48 | 1 | 1µs | my $RE_WS = '[\t ]'; | ||
| 49 | 1 | 0s | my $RE_LB = '[\r\n]'; | ||
| 50 | 1 | 118µs | 2 | 49µs | my $RE_DOC_END = qr/\A(\.\.\.)(?=$RE_WS|$)/m; # spent 44µs making 1 call to YAML::PP::Lexer::CORE:regcomp
# spent 5µs making 1 call to YAML::PP::Lexer::CORE:qr |
| 51 | 1 | 22µs | 2 | 17µs | my $RE_DOC_START = qr/\A(---)(?=$RE_WS|$)/m; # spent 16µs making 1 call to YAML::PP::Lexer::CORE:regcomp
# spent 1µs making 1 call to YAML::PP::Lexer::CORE:qr |
| 52 | 1 | 32µs | 2 | 25µs | my $RE_EOL = qr/\A($RE_WS+#.*|$RE_WS+)\z/; # spent 24µ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 | 0s | 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 | 1µs | 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 | 0s | my $RE_ANCHOR_CAR = '[\x21-\x2B\x2D-\x5A\x5C\x5E-\x7A\x7C\x7E\xA0-\xFF\x{100}-\x{10FFFF}]'; | ||
| 67 | |||||
| 68 | 1 | 1µs | my $RE_PLAIN_START = '[\x21\x22\x24-\x39\x3B-\x7E\xA0-\xFF\x{100}-\x{10FFFF}]'; | ||
| 69 | 1 | 0s | 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 | 1µs | 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 | 2µs | my $RE_PLAIN_WORD = "(?::+$RE_PLAIN_END|$RE_PLAIN_START)(?::+$RE_PLAIN_END|$RE_PLAIN_END)*"; | ||
| 98 | 1 | 0s | my $RE_PLAIN_FIRST_WORD = "(?:[:?-]+$RE_PLAIN_END|$RE_PLAIN_FIRST)(?::+$RE_PLAIN_END|$RE_PLAIN_END)*"; | ||
| 99 | 1 | 3µs | 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 | 1µs | 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 | 2µ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 | 1µs | 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 | 19µs | 2 | 14µs | my $RE_SEQSTART = qr/\A(-)(?=$RE_WS|$)/m; # spent 13µs making 1 call to YAML::PP::Lexer::CORE:regcomp
# spent 1µs making 1 call to YAML::PP::Lexer::CORE:qr |
| 121 | 1 | 17µ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 | 9µs | my $RE_COMPLEXCOLON = qr/\A(:)(?=$RE_WS|$)/m; # spent 8µs making 1 call to YAML::PP::Lexer::CORE:regcomp
# spent 1µs making 1 call to YAML::PP::Lexer::CORE:qr |
| 123 | 1 | 1µs | my $RE_ANCHOR = "&$RE_ANCHOR_CAR+"; | ||
| 124 | 1 | 1µs | my $RE_ALIAS = "\\*$RE_ANCHOR_CAR+"; | ||
| 125 | |||||
| 126 | |||||
| 127 | 1 | 238µs | 7 | 176µs | my %REGEXES = ( # spent 171µs making 3 calls to YAML::PP::Lexer::CORE:regcomp, avg 57µ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 379ms (235+144) within YAML::PP::Lexer::_fetch_next_line which was called 18497 times, avg 20µs/call:
# 13451 times (153ms+96.5ms) by YAML::PP::Lexer::fetch_next_tokens at line 185, avg 19µs/call
# 5040 times (81.2ms+47.9ms) by YAML::PP::Lexer::fetch_plain at line 412, avg 26µs/call
# 6 times (47µs+23µs) by YAML::PP::Lexer::fetch_block at line 562, avg 12µs/call | ||||
| 135 | 18497 | 4.08ms | my ($self) = @_; | ||
| 136 | 18497 | 13.5ms | 18497 | 9.75ms | my $next_line = $self->next_line; # spent 9.75ms making 18497 calls to YAML::PP::Lexer::next_line, avg 527ns/call |
| 137 | 18497 | 11.7ms | if (defined $next_line ) { | ||
| 138 | return $next_line; | ||||
| 139 | } | ||||
| 140 | |||||
| 141 | 13456 | 27.7ms | 26912 | 81.0ms | my $line = $self->reader->readline; # spent 73.4ms making 13456 calls to YAML::PP::Reader::File::readline, avg 5µs/call
# spent 7.62ms making 13456 calls to YAML::PP::Lexer::reader, avg 567ns/call |
| 142 | 13456 | 3.31ms | 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 | 2µs | return; | ||
| 145 | } | ||||
| 146 | 13455 | 11.9ms | 13455 | 9.49ms | $self->set_block(1); # spent 9.49ms making 13455 calls to YAML::PP::Lexer::set_block, avg 706ns/call |
| 147 | 13455 | 11.4ms | 13455 | 8.63ms | $self->inc_line; # spent 8.63ms making 13455 calls to YAML::PP::Lexer::inc_line, avg 641ns/call |
| 148 | 13455 | 48.3ms | 13455 | 27.2ms | $line =~ m/\A( *)([^\r\n]*)([\r\n]|\z)/ or die "Unexpected"; # spent 27.2ms making 13455 calls to YAML::PP::Lexer::CORE:match, avg 2µs/call |
| 149 | 13455 | 24.8ms | $next_line = [ $1, $2, $3 ]; | ||
| 150 | 13455 | 11.0ms | 13455 | 8.34ms | $self->set_next_line($next_line); # spent 8.34ms making 13455 calls to YAML::PP::Lexer::set_next_line, avg 620ns/call |
| 151 | # $ESCAPE_CHAR from YAML.pm | ||||
| 152 | 13455 | 8.38ms | if ($line =~ tr/\x00-\x08\x0b-\x0c\x0e-\x1f//) { | ||
| 153 | $self->exception("Control characters are not allowed"); | ||||
| 154 | } | ||||
| 155 | |||||
| 156 | 13455 | 27.9ms | return $next_line; | ||
| 157 | } | ||||
| 158 | |||||
| 159 | 1 | 14µ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.03s (223ms+804ms) within YAML::PP::Lexer::fetch_next_tokens which was called 13451 times, avg 76µs/call:
# 13451 times (223ms+804ms) by YAML::PP::Parser::lex_next_tokens at line 179 of YAML/PP/Parser.pm, avg 76µs/call | ||||
| 181 | 13451 | 3.78ms | my ($self) = @_; | ||
| 182 | 13451 | 11.3ms | 13451 | 6.72ms | my $next = $self->next_tokens; # spent 6.72ms making 13451 calls to YAML::PP::Lexer::next_tokens, avg 499ns/call |
| 183 | 13451 | 3.36ms | return $next if @$next; | ||
| 184 | |||||
| 185 | 13451 | 14.5ms | 13451 | 250ms | my $next_line = $self->_fetch_next_line; # spent 250ms making 13451 calls to YAML::PP::Lexer::_fetch_next_line, avg 19µs/call |
| 186 | 13451 | 2.83ms | if (not $next_line) { | ||
| 187 | return []; | ||||
| 188 | } | ||||
| 189 | |||||
| 190 | 13450 | 4.98ms | my $spaces = $next_line->[0]; | ||
| 191 | 13450 | 4.63ms | my $yaml = \$next_line->[1]; | ||
| 192 | 13450 | 4.25ms | 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 | 14.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 | 3.20ms | 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.70ms | if (not $spaces and $$yaml =~ s/\A(---|\.\.\.)(?=$RE_WS|\z)//) { # spent 7.62ms making 13449 calls to YAML::PP::Lexer::flowcontext, avg 566ns/call
# spent 39µs making 6 calls to YAML::PP::Lexer::CORE:regcomp, avg 6µs/call
# spent 35µ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 3µ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 | 25.5ms | 26898 | 185ms | $self->_push_tokens([ SPACE => $spaces, $self->line ]); # spent 178ms making 13449 calls to YAML::PP::Lexer::_push_tokens, avg 13µs/call
# spent 6.76ms making 13449 calls to YAML::PP::Lexer::line, avg 503ns/call |
| 218 | } | ||||
| 219 | |||||
| 220 | 13450 | 13.3ms | 13450 | 355ms | my $partial = $self->_fetch_next_tokens($next_line); # spent 355ms making 13450 calls to YAML::PP::Lexer::_fetch_next_tokens, avg 26µs/call |
| 221 | 13450 | 2.08ms | 1 | 1µs | unless ($partial) { # spent 1µs 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 | 0s | my %BLOCK_SCALAR = ( '|' => 1, '>' => 1 ); | ||
| 229 | 1 | 1µs | my %COLON_DASH_QUESTION = ( ':' => 1, '-' => 1, '?' => 1 ); | ||
| 230 | 1 | 1µs | my %QUOTED = ( '"' => 1, "'" => 1 ); | ||
| 231 | 1 | 1µs | my %FLOW = ( '{' => 1, '[' => 1, '}' => 1, ']' => 1, ',' => 1 ); | ||
| 232 | 1 | 1µs | my %CONTEXT = ( '"' => 1, "'" => 1, '>' => 1, '|' => 1 ); | ||
| 233 | |||||
| 234 | 1 | 9µs | 1 | 5µs | my $RE_ESCAPES = qr{(?: # spent 5µ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 | 16µ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.22s (539ms+679ms) within YAML::PP::Lexer::_fetch_next_tokens which was called 27926 times, avg 44µs/call:
# 13844 times (374ms+358ms) by YAML::PP::Lexer::fetch_plain at line 397, avg 53µs/call
# 13450 times (149ms+205ms) by YAML::PP::Lexer::fetch_next_tokens at line 220, avg 26µs/call
# 632 times (15.2ms+116ms) by YAML::PP::Lexer::fetch_quoted at line 696, avg 207µs/call | ||||
| 246 | TRACE and warn __PACKAGE__.':'.__LINE__.": _fetch_next_tokens\n"; | ||||
| 247 | 27926 | 5.84ms | my ($self, $next_line) = @_; | ||
| 248 | |||||
| 249 | 27926 | 8.34ms | my $yaml = \$next_line->[1]; | ||
| 250 | 27926 | 5.86ms | my $eol = $next_line->[2]; | ||
| 251 | |||||
| 252 | 27926 | 3.21ms | my @tokens; | ||
| 253 | |||||
| 254 | 27926 | 3.92ms | while (1) { | ||
| 255 | 38004 | 7.83ms | unless (length $$yaml) { | ||
| 256 | 529 | 582µs | 529 | 244µs | push @tokens, ( EOL => $eol, $self->line ); # spent 244µs making 529 calls to YAML::PP::Lexer::line, avg 461ns/call |
| 257 | 529 | 439µs | 529 | 9.89ms | $self->_push_tokens(\@tokens); # spent 9.89ms making 529 calls to YAML::PP::Lexer::_push_tokens, avg 19µs/call |
| 258 | 529 | 1.33ms | return; | ||
| 259 | } | ||||
| 260 | 37475 | 16.1ms | my $first = substr($$yaml, 0, 1); | ||
| 261 | 37475 | 4.76ms | my $plain = 0; | ||
| 262 | |||||
| 263 | 37475 | 26.8ms | 37475 | 20.1ms | if ($self->context) { # spent 20.1ms making 37475 calls to YAML::PP::Lexer::context, avg 537ns/call |
| 264 | 88 | 351µs | 176 | 169µs | if ($$yaml =~ s/\A($RE_WS*)://) { # spent 122µs making 88 calls to YAML::PP::Lexer::CORE:regcomp, avg 1µs/call
# spent 47µs making 88 calls to YAML::PP::Lexer::CORE:subst, avg 534ns/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 | 377µs | 176 | 148µs | if ($$yaml =~ s/\A($RE_WS*(?: #.*))\z//) { # spent 119µs making 88 calls to YAML::PP::Lexer::CORE:regcomp, avg 1µs/call
# spent 29µs making 88 calls to YAML::PP::Lexer::CORE:subst, avg 330ns/call |
| 271 | push @tokens, ( EOL => $1 . $eol, $self->line ); | ||||
| 272 | $self->_push_tokens(\@tokens); | ||||
| 273 | return; | ||||
| 274 | } | ||||
| 275 | 88 | 93µs | 88 | 42µs | $self->set_context(0); # spent 42µs making 88 calls to YAML::PP::Lexer::set_context, avg 477ns/call |
| 276 | } | ||||
| 277 | 37475 | 33.1ms | if ($CONTEXT{ $first }) { | ||
| 278 | 2057 | 3.21ms | 2057 | 1.01ms | push @tokens, ( CONTEXT => $first, $self->line ); # spent 1.01ms making 2057 calls to YAML::PP::Lexer::line, avg 490ns/call |
| 279 | 2057 | 2.20ms | 2057 | 34.2ms | $self->_push_tokens(\@tokens); # spent 34.2ms making 2057 calls to YAML::PP::Lexer::_push_tokens, avg 17µs/call |
| 280 | 2057 | 4.97ms | return 1; | ||
| 281 | } | ||||
| 282 | elsif ($COLON_DASH_QUESTION{ $first }) { | ||||
| 283 | 14054 | 5.65ms | my $token_name = $TOKEN_NAMES{ $first }; | ||
| 284 | 14054 | 111ms | 28108 | 69.2ms | if ($$yaml =~ s/\A\Q$first\E($RE_WS+|\z)//) { # spent 41.3ms making 14054 calls to YAML::PP::Lexer::CORE:regcomp, avg 3µs/call
# spent 27.9ms making 14054 calls to YAML::PP::Lexer::CORE:subst, avg 2µs/call |
| 285 | 14054 | 5.92ms | my $after = $1; | ||
| 286 | 14054 | 22.7ms | 28079 | 16.3ms | if (not $self->flowcontext and not $self->block) { # spent 8.34ms making 14025 calls to YAML::PP::Lexer::block, avg 594ns/call
# spent 7.92ms making 14054 calls to YAML::PP::Lexer::flowcontext, avg 564ns/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 | 6.20ms | if ($after =~ tr/\t//) { | ||
| 292 | $self->set_block(0); | ||||
| 293 | } | ||||
| 294 | 14054 | 4.31ms | my $token_name = $TOKEN_NAMES{ $first }; | ||
| 295 | 14054 | 17.9ms | 14054 | 5.90ms | push @tokens, ( $token_name => $first, $self->line ); # spent 5.90ms making 14054 calls to YAML::PP::Lexer::line, avg 420ns/call |
| 296 | 14054 | 5.01ms | if (not defined $1) { | ||
| 297 | push @tokens, ( EOL => $eol, $self->line ); | ||||
| 298 | $self->_push_tokens(\@tokens); | ||||
| 299 | return; | ||||
| 300 | } | ||||
| 301 | 14054 | 4.46ms | my $ws = $1; | ||
| 302 | 14054 | 41.5ms | 14054 | 18.3ms | if ($$yaml =~ s/\A(#.*|)\z//) { # spent 18.3ms making 14054 calls to YAML::PP::Lexer::CORE:subst, avg 1µs/call |
| 303 | 6456 | 13.3ms | 6456 | 3.49ms | push @tokens, ( EOL => $ws . $1 . $eol, $self->line ); # spent 3.49ms making 6456 calls to YAML::PP::Lexer::line, avg 541ns/call |
| 304 | 6456 | 5.18ms | 6456 | 201ms | $self->_push_tokens(\@tokens); # spent 201ms making 6456 calls to YAML::PP::Lexer::_push_tokens, avg 31µs/call |
| 305 | 6456 | 21.3ms | return; | ||
| 306 | } | ||||
| 307 | 7598 | 9.99ms | 7598 | 3.94ms | push @tokens, ( WS => $ws, $self->line ); # spent 3.94ms making 7598 calls to YAML::PP::Lexer::line, avg 519ns/call |
| 308 | 7598 | 8.62ms | 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 | 4.71ms | 1378 | 1.65ms | if ($$yaml =~ s/\A($RE_WS+)//) { # spent 1.00ms making 689 calls to YAML::PP::Lexer::CORE:subst, avg 1µs/call
# spent 651µs making 689 calls to YAML::PP::Lexer::CORE:regcomp, avg 945ns/call |
| 330 | 689 | 462µs | my $ws = $1; | ||
| 331 | 689 | 1.77ms | 689 | 825µs | if ($$yaml =~ s/\A((?:#.*)?\z)//) { # spent 825µs making 689 calls to YAML::PP::Lexer::CORE:subst, avg 1µs/call |
| 332 | push @tokens, ( EOL => $ws . $1 . $eol, $self->line ); | ||||
| 333 | $self->_push_tokens(\@tokens); | ||||
| 334 | return; | ||||
| 335 | } | ||||
| 336 | 689 | 1.18ms | 689 | 656µs | push @tokens, ( WS => $ws, $self->line ); # spent 656µs making 689 calls to YAML::PP::Lexer::line, avg 952ns/call |
| 337 | } | ||||
| 338 | } | ||||
| 339 | elsif ($FLOW{ $first }) { | ||||
| 340 | 1791 | 2.40ms | 1791 | 729µs | push @tokens, ( $TOKEN_NAMES{ $first } => $first, $self->line ); # spent 729µs making 1791 calls to YAML::PP::Lexer::line, avg 407ns/call |
| 341 | 1791 | 1.92ms | substr($$yaml, 0, 1, ''); | ||
| 342 | 1791 | 1.31ms | 1791 | 762µs | my $flowcontext = $self->flowcontext; # spent 762µs making 1791 calls to YAML::PP::Lexer::flowcontext, avg 425ns/call |
| 343 | 1791 | 2.49ms | 1102 | 990µs | if ($first eq '{' or $first eq '[') { # spent 990µs making 1102 calls to YAML::PP::Lexer::set_flowcontext, avg 898ns/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 | 3.00ms | $plain = 1; | ||
| 352 | } | ||||
| 353 | |||||
| 354 | 21364 | 3.92ms | if ($plain) { | ||
| 355 | 18884 | 17.6ms | 18884 | 8.15ms | push @tokens, ( CONTEXT => '', $self->line ); # spent 8.15ms making 18884 calls to YAML::PP::Lexer::line, avg 432ns/call |
| 356 | 18884 | 13.4ms | 18884 | 282ms | $self->_push_tokens(\@tokens); # spent 282ms making 18884 calls to YAML::PP::Lexer::_push_tokens, avg 15µs/call |
| 357 | 18884 | 41.8ms | return 1; | ||
| 358 | } | ||||
| 359 | |||||
| 360 | } | ||||
| 361 | |||||
| 362 | return; | ||||
| 363 | } | ||||
| 364 | |||||
| 365 | # spent 1.93s (469ms+1.46) within YAML::PP::Lexer::fetch_plain which was called 18884 times, avg 102µs/call:
# 18884 times (469ms+1.46s) by YAML::PP::Parser::parse_tokens at line 381 of YAML/PP/Parser.pm, avg 102µs/call | ||||
| 366 | 18884 | 7.50ms | my ($self, $indent, $context) = @_; | ||
| 367 | 18884 | 15.8ms | 18884 | 11.1ms | my $next_line = $self->next_line; # spent 11.1ms making 18884 calls to YAML::PP::Lexer::next_line, avg 590ns/call |
| 368 | 18884 | 7.20ms | my $yaml = \$next_line->[1]; | ||
| 369 | 18884 | 4.51ms | my $eol = $next_line->[2]; | ||
| 370 | 18884 | 4.12ms | my $REGEX = $RE_PLAIN_WORDS; | ||
| 371 | 18884 | 11.3ms | 18884 | 7.68ms | if ($self->flowcontext) { # spent 7.68ms making 18884 calls to YAML::PP::Lexer::flowcontext, avg 407ns/call |
| 372 | $REGEX = $RE_PLAIN_WORDS_FLOW; | ||||
| 373 | } | ||||
| 374 | |||||
| 375 | 18884 | 3.32ms | my @tokens; | ||
| 376 | 18884 | 307ms | 37768 | 243ms | unless ($$yaml =~ s/\A($REGEX)//) { # spent 136ms making 18884 calls to YAML::PP::Lexer::CORE:regcomp, avg 7µs/call
# spent 107ms making 18884 calls to YAML::PP::Lexer::CORE:subst, avg 6µs/call |
| 377 | $self->_push_tokens(\@tokens); | ||||
| 378 | $self->exception("Invalid plain scalar"); | ||||
| 379 | } | ||||
| 380 | 18884 | 12.4ms | my $plain = $1; | ||
| 381 | 18884 | 23.3ms | 18884 | 11.5ms | push @tokens, ( PLAIN => $plain, $self->line ); # spent 11.5ms making 18884 calls to YAML::PP::Lexer::line, avg 607ns/call |
| 382 | |||||
| 383 | 18884 | 100ms | 37768 | 44.7ms | if ($$yaml =~ s/\A(?:($RE_WS+#.*)|($RE_WS*))\z//) { # spent 25.8ms making 18884 calls to YAML::PP::Lexer::CORE:subst, avg 1µs/call
# spent 18.9ms making 18884 calls to YAML::PP::Lexer::CORE:regcomp, avg 1µs/call |
| 384 | 5040 | 3.21ms | 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.55ms | 5040 | 2.76ms | push @tokens, ( EOL => $2. $eol, $self->line ); # spent 2.76ms making 5040 calls to YAML::PP::Lexer::line, avg 548ns/call |
| 392 | 5040 | 5.40ms | 5040 | 3.85ms | $self->set_next_line(undef); # spent 3.85ms making 5040 calls to YAML::PP::Lexer::set_next_line, avg 765ns/call |
| 393 | } | ||||
| 394 | } | ||||
| 395 | else { | ||||
| 396 | 13844 | 11.7ms | 13844 | 184ms | $self->_push_tokens(\@tokens); # spent 184ms making 13844 calls to YAML::PP::Lexer::_push_tokens, avg 13µs/call |
| 397 | 13844 | 13.2ms | 13844 | 732ms | my $partial = $self->_fetch_next_tokens($next_line); # spent 732ms making 13844 calls to YAML::PP::Lexer::_fetch_next_tokens, avg 53µs/call |
| 398 | 13844 | 7.81ms | 6386 | 5.20ms | if (not $partial) { # spent 5.20ms making 6386 calls to YAML::PP::Lexer::set_next_line, avg 814ns/call |
| 399 | $self->set_next_line(undef); | ||||
| 400 | } | ||||
| 401 | 13844 | 44.9ms | return; | ||
| 402 | } | ||||
| 403 | |||||
| 404 | 5040 | 1.73ms | my $RE2 = $RE_PLAIN_WORDS2; | ||
| 405 | 5040 | 3.64ms | 5040 | 2.21ms | if ($self->flowcontext) { # spent 2.21ms making 5040 calls to YAML::PP::Lexer::flowcontext, avg 438ns/call |
| 406 | $RE2 = $RE_PLAIN_WORDS_FLOW2; | ||||
| 407 | } | ||||
| 408 | 5040 | 808µs | my $fetch_next = 0; | ||
| 409 | 5040 | 2.99ms | my @lines = ($plain); | ||
| 410 | 5040 | 838µs | my @next; | ||
| 411 | 5040 | 881µs | LOOP: while (1) { | ||
| 412 | 5040 | 8.69ms | 5040 | 129ms | $next_line = $self->_fetch_next_line; # spent 129ms making 5040 calls to YAML::PP::Lexer::_fetch_next_line, avg 26µs/call |
| 413 | 5040 | 1.11ms | if (not $next_line) { | ||
| 414 | last LOOP; | ||||
| 415 | } | ||||
| 416 | 5040 | 2.42ms | my $spaces = $next_line->[0]; | ||
| 417 | 5040 | 1.99ms | my $yaml = \$next_line->[1]; | ||
| 418 | 5040 | 1.70ms | my $eol = $next_line->[2]; | ||
| 419 | |||||
| 420 | 5040 | 1.84ms | 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.68ms | 6 | 23µs | if (not $spaces and $$yaml =~ s/\A(---|\.\.\.)(?=$RE_WS|\z)//) { # spent 22µs making 3 calls to YAML::PP::Lexer::CORE:regcomp, avg 7µs/call
# spent 1µs making 3 calls to YAML::PP::Lexer::CORE:subst, avg 333ns/call |
| 428 | push @next, $TOKEN_NAMES{ $1 } => $1, $self->line; | ||||
| 429 | $fetch_next = 1; | ||||
| 430 | last LOOP; | ||||
| 431 | } | ||||
| 432 | 5040 | 3.56ms | if ((length $spaces) < $indent) { | ||
| 433 | 5040 | 4.53ms | 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.55ms | while (@lines > 1 and $lines[-1] eq '') { | ||
| 493 | pop @lines; | ||||
| 494 | } | ||||
| 495 | 5040 | 5.57ms | 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 | 9.13ms | 5040 | 86.7ms | $self->_push_tokens([ @tokens, @next ]); # spent 86.7ms making 5040 calls to YAML::PP::Lexer::_push_tokens, avg 17µs/call |
| 506 | } | ||||
| 507 | 5040 | 3.98ms | @tokens = (); | ||
| 508 | 5040 | 1.30ms | 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.6ms | return; | ||
| 515 | } | ||||
| 516 | |||||
| 517 | # spent 320µs (149+171) within YAML::PP::Lexer::fetch_block which was called:
# once (149µs+171µ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 | 1µs | my $next_line = $self->next_line; # spent 1µs 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 | 18µ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 | 1µs | 1 | 0s | push @tokens, ( $token_name => $context, $self->line ); # spent 0s making 1 call to YAML::PP::Lexer::line |
| 527 | 1 | 0s | my $current_indent = $indent; | ||
| 528 | 1 | 1µs | my $started = 0; | ||
| 529 | 1 | 0s | my $set_indent = 0; | ||
| 530 | 1 | 0s | my $chomp = ''; | ||
| 531 | 1 | 5µ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 | 2µ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 | 0s | $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 | 2µs | 1 | 1µs | if (not length $$yaml) { # spent 1µs 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 | 2µs | 6 | 0s | $self->set_next_line(undef); # spent 0s making 6 calls to YAML::PP::Lexer::set_next_line, avg 0s/call |
| 562 | 6 | 4µs | 6 | 70µs | $next_line = $self->_fetch_next_line; # spent 70µs making 6 calls to YAML::PP::Lexer::_fetch_next_line, avg 12µs/call |
| 563 | 6 | 1µs | if (not $next_line) { | ||
| 564 | last; | ||||
| 565 | } | ||||
| 566 | 6 | 0s | my $spaces = $next_line->[0]; | ||
| 567 | 6 | 2µs | my $content = $next_line->[1]; | ||
| 568 | 6 | 1µ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 | 2µs | if ((length $spaces) < $current_indent) { | ||
| 573 | 1 | 0s | if (length $content) { | ||
| 574 | 1 | 3µ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 | 0s | unless ($started) { | ||
| 601 | 1 | 0s | $started = 1; | ||
| 602 | 1 | 0s | $current_indent = length $spaces; | ||
| 603 | } | ||||
| 604 | 5 | 26µs | push @lines, $content; | ||
| 605 | 5 | 13µs | 15 | 5µs | push @tokens, ( # spent 5µs making 15 calls to YAML::PP::Lexer::line, avg 333ns/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 | 11µs | my $value = YAML::PP::Render->render_block_scalar($context, $chomp, \@lines); # spent 11µs making 1 call to YAML::PP::Render::render_block_scalar |
| 612 | 1 | 1µs | my @eol = splice @tokens, -3; | ||
| 613 | 1 | 1µs | 1 | 54µs | $self->push_subtokens( { name => 'BLOCK_SCALAR', value => $value }, \@tokens ); # spent 54µs making 1 call to YAML::PP::Lexer::push_subtokens |
| 614 | 1 | 2µs | 1 | 9µs | $self->_push_tokens([ @eol ]); # spent 9µs making 1 call to YAML::PP::Lexer::_push_tokens |
| 615 | 1 | 5µs | return 0; | ||
| 616 | } | ||||
| 617 | |||||
| 618 | # spent 357ms (69.0+288) within YAML::PP::Lexer::fetch_quoted which was called 2056 times, avg 174µs/call:
# 2056 times (69.0ms+288ms) by YAML::PP::Parser::parse_tokens at line 381 of YAML/PP/Parser.pm, avg 174µs/call | ||||
| 619 | 2056 | 1.26ms | my ($self, $indent, $context) = @_; | ||
| 620 | 2056 | 2.41ms | 2056 | 1.31ms | my $next_line = $self->next_line; # spent 1.31ms making 2056 calls to YAML::PP::Lexer::next_line, avg 639ns/call |
| 621 | 2056 | 1.29ms | my $yaml = \$next_line->[1]; | ||
| 622 | 2056 | 1.32ms | my $spaces = $next_line->[0]; | ||
| 623 | |||||
| 624 | 2056 | 1.31ms | my $token_name = $TOKEN_NAMES{ $context }; | ||
| 625 | 2056 | 15.1ms | 4112 | 7.03ms | $$yaml =~ s/\A\Q$context// or die "Unexpected";; # spent 5.46ms making 2056 calls to YAML::PP::Lexer::CORE:subst, avg 3µs/call
# spent 1.57ms making 2056 calls to YAML::PP::Lexer::CORE:regcomp, avg 763ns/call |
| 626 | 2056 | 4.02ms | 2056 | 1.15ms | my @tokens = ( $token_name => $context, $self->line ); # spent 1.15ms making 2056 calls to YAML::PP::Lexer::line, avg 559ns/call |
| 627 | |||||
| 628 | 2056 | 535µs | my $start = 1; | ||
| 629 | 2056 | 530µs | my @values; | ||
| 630 | 2056 | 471µs | while (1) { | ||
| 631 | |||||
| 632 | 2056 | 530µ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.72ms | 2056 | 61.3ms | my $v = $self->_read_quoted_tokens($start, $context, $yaml, \@tokens); # spent 61.3ms making 2056 calls to YAML::PP::Lexer::_read_quoted_tokens, avg 30µs/call |
| 681 | 2056 | 589µs | push @values, $v; | ||
| 682 | 2056 | 992µs | if ($tokens[-3] eq $token_name) { | ||
| 683 | 2056 | 7.03ms | 2056 | 64.2ms | if ($start) { # spent 64.2ms 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 | 2.04ms | 2144 | 1.07ms | $self->set_context(1) if $self->flowcontext; # spent 1.01ms making 2056 calls to YAML::PP::Lexer::flowcontext, avg 490ns/call
# spent 64µs making 88 calls to YAML::PP::Lexer::set_context, avg 727ns/call |
| 695 | 2056 | 701µs | if (length $$yaml) { | ||
| 696 | 632 | 740µs | 632 | 131ms | my $partial = $self->_fetch_next_tokens($next_line); # spent 131ms making 632 calls to YAML::PP::Lexer::_fetch_next_tokens, avg 207µs/call |
| 697 | 632 | 694µs | 598 | 460µs | if (not $partial) { # spent 460µs making 598 calls to YAML::PP::Lexer::set_next_line, avg 769ns/call |
| 698 | $self->set_next_line(undef); | ||||
| 699 | } | ||||
| 700 | 632 | 3.50ms | return 0; | ||
| 701 | } | ||||
| 702 | else { | ||||
| 703 | 1424 | 1.42ms | @tokens = (); | ||
| 704 | 1424 | 2.07ms | 1424 | 660µs | push @tokens, ( EOL => $next_line->[2], $self->line ); # spent 660µs making 1424 calls to YAML::PP::Lexer::line, avg 463ns/call |
| 705 | 1424 | 1.24ms | 1424 | 18.7ms | $self->_push_tokens(\@tokens); # spent 18.7ms making 1424 calls to YAML::PP::Lexer::_push_tokens, avg 13µs/call |
| 706 | 1424 | 1.39ms | 1424 | 1.02ms | $self->set_next_line(undef); # spent 1.02ms making 1424 calls to YAML::PP::Lexer::set_next_line, avg 716ns/call |
| 707 | 1424 | 6.80ms | return; | ||
| 708 | } | ||||
| 709 | } | ||||
| 710 | $tokens[-2] .= $next_line->[2]; | ||||
| 711 | $self->set_next_line(undef); | ||||
| 712 | $start = 0; | ||||
| 713 | } | ||||
| 714 | } | ||||
| 715 | |||||
| 716 | # spent 61.3ms (46.0+15.3) within YAML::PP::Lexer::_read_quoted_tokens which was called 2056 times, avg 30µs/call:
# 2056 times (46.0ms+15.3ms) by YAML::PP::Lexer::fetch_quoted at line 680, avg 30µs/call | ||||
| 717 | 2056 | 1.14ms | my ($self, $start, $first, $yaml, $tokens) = @_; | ||
| 718 | 2056 | 955µs | my $quoted = ''; | ||
| 719 | 2056 | 746µs | my $decoded = ''; | ||
| 720 | 2056 | 1.02ms | my $token_name = $TOKEN_NAMES{ $first }; | ||
| 721 | 2056 | 563µs | my $eol = ''; | ||
| 722 | 2056 | 1.50ms | if ($first eq "'") { | ||
| 723 | 2056 | 1.24ms | my $regex = $REGEXES{SINGLEQUOTED}; | ||
| 724 | 2056 | 15.7ms | 4112 | 7.86ms | if ($$yaml =~ s/\A($regex)//) { # spent 5.30ms making 2056 calls to YAML::PP::Lexer::CORE:subst, avg 3µs/call
# spent 2.56ms making 2056 calls to YAML::PP::Lexer::CORE:regcomp, avg 1µs/call |
| 725 | 2056 | 3.10ms | $quoted .= $1; | ||
| 726 | 2056 | 1.14ms | $decoded .= $1; | ||
| 727 | 2056 | 4.10ms | 2056 | 1.69ms | $decoded =~ s/''/'/g; # spent 1.69ms making 2056 calls to YAML::PP::Lexer::CORE:subst, avg 820ns/call |
| 728 | } | ||||
| 729 | 2056 | 1.60ms | 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.85ms | my $value = { value => $decoded, orig => $quoted }; | ||
| 740 | |||||
| 741 | 2056 | 9.00ms | 4112 | 3.38ms | if ($$yaml =~ s/\A$first//) { # spent 2.47ms making 2056 calls to YAML::PP::Lexer::CORE:subst, avg 1µs/call
# spent 911µs making 2056 calls to YAML::PP::Lexer::CORE:regcomp, avg 443ns/call |
| 742 | 2056 | 3.88ms | 2056 | 1.39ms | if ($start) { # spent 1.39ms making 2056 calls to YAML::PP::Lexer::line, avg 675ns/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.43ms | 2056 | 950µs | push @$tokens, ( $token_name => $first, $self->line ); # spent 950µs making 2056 calls to YAML::PP::Lexer::line, avg 462ns/call |
| 749 | 2056 | 6.03ms | 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 994ms (873+121) within YAML::PP::Lexer::_push_tokens which was called 61685 times, avg 16µs/call:
# 18884 times (247ms+34.7ms) by YAML::PP::Lexer::_fetch_next_tokens at line 356, avg 15µs/call
# 13844 times (154ms+29.4ms) by YAML::PP::Lexer::fetch_plain at line 396, avg 13µs/call
# 13449 times (153ms+25.0ms) by YAML::PP::Lexer::fetch_next_tokens at line 217, avg 13µs/call
# 6456 times (188ms+13.2ms) by YAML::PP::Lexer::_fetch_next_tokens at line 304, avg 31µs/call
# 5040 times (75.4ms+11.3ms) by YAML::PP::Lexer::fetch_plain at line 505, avg 17µs/call
# 2057 times (30.3ms+3.93ms) by YAML::PP::Lexer::_fetch_next_tokens at line 279, avg 17µs/call
# 1424 times (16.2ms+2.50ms) by YAML::PP::Lexer::fetch_quoted at line 705, avg 13µs/call
# 529 times (8.84ms+1.05ms) by YAML::PP::Lexer::_fetch_next_tokens at line 257, avg 19µs/call
# once (30µs+5µs) by YAML::PP::Lexer::fetch_next_tokens at line 208
# once (7µs+2µs) by YAML::PP::Lexer::fetch_block at line 614 | ||||
| 879 | 61685 | 12.9ms | my ($self, $new_tokens) = @_; | ||
| 880 | 61685 | 42.2ms | 61685 | 32.4ms | my $next = $self->next_tokens; # spent 32.4ms making 61685 calls to YAML::PP::Lexer::next_tokens, avg 526ns/call |
| 881 | 61685 | 35.8ms | 61685 | 25.1ms | my $line = $self->line; # spent 25.1ms making 61685 calls to YAML::PP::Lexer::line, avg 406ns/call |
| 882 | 61685 | 38.1ms | 61685 | 25.7ms | my $column = $self->offset; # spent 25.7ms making 61685 calls to YAML::PP::Lexer::offset, avg 416ns/call |
| 883 | |||||
| 884 | 61685 | 67.5ms | for (my $i = 0; $i < @$new_tokens; $i += 3) { | ||
| 885 | 90857 | 36.1ms | my $value = $new_tokens->[ $i + 1 ]; | ||
| 886 | 90857 | 21.4ms | my $name = $new_tokens->[ $i ]; | ||
| 887 | 90857 | 16.3ms | my $line = $new_tokens->[ $i + 2 ]; | ||
| 888 | 90857 | 115ms | my $push = { | ||
| 889 | name => $name, | ||||
| 890 | line => $line, | ||||
| 891 | column => $column, | ||||
| 892 | value => $value, | ||||
| 893 | }; | ||||
| 894 | 90857 | 31.7ms | $column += length $value unless $name eq 'CONTEXT'; | ||
| 895 | 90857 | 15.6ms | push @$next, $push; | ||
| 896 | 90857 | 34.4ms | if ($name eq 'EOL') { | ||
| 897 | $column = 0; | ||||
| 898 | } | ||||
| 899 | } | ||||
| 900 | 61685 | 43.8ms | 61685 | 37.9ms | $self->set_offset($column); # spent 37.9ms making 61685 calls to YAML::PP::Lexer::set_offset, avg 614ns/call |
| 901 | 61685 | 105ms | return $next; | ||
| 902 | } | ||||
| 903 | |||||
| 904 | sub push_subtokens { | ||||
| 905 | 2057 | 634µs | my ($self, $token, $subtokens) = @_; | ||
| 906 | 2057 | 2.13ms | 2057 | 1.21ms | my $next = $self->next_tokens; # spent 1.21ms making 2057 calls to YAML::PP::Lexer::next_tokens, avg 590ns/call |
| 907 | 2057 | 1.42ms | 2057 | 799µs | my $line = $self->line; # spent 799µs making 2057 calls to YAML::PP::Lexer::line, avg 388ns/call |
| 908 | 2057 | 1.77ms | 2057 | 900µs | my $column = $self->offset; # spent 900µs making 2057 calls to YAML::PP::Lexer::offset, avg 438ns/call |
| 909 | 2057 | 1.03ms | $token->{column} = $column; | ||
| 910 | 2057 | 1.48ms | $token->{subtokens} = \my @sub; | ||
| 911 | |||||
| 912 | 2057 | 4.43ms | for (my $i = 0; $i < @$subtokens; $i+=3) { | ||
| 913 | 6185 | 1.57ms | my $name = $subtokens->[ $i ]; | ||
| 914 | 6185 | 3.47ms | my $value = $subtokens->[ $i + 1 ]; | ||
| 915 | 6185 | 1.60ms | my $line = $subtokens->[ $i + 2 ]; | ||
| 916 | 6185 | 6.74ms | my $push = { | ||
| 917 | name => $subtokens->[ $i ], | ||||
| 918 | line => $line, | ||||
| 919 | column => $column, | ||||
| 920 | }; | ||||
| 921 | 6185 | 2.60ms | if (ref $value eq 'HASH') { | ||
| 922 | 2056 | 7.37ms | %$push = ( %$push, %$value ); | ||
| 923 | 2056 | 1.64ms | $column += length $value->{orig}; | ||
| 924 | } | ||||
| 925 | else { | ||||
| 926 | 4129 | 2.31ms | $push->{value} = $value; | ||
| 927 | 4129 | 887µs | $column += length $value; | ||
| 928 | } | ||||
| 929 | 6185 | 2.08ms | if ($push->{name} eq 'EOL') { | ||
| 930 | $column = 0; | ||||
| 931 | } | ||||
| 932 | 6185 | 2.28ms | push @sub, $push; | ||
| 933 | } | ||||
| 934 | 2057 | 1.04ms | $token->{line} = $sub[0]->{line}; | ||
| 935 | 2057 | 795µs | push @$next, $token; | ||
| 936 | 2057 | 2.47ms | 2057 | 1.53ms | $self->set_offset($column); # spent 1.53ms making 2057 calls to YAML::PP::Lexer::set_offset, avg 745ns/call |
| 937 | 2057 | 3.98ms | 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 | 109µs | 1; | ||
sub YAML::PP::Lexer::CORE:match; # opcode | |||||
# spent 20µs within YAML::PP::Lexer::CORE:qr which was called 11 times, avg 2µs/call:
# 4 times (5µs+0s) by YAML::PP::Parser::BEGIN@18 at line 127, avg 1µs/call
# once (5µs+0s) by YAML::PP::Parser::BEGIN@18 at line 50
# once (5µs+0s) by YAML::PP::Parser::BEGIN@18 at line 234
# once (1µs+0s) by YAML::PP::Parser::BEGIN@18 at line 122
# 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 120
# 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 51 | |||||
# spent 202ms within YAML::PP::Lexer::CORE:regcomp which was called 58874 times, avg 3µs/call:
# 18884 times (136ms+0s) by YAML::PP::Lexer::fetch_plain at line 376, avg 7µs/call
# 18884 times (18.9ms+0s) by YAML::PP::Lexer::fetch_plain at line 383, avg 1µs/call
# 14054 times (41.3ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 284, avg 3µs/call
# 2056 times (2.56ms+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 763ns/call
# 2056 times (911µs+0s) by YAML::PP::Lexer::_read_quoted_tokens at line 741, avg 443ns/call
# 689 times (651µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 329, avg 945ns/call
# 88 times (122µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 264, avg 1µs/call
# 88 times (119µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 270, avg 1µs/call
# 6 times (39µs+0s) by YAML::PP::Lexer::fetch_next_tokens at line 208, avg 6µs/call
# 3 times (171µs+0s) by YAML::PP::Parser::BEGIN@18 at line 127, avg 57µs/call
# 3 times (22µs+0s) by YAML::PP::Lexer::fetch_plain at line 427, avg 7µs/call
# once (44µs+0s) by YAML::PP::Parser::BEGIN@18 at line 50
# once (24µs+0s) by YAML::PP::Parser::BEGIN@18 at line 52
# once (16µs+0s) by YAML::PP::Parser::BEGIN@18 at line 51
# 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 120
# once (9µs+0s) by YAML::PP::Parser::BEGIN@18 at line 121
# once (8µs+0s) by YAML::PP::Parser::BEGIN@18 at line 122 | |||||
# spent 196ms within YAML::PP::Lexer::CORE:subst which was called 75666 times, avg 3µs/call:
# 18884 times (107ms+0s) by YAML::PP::Lexer::fetch_plain at line 376, avg 6µs/call
# 18884 times (25.8ms+0s) by YAML::PP::Lexer::fetch_plain at line 383, avg 1µs/call
# 14054 times (27.9ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 284, avg 2µs/call
# 14054 times (18.3ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 302, avg 1µs/call
# 2056 times (5.46ms+0s) by YAML::PP::Lexer::fetch_quoted at line 625, avg 3µs/call
# 2056 times (5.30ms+0s) by YAML::PP::Lexer::_read_quoted_tokens at line 724, avg 3µs/call
# 2056 times (2.47ms+0s) by YAML::PP::Lexer::_read_quoted_tokens at line 741, avg 1µs/call
# 2056 times (1.69ms+0s) by YAML::PP::Lexer::_read_quoted_tokens at line 727, avg 820ns/call
# 689 times (1.00ms+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 329, avg 1µs/call
# 689 times (825µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 331, avg 1µs/call
# 88 times (47µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 264, avg 534ns/call
# 88 times (29µs+0s) by YAML::PP::Lexer::_fetch_next_tokens at line 270, avg 330ns/call
# 6 times (7µs+0s) by YAML::PP::Lexer::fetch_next_tokens at line 208, avg 1µs/call
# 3 times (1µs+0s) by YAML::PP::Lexer::fetch_plain at line 427, avg 333ns/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 |