| 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;
|
|
|