summaryrefslogtreecommitdiff
path: root/chromium/v8/src/parsing/scanner.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/v8/src/parsing/scanner.cc
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-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.cc37
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;