| Index: src/preparser.h
|
| diff --git a/src/preparser.h b/src/preparser.h
|
| index e7adbc042a53cb2a4b9a4a5d8166d1dd76331663..06880d5274716257b8a12e81be98ceb18bd723d9 100644
|
| --- a/src/preparser.h
|
| +++ b/src/preparser.h
|
| @@ -382,8 +382,6 @@ class ParserBase : public Traits {
|
| typename Traits::Type::Expression ParseArrayLiteral(bool* ok);
|
| typename Traits::Type::Expression ParseObjectLiteral(bool* ok);
|
| typename Traits::Type::ExpressionList ParseArguments(bool* ok);
|
| - typename Traits::Type::Expression ParseAssignmentExpression(bool accept_IN,
|
| - bool* ok);
|
|
|
| // Used to detect duplicates in object literals. Each of the values
|
| // kGetterProperty, kSetterProperty and kValueProperty represents
|
| @@ -566,14 +564,6 @@ class PreParserExpression {
|
|
|
| bool IsStrictFunction() { return code_ == kStrictFunctionExpression; }
|
|
|
| - // Dummy implementation for making expression->AsCall() work (see below).
|
| - PreParserExpression* operator->() { return this; }
|
| -
|
| - // These are only used when doing function name inferring, and PreParser
|
| - // doesn't do function name inferring.
|
| - void* AsCall() const { return NULL; }
|
| - void* AsCallNew() const { return NULL; }
|
| -
|
| private:
|
| // First two/three bits are used as flags.
|
| // Bit 0 and 1 represent identifiers or strings literals, and are
|
| @@ -693,13 +683,6 @@ class PreParserFactory {
|
| int pos) {
|
| return PreParserExpression::Default();
|
| }
|
| -
|
| - PreParserExpression NewAssignment(Token::Value op,
|
| - PreParserExpression left,
|
| - PreParserExpression right,
|
| - int pos) {
|
| - return PreParserExpression::Default();
|
| - }
|
| };
|
|
|
|
|
| @@ -746,11 +729,6 @@ class PreParserTraits {
|
| return identifier.IsEvalOrArguments();
|
| }
|
|
|
| - // Returns true if the expression is of type "this.foo".
|
| - static bool IsThisProperty(PreParserExpression expression) {
|
| - return expression.IsThisProperty();
|
| - }
|
| -
|
| static bool IsBoilerplateProperty(PreParserExpression property) {
|
| // PreParser doesn't count boilerplate properties.
|
| return false;
|
| @@ -760,8 +738,6 @@ class PreParserTraits {
|
| return false;
|
| }
|
|
|
| - // Functions for encapsulating the differences between parsing and preparsing;
|
| - // operations interleaved with the recursive descent.
|
| static void PushLiteralName(FuncNameInferrer* fni, PreParserIdentifier id) {
|
| // PreParser should not use FuncNameInferrer.
|
| ASSERT(false);
|
| @@ -770,29 +746,6 @@ class PreParserTraits {
|
| static void CheckFunctionLiteralInsideTopLevelObjectLiteral(
|
| PreParserScope* scope, PreParserExpression value, bool* has_function) {}
|
|
|
| - static void CheckAssigningFunctionLiteralToProperty(
|
| - PreParserExpression left, PreParserExpression right) {}
|
| -
|
| -
|
| - static PreParserExpression ValidateAssignmentLeftHandSide(
|
| - PreParserExpression expression) {
|
| - // Parser generates a runtime error here if the left hand side is not valid.
|
| - // PreParser doesn't have to.
|
| - return expression;
|
| - }
|
| -
|
| - static PreParserExpression MarkExpressionAsLValue(
|
| - PreParserExpression expression) {
|
| - // TODO(marja): To be able to produce the same errors, the preparser needs
|
| - // to start tracking which expressions are variables and which are lvalues.
|
| - return expression;
|
| - }
|
| -
|
| - // Checks LHS expression for assignment and prefix/postfix increment/decrement
|
| - // in strict mode.
|
| - void CheckStrictModeLValue(PreParserExpression expression, bool* ok);
|
| -
|
| -
|
| // Reporting errors.
|
| void ReportMessageAt(Scanner::Location location,
|
| const char* message,
|
| @@ -862,6 +815,7 @@ class PreParserTraits {
|
| }
|
|
|
| // Temporary glue; these functions will move to ParserBase.
|
| + PreParserExpression ParseAssignmentExpression(bool accept_IN, bool* ok);
|
| PreParserExpression ParseV8Intrinsic(bool* ok);
|
| PreParserExpression ParseFunctionLiteral(
|
| PreParserIdentifier name,
|
| @@ -871,8 +825,6 @@ class PreParserTraits {
|
| int function_token_position,
|
| FunctionLiteral::FunctionType type,
|
| bool* ok);
|
| - PreParserExpression ParseYieldExpression(bool* ok);
|
| - PreParserExpression ParseConditionalExpression(bool accept_IN, bool* ok);
|
|
|
| private:
|
| PreParser* pre_parser_;
|
| @@ -1037,6 +989,8 @@ class PreParser : public ParserBase<PreParserTraits> {
|
| Statement ParseThrowStatement(bool* ok);
|
| Statement ParseTryStatement(bool* ok);
|
| Statement ParseDebuggerStatement(bool* ok);
|
| +
|
| + Expression ParseAssignmentExpression(bool accept_IN, bool* ok);
|
| Expression ParseYieldExpression(bool* ok);
|
| Expression ParseConditionalExpression(bool accept_IN, bool* ok);
|
| Expression ParseBinaryExpression(int prec, bool accept_IN, bool* ok);
|
| @@ -1583,75 +1537,6 @@ typename Traits::Type::ExpressionList ParserBase<Traits>::ParseArguments(
|
| return result;
|
| }
|
|
|
| -// Precedence = 2
|
| -template <class Traits>
|
| -typename Traits::Type::Expression ParserBase<Traits>::ParseAssignmentExpression(
|
| - bool accept_IN, bool* ok) {
|
| - // AssignmentExpression ::
|
| - // ConditionalExpression
|
| - // YieldExpression
|
| - // LeftHandSideExpression AssignmentOperator AssignmentExpression
|
| -
|
| - if (peek() == Token::YIELD && is_generator()) {
|
| - return this->ParseYieldExpression(ok);
|
| - }
|
| -
|
| - if (fni_ != NULL) fni_->Enter();
|
| - typename Traits::Type::Expression expression =
|
| - this->ParseConditionalExpression(accept_IN, CHECK_OK);
|
| -
|
| - if (!Token::IsAssignmentOp(peek())) {
|
| - if (fni_ != NULL) fni_->Leave();
|
| - // Parsed conditional expression only (no assignment).
|
| - return expression;
|
| - }
|
| -
|
| - // Signal a reference error if the expression is an invalid left-hand
|
| - // side expression. We could report this as a syntax error here but
|
| - // for compatibility with JSC we choose to report the error at
|
| - // runtime.
|
| - // TODO(ES5): Should change parsing for spec conformance.
|
| - expression = this->ValidateAssignmentLeftHandSide(expression);
|
| -
|
| - if (strict_mode() == STRICT) {
|
| - // Assignment to eval or arguments is disallowed in strict mode.
|
| - CheckStrictModeLValue(expression, CHECK_OK);
|
| - }
|
| - expression = this->MarkExpressionAsLValue(expression);
|
| -
|
| - Token::Value op = Next(); // Get assignment operator.
|
| - int pos = position();
|
| - typename Traits::Type::Expression right =
|
| - this->ParseAssignmentExpression(accept_IN, CHECK_OK);
|
| -
|
| - // TODO(1231235): We try to estimate the set of properties set by
|
| - // constructors. We define a new property whenever there is an
|
| - // assignment to a property of 'this'. We should probably only add
|
| - // properties if we haven't seen them before. Otherwise we'll
|
| - // probably overestimate the number of properties.
|
| - if (op == Token::ASSIGN && this->IsThisProperty(expression)) {
|
| - function_state_->AddProperty();
|
| - }
|
| -
|
| - this->CheckAssigningFunctionLiteralToProperty(expression, right);
|
| -
|
| - if (fni_ != NULL) {
|
| - // Check if the right hand side is a call to avoid inferring a
|
| - // name if we're dealing with "a = function(){...}();"-like
|
| - // expression.
|
| - if ((op == Token::INIT_VAR
|
| - || op == Token::INIT_CONST_LEGACY
|
| - || op == Token::ASSIGN)
|
| - && (right->AsCall() == NULL && right->AsCallNew() == NULL)) {
|
| - fni_->Infer();
|
| - } else {
|
| - fni_->RemoveLastFunction();
|
| - }
|
| - fni_->Leave();
|
| - }
|
| -
|
| - return factory()->NewAssignment(op, expression, right, pos);
|
| -}
|
|
|
| #undef CHECK_OK
|
| #undef CHECK_OK_CUSTOM
|
|
|