Commit e6d8031c authored by wingo@igalia.com's avatar wingo@igalia.com

Revert "Rewind additional parser state when reinterpreting arrow arguments"

This reverts r22906.

TBR=rossberg@chromium.org
BUG=

Review URL: https://codereview.chromium.org/440373003

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22907 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 87494a80
......@@ -339,23 +339,6 @@ class RegExpParser BASE_EMBEDDED {
// ----------------------------------------------------------------------------
// JAVASCRIPT PARSING
class ParserCheckpoint BASE_EMBEDDED {
public:
template <typename Parser>
explicit ParserCheckpoint(Parser* parser) {
isolate_ = parser->zone()->isolate();
saved_ast_node_id_ = isolate_->ast_node_id();
}
void Restore() { isolate_->set_ast_node_id(saved_ast_node_id_); }
private:
Isolate* isolate_;
int saved_ast_node_id_;
};
class Parser;
class SingletonLogger;
......@@ -371,7 +354,6 @@ class ParserTraits {
typedef v8::internal::Scope* ScopePtr;
typedef Variable GeneratorVariable;
typedef v8::internal::Zone Zone;
typedef ParserCheckpoint Checkpoint;
typedef v8::internal::AstProperties AstProperties;
typedef Vector<VariableProxy*> ParameterIdentifierVector;
......
......@@ -114,8 +114,6 @@ class ParserBase : public Traits {
}
protected:
friend class Traits::Type::Checkpoint;
enum AllowEvalOrArgumentsAsIdentifier {
kAllowEvalOrArguments,
kDontAllowEvalOrArguments
......@@ -126,8 +124,6 @@ class ParserBase : public Traits {
PARSE_EAGERLY
};
class ParserCheckpoint;
// ---------------------------------------------------------------------------
// FunctionState and BlockState together implement the parser's scope stack.
// The parser's current scope is in scope_. BlockState and FunctionState
......@@ -223,38 +219,6 @@ class ParserBase : public Traits {
typename Traits::Type::Factory factory_;
friend class ParserTraits;
friend class ParserCheckpoint;
};
// Annoyingly, arrow functions first parse as comma expressions, then when we
// see the => we have to go back and reinterpret the arguments as being formal
// parameters. To do so we need to reset some of the parser state back to
// what it was before the arguments were first seen.
class ParserCheckpoint : public Traits::Type::Checkpoint {
public:
template <typename Parser>
explicit ParserCheckpoint(Parser* parser)
: Traits::Type::Checkpoint(parser) {
function_state_ = parser->function_state_;
next_materialized_literal_index_ =
function_state_->next_materialized_literal_index_;
next_handler_index_ = function_state_->next_handler_index_;
expected_property_count_ = function_state_->expected_property_count_;
}
void Restore() {
Traits::Type::Checkpoint::Restore();
function_state_->next_materialized_literal_index_ =
next_materialized_literal_index_;
function_state_->next_handler_index_ = next_handler_index_;
function_state_->expected_property_count_ = expected_property_count_;
}
private:
FunctionState* function_state_;
int next_materialized_literal_index_;
int next_handler_index_;
int expected_property_count_;
};
class ParsingModeScope BASE_EMBEDDED {
......@@ -1057,14 +1021,6 @@ class PreParserFactory {
};
class PreParserCheckpoint BASE_EMBEDDED {
public:
template <typename Parser>
explicit PreParserCheckpoint(Parser* parser) {}
void Restore() {}
};
class PreParser;
class PreParserTraits {
......@@ -1077,7 +1033,6 @@ class PreParserTraits {
// Used by FunctionState and BlockState.
typedef PreParserScope Scope;
typedef PreParserScope ScopePtr;
typedef PreParserCheckpoint Checkpoint;
// PreParser doesn't need to store generator variables.
typedef void GeneratorVariable;
......@@ -2051,12 +2006,10 @@ ParserBase<Traits>::ParseAssignmentExpression(bool accept_IN, bool* ok) {
}
if (fni_ != NULL) fni_->Enter();
ParserCheckpoint checkpoint(this);
ExpressionT expression =
this->ParseConditionalExpression(accept_IN, CHECK_OK);
if (allow_arrow_functions() && peek() == Token::ARROW) {
checkpoint.Restore();
expression = this->ParseArrowFunctionLiteral(lhs_location.beg_pos,
expression, CHECK_OK);
return expression;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment