diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/v8/src/parsing/scanner.cc | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/v8/src/parsing/scanner.cc')
-rw-r--r-- | chromium/v8/src/parsing/scanner.cc | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/chromium/v8/src/parsing/scanner.cc b/chromium/v8/src/parsing/scanner.cc index 52a1bf0724c..e27cb041020 100644 --- a/chromium/v8/src/parsing/scanner.cc +++ b/chromium/v8/src/parsing/scanner.cc @@ -107,6 +107,12 @@ void Scanner::Initialize() { Scan(); } +// static +bool Scanner::IsInvalid(uc32 c) { + DCHECK(c == Invalid() || base::IsInRange(c, 0u, String::kMaxCodePoint)); + return c == Scanner::Invalid(); +} + template <bool capture_raw, bool unicode> uc32 Scanner::ScanHexNumber(int expected_length) { DCHECK_LE(expected_length, 4); // prevent overflow @@ -120,7 +126,7 @@ uc32 Scanner::ScanHexNumber(int expected_length) { unicode ? MessageTemplate::kInvalidUnicodeEscapeSequence : MessageTemplate::kInvalidHexEscapeSequence); - return -1; + return Invalid(); } x = x * 16 + d; Advance<capture_raw>(); @@ -130,17 +136,17 @@ uc32 Scanner::ScanHexNumber(int expected_length) { } template <bool capture_raw> -uc32 Scanner::ScanUnlimitedLengthHexNumber(int max_value, int beg_pos) { +uc32 Scanner::ScanUnlimitedLengthHexNumber(uc32 max_value, int beg_pos) { uc32 x = 0; int d = HexValue(c0_); - if (d < 0) return -1; + if (d < 0) return Invalid(); while (d >= 0) { x = x * 16 + d; if (x > max_value) { ReportScannerError(Location(beg_pos, source_pos() + 1), MessageTemplate::kUndefinedUnicodeCodePoint); - return -1; + return Invalid(); } Advance<capture_raw>(); d = HexValue(c0_); @@ -386,7 +392,7 @@ bool Scanner::ScanEscape() { case 't' : c = '\t'; break; case 'u' : { c = ScanUnicodeEscape<capture_raw>(); - if (c < 0) return false; + if (IsInvalid(c)) return false; break; } case 'v': @@ -394,7 +400,7 @@ bool Scanner::ScanEscape() { break; case 'x': { c = ScanHexNumber<capture_raw>(2); - if (c < 0) return false; + if (IsInvalid(c)) return false; break; } case '0': // Fall through. @@ -416,6 +422,7 @@ bool Scanner::ScanEscape() { template <bool capture_raw> uc32 Scanner::ScanOctalEscape(uc32 c, int length) { + DCHECK('0' <= c && c <= '7'); uc32 x = c - '0'; int i = 0; for (; i < length; i++) { @@ -553,7 +560,7 @@ Token::Value Scanner::ScanTemplateSpan() { scanner_error_state.MoveErrorTo(next_); octal_error_state.MoveErrorTo(next_); } - } else if (c < 0) { + } else if (c == kEndOfInput) { // Unterminated template literal break; } else { @@ -861,7 +868,7 @@ Token::Value Scanner::ScanNumber(bool seen_period) { uc32 Scanner::ScanIdentifierUnicodeEscape() { Advance(); - if (c0_ != 'u') return -1; + if (c0_ != 'u') return Invalid(); Advance(); return ScanUnicodeEscape<false>(); } @@ -873,11 +880,12 @@ uc32 Scanner::ScanUnicodeEscape() { if (c0_ == '{') { int begin = source_pos() - 2; Advance<capture_raw>(); - uc32 cp = ScanUnlimitedLengthHexNumber<capture_raw>(0x10FFFF, begin); - if (cp < 0 || c0_ != '}') { + uc32 cp = + ScanUnlimitedLengthHexNumber<capture_raw>(String::kMaxCodePoint, begin); + if (cp == kInvalidSequence || c0_ != '}') { ReportScannerError(source_pos(), MessageTemplate::kInvalidUnicodeEscapeSequence); - return -1; + return Invalid(); } Advance<capture_raw>(); return cp; @@ -895,7 +903,7 @@ Token::Value Scanner::ScanIdentifierOrKeywordInnerSlow(bool escaped, // Only allow legal identifier part characters. // TODO(verwaest): Make this true. // DCHECK(!IsIdentifierPart('\')); - DCHECK(!IsIdentifierPart(-1)); + DCHECK(!IsIdentifierPart(Invalid())); if (c == '\\' || !IsIdentifierPart(c)) { return Token::ILLEGAL; } @@ -986,8 +994,9 @@ Maybe<int> Scanner::ScanRegExpFlags() { // Scan regular expression flags. JSRegExp::Flags flags; while (IsIdentifierPart(c0_)) { - JSRegExp::Flags flag = JSRegExp::FlagFromChar(c0_); - if (flag == JSRegExp::kInvalid) return Nothing<int>(); + base::Optional<JSRegExp::Flags> maybe_flag = JSRegExp::FlagFromChar(c0_); + if (!maybe_flag.has_value()) return Nothing<int>(); + JSRegExp::Flags flag = *maybe_flag; if (flags & flag) return Nothing<int>(); Advance(); flags |= flag; |