From 9c4200b2e95e3f75d48643a06985b4de70468d3c Mon Sep 17 00:00:00 2001 From: Florian Sattler Date: Tue, 24 Jul 2018 17:09:44 +0200 Subject: [PATCH] [scanner] Faster SkipMultiLineComment by avoiding a copy. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avoid coping the last character to a local variable, by checking the parsing state in a different order. BUG=v8:7926 Change-Id: I0b62f711674beac8c81a25dd566a5ed0d681948b Reviewed-on: https://chromium-review.googlesource.com/1148456 Commit-Queue: Florian Sattler Reviewed-by: Marja Hölttä Cr-Commit-Position: refs/heads/master@{#54657} --- src/parsing/scanner.cc | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/parsing/scanner.cc b/src/parsing/scanner.cc index 852b5e400b..eaf77663f1 100644 --- a/src/parsing/scanner.cc +++ b/src/parsing/scanner.cc @@ -555,27 +555,29 @@ void Scanner::TryToParseSourceURLComment() { } } - Token::Value Scanner::SkipMultiLineComment() { DCHECK_EQ(c0_, '*'); Advance(); while (c0_ != kEndOfInput) { - uc32 ch = c0_; - Advance(); DCHECK(!unibrow::IsLineTerminator(kEndOfInput)); - if (unibrow::IsLineTerminator(ch)) { + if (!has_multiline_comment_before_next_ && unibrow::IsLineTerminator(c0_)) { // Following ECMA-262, section 7.4, a comment containing // a newline will make the comment count as a line-terminator. has_multiline_comment_before_next_ = true; } - // If we have reached the end of the multi-line comment, we - // consume the '/' and insert a whitespace. This way all - // multi-line comments are treated as whitespace. - if (ch == '*' && c0_ == '/') { - c0_ = ' '; - return Token::WHITESPACE; + + while (V8_UNLIKELY(c0_ == '*')) { + Advance(); + // If we have reached the end of the multi-line comment, we + // consume the '/' and insert a whitespace. This way all + // multi-line comments are treated as whitespace. + if (c0_ == '/') { + c0_ = ' '; + return Token::WHITESPACE; + } } + Advance(); } // Unterminated multi-line comment.