| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index 49fd7ba50500191e090c7de1cd704f48d5fca012..c0d33604cb7a29f840ad0c2ce9992b5b767dcf05 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -449,6 +449,16 @@ void ParserTraits::CheckAssigningFunctionLiteralToProperty(Expression* left,
|
| }
|
|
|
|
|
| +void ParserTraits::CheckPossibleEvalCall(Expression* expression,
|
| + Scope* scope) {
|
| + VariableProxy* callee = expression->AsVariableProxy();
|
| + if (callee != NULL &&
|
| + callee->IsVariable(parser_->isolate()->factory()->eval_string())) {
|
| + scope->DeclarationScope()->RecordEvalCall();
|
| + }
|
| +}
|
| +
|
| +
|
| Expression* ParserTraits::MarkExpressionAsLValue(Expression* expression) {
|
| VariableProxy* proxy = expression != NULL
|
| ? expression->AsVariableProxy()
|
| @@ -740,8 +750,8 @@ FunctionLiteral* ParserTraits::ParseFunctionLiteral(
|
| }
|
|
|
|
|
| -Expression* ParserTraits::ParseLeftHandSideExpression(bool* ok) {
|
| - return parser_->ParseLeftHandSideExpression(ok);
|
| +Expression* ParserTraits::ParseMemberWithNewPrefixesExpression(bool* ok) {
|
| + return parser_->ParseMemberWithNewPrefixesExpression(ok);
|
| }
|
|
|
|
|
| @@ -3043,79 +3053,6 @@ Statement* Parser::ParseForStatement(ZoneStringList* labels, bool* ok) {
|
| }
|
|
|
|
|
| -Expression* Parser::ParseLeftHandSideExpression(bool* ok) {
|
| - // LeftHandSideExpression ::
|
| - // (NewExpression | MemberExpression) ...
|
| -
|
| - Expression* result = ParseMemberWithNewPrefixesExpression(CHECK_OK);
|
| -
|
| - while (true) {
|
| - switch (peek()) {
|
| - case Token::LBRACK: {
|
| - Consume(Token::LBRACK);
|
| - int pos = position();
|
| - Expression* index = ParseExpression(true, CHECK_OK);
|
| - result = factory()->NewProperty(result, index, pos);
|
| - Expect(Token::RBRACK, CHECK_OK);
|
| - break;
|
| - }
|
| -
|
| - case Token::LPAREN: {
|
| - int pos;
|
| - if (scanner()->current_token() == Token::IDENTIFIER) {
|
| - // For call of an identifier we want to report position of
|
| - // the identifier as position of the call in the stack trace.
|
| - pos = position();
|
| - } else {
|
| - // For other kinds of calls we record position of the parenthesis as
|
| - // position of the call. Note that this is extremely important for
|
| - // expressions of the form function(){...}() for which call position
|
| - // should not point to the closing brace otherwise it will intersect
|
| - // with positions recorded for function literal and confuse debugger.
|
| - pos = peek_position();
|
| - // Also the trailing parenthesis are a hint that the function will
|
| - // be called immediately. If we happen to have parsed a preceding
|
| - // function literal eagerly, we can also compile it eagerly.
|
| - if (result->IsFunctionLiteral() && mode() == PARSE_EAGERLY) {
|
| - result->AsFunctionLiteral()->set_parenthesized();
|
| - }
|
| - }
|
| - ZoneList<Expression*>* args = ParseArguments(CHECK_OK);
|
| -
|
| - // Keep track of eval() calls since they disable all local variable
|
| - // optimizations.
|
| - // The calls that need special treatment are the
|
| - // direct eval calls. These calls are all of the form eval(...), with
|
| - // no explicit receiver.
|
| - // These calls are marked as potentially direct eval calls. Whether
|
| - // they are actually direct calls to eval is determined at run time.
|
| - VariableProxy* callee = result->AsVariableProxy();
|
| - if (callee != NULL &&
|
| - callee->IsVariable(isolate()->factory()->eval_string())) {
|
| - scope_->DeclarationScope()->RecordEvalCall();
|
| - }
|
| - result = factory()->NewCall(result, args, pos);
|
| - if (fni_ != NULL) fni_->RemoveLastFunction();
|
| - break;
|
| - }
|
| -
|
| - case Token::PERIOD: {
|
| - Consume(Token::PERIOD);
|
| - int pos = position();
|
| - Handle<String> name = ParseIdentifierName(CHECK_OK);
|
| - result = factory()->NewProperty(
|
| - result, factory()->NewLiteral(name, pos), pos);
|
| - if (fni_ != NULL) fni_->PushLiteralName(name);
|
| - break;
|
| - }
|
| -
|
| - default:
|
| - return result;
|
| - }
|
| - }
|
| -}
|
| -
|
| -
|
| Expression* Parser::ParseMemberWithNewPrefixesExpression(bool* ok) {
|
| // NewExpression ::
|
| // ('new')+ MemberExpression
|
|
|