| Index: src/parser.cc | 
| diff --git a/src/parser.cc b/src/parser.cc | 
| index 1f60163c0db97e2881cd08bd03b5868af7df165d..a17883fd456182865a90a1b76225ff02ae826ddb 100644 | 
| --- a/src/parser.cc | 
| +++ b/src/parser.cc | 
| @@ -3025,7 +3025,7 @@ Expression* Parser::ParseConditionalExpression(bool accept_IN, bool* ok) { | 
| } | 
|  | 
|  | 
| -static int Precedence(Token::Value tok, bool accept_IN) { | 
| +int ParserBase::Precedence(Token::Value tok, bool accept_IN) { | 
| if (tok == Token::IN && !accept_IN) | 
| return 0;  // 0 precedence will terminate binary expression parsing | 
|  | 
| @@ -3845,11 +3845,6 @@ void Parser::BuildObjectLiteralConstantProperties( | 
| } | 
|  | 
|  | 
| -// Force instantiation of template instances class. | 
| -template void ObjectLiteralChecker<Parser>::CheckProperty( | 
| -    Token::Value property, PropertyKind type, bool* ok); | 
| - | 
| - | 
| Expression* Parser::ParseObjectLiteral(bool* ok) { | 
| // ObjectLiteral :: | 
| //   '{' ( | 
| @@ -3863,8 +3858,7 @@ Expression* Parser::ParseObjectLiteral(bool* ok) { | 
| int number_of_boilerplate_properties = 0; | 
| bool has_function = false; | 
|  | 
| -  ObjectLiteralChecker<Parser> checker(this, &scanner_, | 
| -                                       top_scope_->language_mode()); | 
| +  ObjectLiteralChecker checker(this, top_scope_->language_mode()); | 
|  | 
| Expect(Token::LBRACE, CHECK_OK); | 
|  | 
| @@ -4618,9 +4612,9 @@ bool ParserBase::peek_any_identifier() { | 
| } | 
|  | 
|  | 
| -bool Parser::CheckContextualKeyword(Vector<const char> keyword) { | 
| +bool ParserBase::CheckContextualKeyword(Vector<const char> keyword) { | 
| if (peek() == Token::IDENTIFIER && | 
| -      scanner().is_next_contextual_keyword(keyword)) { | 
| +      scanner()->is_next_contextual_keyword(keyword)) { | 
| Consume(Token::IDENTIFIER); | 
| return true; | 
| } | 
| @@ -4645,12 +4639,12 @@ void ParserBase::ExpectSemicolon(bool* ok) { | 
| } | 
|  | 
|  | 
| -void Parser::ExpectContextualKeyword(Vector<const char> keyword, bool* ok) { | 
| +void ParserBase::ExpectContextualKeyword(Vector<const char> keyword, bool* ok) { | 
| Expect(Token::IDENTIFIER, ok); | 
| if (!*ok) return; | 
| -  if (!scanner().is_literal_contextual_keyword(keyword)) { | 
| +  if (!scanner()->is_literal_contextual_keyword(keyword)) { | 
| +    ReportUnexpectedToken(scanner()->current_token()); | 
| *ok = false; | 
| -    ReportUnexpectedToken(scanner().current_token()); | 
| } | 
| } | 
|  | 
| @@ -4745,14 +4739,11 @@ void Parser::CheckStrictModeLValue(Expression* expression, | 
|  | 
| // Checks whether an octal literal was last seen between beg_pos and end_pos. | 
| // If so, reports an error. Only called for strict mode. | 
| -void Parser::CheckOctalLiteral(int beg_pos, int end_pos, 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", | 
| -                    Vector<const char*>::empty()); | 
| -    scanner().clear_octal_position(); | 
| +void ParserBase::CheckOctalLiteral(int beg_pos, int end_pos, 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"); | 
| +    scanner()->clear_octal_position(); | 
| *ok = false; | 
| } | 
| } | 
|  |