Chromium Code Reviews| Index: src/parsing/scanner.cc |
| diff --git a/src/parsing/scanner.cc b/src/parsing/scanner.cc |
| index c1580bbeae7dd23d69d0e02c13b0090474cb1773..c961ff758e77f96ff76e9ff8e96e5c2d1d3f4d94 100644 |
| --- a/src/parsing/scanner.cc |
| +++ b/src/parsing/scanner.cc |
| @@ -397,6 +397,7 @@ Token::Value Scanner::Next() { |
| next_.location.end_pos = pos + 1; |
| next_.literal_chars = nullptr; |
| next_.raw_literal_chars = nullptr; |
| + next_.invalid_template_escape_message_ = MessageTemplate::kNone; |
| Advance(); |
| return current_.token; |
| } |
| @@ -609,6 +610,7 @@ Token::Value Scanner::ScanHtmlComment() { |
| void Scanner::Scan() { |
| next_.literal_chars = NULL; |
| next_.raw_literal_chars = NULL; |
| + next_.invalid_template_escape_message_ = MessageTemplate::kNone; |
| Token::Value token; |
| do { |
| // Remember the position of the next token |
| @@ -889,6 +891,8 @@ void Scanner::SanityCheckTokenDesc(const TokenDesc& token) const { |
| // - TEMPLATE_*: need both literal + raw literal chars. |
| // - IDENTIFIERS, STRINGS, etc.: need a literal, but no raw literal. |
| // - all others: should have neither. |
| + // Furthermore, only TEMPLATE_* tokens can have a |
| + // invalid_template_escape_message_. |
| switch (token.token) { |
| case Token::UNINITIALIZED: |
| @@ -909,10 +913,12 @@ void Scanner::SanityCheckTokenDesc(const TokenDesc& token) const { |
| case Token::STRING: |
| DCHECK_NOT_NULL(token.literal_chars); |
| DCHECK_NULL(token.raw_literal_chars); |
| + DCHECK_EQ(token.invalid_template_escape_message_, MessageTemplate::kNone); |
| break; |
| default: |
| DCHECK_NULL(token.literal_chars); |
| DCHECK_NULL(token.raw_literal_chars); |
| + DCHECK_EQ(token.invalid_template_escape_message_, MessageTemplate::kNone); |
| break; |
| } |
| } |
| @@ -1117,10 +1123,11 @@ Token::Value Scanner::ScanTemplateSpan() { |
| DCHECK_EQ(!success, has_error()); |
| // For templates, invalid escape sequence checking is handled in the |
| // parser. |
| - scanner_error_state.MoveErrorTo(&invalid_template_escape_message_, |
| - &invalid_template_escape_location_); |
| - octal_error_state.MoveErrorTo(&invalid_template_escape_message_, |
| - &invalid_template_escape_location_); |
| + scanner_error_state.MoveErrorTo( |
|
vogelheim
2017/03/03 10:40:08
nitpick: With this change, it might be slightly ni
bakkot1
2017/03/03 20:50:17
TokenDesc is private in Scanner. I could make it p
vogelheim
2017/03/03 21:26:19
Oops. Hrmm, yeah, I think I asked you to take Erro
|
| + &next_.invalid_template_escape_message_, |
| + &next_.invalid_template_escape_location_); |
| + octal_error_state.MoveErrorTo(&next_.invalid_template_escape_message_, |
| + &next_.invalid_template_escape_location_); |
| } |
| } else if (c < 0) { |
| // Unterminated template literal |
| @@ -1736,7 +1743,9 @@ void Scanner::SeekNext(size_t position) { |
| // 1, Reset the current_, next_ and next_next_ tokens |
| // (next_ + next_next_ will be overwrittem by Next(), |
| // current_ will remain unchanged, so overwrite it fully.) |
| - current_ = {{0, 0}, nullptr, nullptr, 0, Token::UNINITIALIZED}; |
| + current_ = { |
| + {0, 0}, nullptr, nullptr, 0, Token::UNINITIALIZED, MessageTemplate::kNone, |
| + {0, 0}}; |
| next_.token = Token::UNINITIALIZED; |
| next_next_.token = Token::UNINITIALIZED; |
| // 2, reset the source to the desired position, |