summaryrefslogtreecommitdiff
path: root/deps/v8/src/parsing/scanner.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/parsing/scanner.h')
-rw-r--r--deps/v8/src/parsing/scanner.h31
1 files changed, 26 insertions, 5 deletions
diff --git a/deps/v8/src/parsing/scanner.h b/deps/v8/src/parsing/scanner.h
index 383159557b..368e150781 100644
--- a/deps/v8/src/parsing/scanner.h
+++ b/deps/v8/src/parsing/scanner.h
@@ -316,6 +316,10 @@ class Scanner {
return LiteralContainsEscapes(current());
}
+ bool next_literal_contains_escapes() const {
+ return LiteralContainsEscapes(next());
+ }
+
const AstRawString* CurrentSymbol(AstValueFactory* ast_value_factory) const;
const AstRawString* NextSymbol(AstValueFactory* ast_value_factory) const;
@@ -332,8 +336,8 @@ class Scanner {
}
template <size_t N>
- bool NextLiteralEquals(const char (&s)[N]) {
- DCHECK_EQ(Token::STRING, peek());
+ bool NextLiteralExactlyEquals(const char (&s)[N]) {
+ DCHECK(next().CanAccessLiteral());
// The length of the token is used to make sure the literal equals without
// taking escape sequences (e.g., "use \x73trict") or line continuations
// (e.g., "use \(newline) strict") into account.
@@ -345,6 +349,16 @@ class Scanner {
return next.length() == N - 1 && strncmp(s, chars, N - 1) == 0;
}
+ template <size_t N>
+ bool CurrentLiteralEquals(const char (&s)[N]) {
+ DCHECK(current().CanAccessLiteral());
+ if (!is_literal_one_byte()) return false;
+
+ Vector<const uint8_t> current = literal_one_byte_string();
+ const char* chars = reinterpret_cast<const char*>(current.start());
+ return current.length() == N - 1 && strncmp(s, chars, N - 1) == 0;
+ }
+
// Returns the location of the last seen octal literal.
Location octal_position() const { return octal_pos_; }
void clear_octal_position() {
@@ -517,9 +531,8 @@ class Scanner {
bool CanAccessLiteral() const {
return token == Token::PRIVATE_NAME || token == Token::ILLEGAL ||
token == Token::UNINITIALIZED || token == Token::REGEXP_LITERAL ||
- token == Token::ESCAPED_KEYWORD ||
IsInRange(token, Token::NUMBER, Token::STRING) ||
- (Token::IsAnyIdentifier(token) && !Token::IsKeyword(token)) ||
+ Token::IsAnyIdentifier(token) || Token::IsKeyword(token) ||
IsInRange(token, Token::TEMPLATE_SPAN, Token::TEMPLATE_TAIL);
}
bool CanAccessRawLiteral() const {
@@ -530,14 +543,22 @@ class Scanner {
};
enum NumberKind {
+ IMPLICIT_OCTAL,
BINARY,
OCTAL,
- IMPLICIT_OCTAL,
HEX,
DECIMAL,
DECIMAL_WITH_LEADING_ZERO
};
+ inline bool IsValidBigIntKind(NumberKind kind) {
+ return IsInRange(kind, BINARY, DECIMAL);
+ }
+
+ inline bool IsDecimalNumberKind(NumberKind kind) {
+ return IsInRange(kind, DECIMAL, DECIMAL_WITH_LEADING_ZERO);
+ }
+
static const int kCharacterLookaheadBufferSize = 1;
static const int kMaxAscii = 127;