Chromium Code Reviews| Index: src/preparser.h |
| diff --git a/src/preparser.h b/src/preparser.h |
| index 3b221ac09235654af5ff7fe241b6a507e6839df7..6256f3667b8607b121583544681cab201d7b4f8a 100644 |
| --- a/src/preparser.h |
| +++ b/src/preparser.h |
| @@ -386,16 +386,25 @@ class ParserBase : public Traits { |
| // Checks whether an octal literal was last seen between beg_pos and end_pos. |
| // If so, reports an error. Only called for strict mode. |
|
arv (Not doing code reviews)
2014/12/18 21:31:53
update comment too
|
| - void CheckOctalLiteral(int beg_pos, int end_pos, bool* ok) { |
| + void CheckOctalLiteral(int beg_pos, int end_pos, const char* error, |
| + bool* ok) { |
| Scanner::Location octal = scanner()->octal_position(); |
| if (octal.IsValid() && beg_pos <= octal.beg_pos && |
| octal.end_pos <= end_pos) { |
| - ReportMessageAt(octal, "strict_octal_literal"); |
| + ReportMessageAt(octal, error); |
| scanner()->clear_octal_position(); |
| *ok = false; |
| } |
| } |
| + inline void CheckStrictOctalLiteral(int beg_pos, int end_pos, bool* ok) { |
| + CheckOctalLiteral(beg_pos, end_pos, "strict_octal_literal", ok); |
| + } |
| + |
| + inline void CheckTemplateOctalLiteral(int beg_pos, int end_pos, bool* ok) { |
| + CheckOctalLiteral(beg_pos, end_pos, "template_octal_literal", ok); |
| + } |
| + |
| // Validates strict mode for function parameter lists. This has to be |
| // done after parsing the function, since the function can declare |
| // itself strict. |
| @@ -1489,7 +1498,8 @@ class PreParser : public ParserBase<PreParserTraits> { |
| if (!ok) { |
| ReportUnexpectedToken(scanner()->current_token()); |
| } else if (scope_->strict_mode() == STRICT) { |
| - CheckOctalLiteral(start_position, scanner()->location().end_pos, &ok); |
| + CheckStrictOctalLiteral(start_position, scanner()->location().end_pos, |
| + &ok); |
| } |
| if (materialized_literals) { |
| *materialized_literals = function_state_->materialized_literal_count(); |
| @@ -2802,7 +2812,8 @@ typename ParserBase<Traits>::ExpressionT ParserBase< |
| // Validate strict mode. |
| if (strict_mode() == STRICT) { |
| - CheckOctalLiteral(start_pos, scanner()->location().end_pos, CHECK_OK); |
| + CheckStrictOctalLiteral(start_pos, scanner()->location().end_pos, |
| + CHECK_OK); |
| } |
| if (allow_harmony_scoping() && strict_mode() == STRICT) |
| @@ -2846,6 +2857,7 @@ ParserBase<Traits>::ParseTemplateLiteral(ExpressionT tag, int start, bool* ok) { |
| if (peek() == Token::TEMPLATE_TAIL) { |
| Consume(Token::TEMPLATE_TAIL); |
| int pos = position(); |
| + CheckTemplateOctalLiteral(pos, peek_position(), CHECK_OK); |
| typename Traits::TemplateLiteralState ts = Traits::OpenTemplateLiteral(pos); |
| Traits::AddTemplateSpan(&ts, true); |
| return Traits::CloseTemplateLiteral(&ts, start, tag); |
| @@ -2897,6 +2909,7 @@ ParserBase<Traits>::ParseTemplateLiteral(ExpressionT tag, int start, bool* ok) { |
| } while (next == Token::TEMPLATE_SPAN); |
| DCHECK_EQ(next, Token::TEMPLATE_TAIL); |
| + CheckTemplateOctalLiteral(pos, peek_position(), CHECK_OK); |
| // Once we've reached a TEMPLATE_TAIL, we can close the TemplateLiteral. |
| return Traits::CloseTemplateLiteral(&ts, start, tag); |
| } |