| Index: src/preparser.cc | 
| diff --git a/src/preparser.cc b/src/preparser.cc | 
| index 8422c060a6b8f5b0e55f294bffafba94dfd77b27..b1f2348701c8d2b1bd42a0d7a9a6aa221f1c62e0 100644 | 
| --- a/src/preparser.cc | 
| +++ b/src/preparser.cc | 
| @@ -72,7 +72,7 @@ PreParser::PreParseResult PreParser::PreParseLazyFunction( | 
| ReportUnexpectedToken(scanner()->current_token()); | 
| } else { | 
| ASSERT_EQ(Token::RBRACE, scanner()->peek()); | 
| -    if (!is_classic_mode()) { | 
| +    if (!scope_->is_classic_mode()) { | 
| int end_pos = scanner()->location().end_pos; | 
| CheckOctalLiteral(start_position, end_pos, &ok); | 
| if (ok) { | 
| @@ -97,40 +97,6 @@ PreParser::PreParseResult PreParser::PreParseLazyFunction( | 
| // That means that contextual checks (like a label being declared where | 
| // it is used) are generally omitted. | 
|  | 
| -void PreParser::ReportUnexpectedToken(Token::Value token) { | 
| -  // We don't report stack overflows here, to avoid increasing the | 
| -  // stack depth even further.  Instead we report it after parsing is | 
| -  // over, in ParseProgram. | 
| -  if (token == Token::ILLEGAL && stack_overflow()) { | 
| -    return; | 
| -  } | 
| -  Scanner::Location source_location = scanner()->location(); | 
| - | 
| -  // Four of the tokens are treated specially | 
| -  switch (token) { | 
| -  case Token::EOS: | 
| -    return ReportMessageAt(source_location, "unexpected_eos", NULL); | 
| -  case Token::NUMBER: | 
| -    return ReportMessageAt(source_location, "unexpected_token_number", NULL); | 
| -  case Token::STRING: | 
| -    return ReportMessageAt(source_location, "unexpected_token_string", NULL); | 
| -  case Token::IDENTIFIER: | 
| -    return ReportMessageAt(source_location, | 
| -                           "unexpected_token_identifier", NULL); | 
| -  case Token::FUTURE_RESERVED_WORD: | 
| -    return ReportMessageAt(source_location, "unexpected_reserved", NULL); | 
| -  case Token::YIELD: | 
| -  case Token::FUTURE_STRICT_RESERVED_WORD: | 
| -    return ReportMessageAt(source_location, | 
| -                           is_classic_mode() ? "unexpected_token_identifier" | 
| -                                             : "unexpected_strict_reserved", | 
| -                           NULL); | 
| -  default: | 
| -    const char* name = Token::String(token); | 
| -    ReportMessageAt(source_location, "unexpected_token", name); | 
| -  } | 
| -} | 
| - | 
|  | 
| #define CHECK_OK  ok);                      \ | 
| if (!*ok) return kUnknownSourceElements;  \ | 
| @@ -271,7 +237,7 @@ PreParser::Statement PreParser::ParseStatement(bool* ok) { | 
| Scanner::Location start_location = scanner()->peek_location(); | 
| Statement statement = ParseFunctionDeclaration(CHECK_OK); | 
| Scanner::Location end_location = scanner()->location(); | 
| -      if (!is_classic_mode()) { | 
| +      if (!scope_->is_classic_mode()) { | 
| ReportMessageAt(start_location.beg_pos, end_location.end_pos, | 
| "strict_function", NULL); | 
| *ok = false; | 
| @@ -480,7 +446,7 @@ PreParser::Statement PreParser::ParseExpressionOrLabelledStatement(bool* ok) { | 
| // Expression is a single identifier, and not, e.g., a parenthesized | 
| // identifier. | 
| ASSERT(!expr.AsIdentifier().IsFutureReserved()); | 
| -    ASSERT(is_classic_mode() || | 
| +    ASSERT(scope_->is_classic_mode() || | 
| (!expr.AsIdentifier().IsFutureStrictReserved() && | 
| !expr.AsIdentifier().IsYield())); | 
| Consume(Token::COLON); | 
| @@ -578,7 +544,7 @@ PreParser::Statement PreParser::ParseWithStatement(bool* ok) { | 
| // WithStatement :: | 
| //   'with' '(' Expression ')' Statement | 
| Expect(Token::WITH, CHECK_OK); | 
| -  if (!is_classic_mode()) { | 
| +  if (!scope_->is_classic_mode()) { | 
| Scanner::Location location = scanner()->location(); | 
| ReportMessageAt(location, "strict_mode_with", NULL); | 
| *ok = false; | 
| @@ -834,7 +800,7 @@ PreParser::Expression PreParser::ParseAssignmentExpression(bool accept_IN, | 
| return expression; | 
| } | 
|  | 
| -  if (!is_classic_mode() && | 
| +  if (!scope_->is_classic_mode() && | 
| expression.IsIdentifier() && | 
| expression.AsIdentifier().IsEvalOrArguments()) { | 
| Scanner::Location after = scanner()->location(); | 
| @@ -928,7 +894,7 @@ PreParser::Expression PreParser::ParseUnaryExpression(bool* ok) { | 
| op = Next(); | 
| Scanner::Location before = scanner()->peek_location(); | 
| Expression expression = ParseUnaryExpression(CHECK_OK); | 
| -    if (!is_classic_mode() && | 
| +    if (!scope_->is_classic_mode() && | 
| expression.IsIdentifier() && | 
| expression.AsIdentifier().IsEvalOrArguments()) { | 
| Scanner::Location after = scanner()->location(); | 
| @@ -951,7 +917,7 @@ PreParser::Expression PreParser::ParsePostfixExpression(bool* ok) { | 
| Expression expression = ParseLeftHandSideExpression(CHECK_OK); | 
| if (!scanner()->HasAnyLineTerminatorBeforeNext() && | 
| Token::IsCountOp(peek())) { | 
| -    if (!is_classic_mode() && | 
| +    if (!scope_->is_classic_mode() && | 
| expression.IsIdentifier() && | 
| expression.AsIdentifier().IsEvalOrArguments()) { | 
| Scanner::Location after = scanner()->location(); | 
| @@ -1392,7 +1358,7 @@ PreParser::Expression PreParser::ParseFunctionLiteral(bool is_generator, | 
| } | 
| Expect(Token::RBRACE, CHECK_OK); | 
|  | 
| -  if (!is_classic_mode()) { | 
| +  if (!scope_->is_classic_mode()) { | 
| int end_position = scanner()->location().end_pos; | 
| CheckOctalLiteral(start_position, end_position, CHECK_OK); | 
| CheckDelayedStrictModeViolation(start_position, end_position, CHECK_OK); | 
| @@ -1500,11 +1466,11 @@ PreParser::Identifier PreParser::ParseIdentifier( | 
| if (next == Token::IDENTIFIER) { | 
| PreParser::Identifier name = GetIdentifierSymbol(); | 
| if (allow_eval_or_arguments == kDontAllowEvalOrArguments && | 
| -        !is_classic_mode() && name.IsEvalOrArguments()) { | 
| +        !scope_->is_classic_mode() && name.IsEvalOrArguments()) { | 
| StrictModeIdentifierViolation(scanner()->location(), name, ok); | 
| } | 
| return name; | 
| -  } else if (is_classic_mode() && | 
| +  } else if (scope_->is_classic_mode() && | 
| (next == Token::FUTURE_STRICT_RESERVED_WORD || | 
| (next == Token::YIELD && !scope_->is_generator()))) { | 
| return GetIdentifierSymbol(); | 
| @@ -1519,7 +1485,7 @@ PreParser::Identifier PreParser::ParseIdentifier( | 
| void PreParser::SetStrictModeViolation(Scanner::Location location, | 
| const char* type, | 
| bool* ok) { | 
| -  if (!is_classic_mode()) { | 
| +  if (!scope_->is_classic_mode()) { | 
| ReportMessageAt(location, type, NULL); | 
| *ok = false; | 
| return; | 
| @@ -1558,7 +1524,7 @@ void PreParser::StrictModeIdentifierViolation(Scanner::Location location, | 
| } else if (identifier.IsFutureStrictReserved() || identifier.IsYield()) { | 
| type = "unexpected_strict_reserved"; | 
| } | 
| -  if (!is_classic_mode()) { | 
| +  if (!scope_->is_classic_mode()) { | 
| ReportMessageAt(location, type, NULL); | 
| *ok = false; | 
| return; | 
|  |