Index: src/preparser.h |
diff --git a/src/preparser.h b/src/preparser.h |
index ba58c10b9194bd5438f39954fae9d2aaff184cdc..1062907c5fa3f85135b10c13a49c348390acdd25 100644 |
--- a/src/preparser.h |
+++ b/src/preparser.h |
@@ -170,15 +170,11 @@ class ParserBase : public Traits { |
FunctionState(FunctionState** function_state_stack, |
typename Traits::Type::Scope** scope_stack, |
typename Traits::Type::Scope* scope, |
- typename Traits::Type::Zone* zone = NULL, |
- AstValueFactory* ast_value_factory = NULL, |
- AstNode::IdGen* ast_node_id_gen = NULL); |
+ typename Traits::Type::Factory* factory); |
FunctionState(FunctionState** function_state_stack, |
typename Traits::Type::Scope** scope_stack, |
typename Traits::Type::Scope** scope, |
- typename Traits::Type::Zone* zone = NULL, |
- AstValueFactory* ast_value_factory = NULL, |
- AstNode::IdGen* ast_node_id_gen = NULL); |
+ typename Traits::Type::Factory* factory); |
~FunctionState(); |
int NextMaterializedLiteralIndex() { |
@@ -209,7 +205,7 @@ class ParserBase : public Traits { |
return generator_object_variable_; |
} |
- typename Traits::Type::Factory* factory() { return &factory_; } |
+ typename Traits::Type::Factory* factory() { return factory_; } |
private: |
// Used to assign an index to each literal that needs materialization in |
@@ -234,10 +230,8 @@ class ParserBase : public Traits { |
FunctionState* outer_function_state_; |
typename Traits::Type::Scope** scope_stack_; |
typename Traits::Type::Scope* outer_scope_; |
- AstNode::IdGen* ast_node_id_gen_; // Only used by ParserTraits. |
- AstNode::IdGen saved_id_gen_; // Ditto. |
typename Traits::Type::Zone* extra_param_; |
- typename Traits::Type::Factory factory_; |
+ typename Traits::Type::Factory* factory_; |
friend class ParserTraits; |
friend class Checkpoint; |
@@ -1156,13 +1150,6 @@ class PreParserTraits { |
explicit PreParserTraits(PreParser* pre_parser) : pre_parser_(pre_parser) {} |
- // Custom operations executed when FunctionStates are created and |
- // destructed. (The PreParser doesn't need to do anything.) |
- template <typename FunctionState> |
- static void SetUpFunctionState(FunctionState* function_state) {} |
- template <typename FunctionState> |
- static void TearDownFunctionState(FunctionState* function_state) {} |
- |
// Helper functions for recursive descent. |
static bool IsEvalOrArguments(PreParserIdentifier identifier) { |
return identifier.IsEvalOrArguments(); |
@@ -1445,7 +1432,8 @@ class PreParser : public ParserBase<PreParserTraits> { |
// during parsing. |
PreParseResult PreParseProgram() { |
PreParserScope scope(scope_, GLOBAL_SCOPE); |
- FunctionState top_scope(&function_state_, &scope_, &scope); |
+ PreParserFactory factory(NULL, NULL, NULL); |
+ FunctionState top_scope(&function_state_, &scope_, &scope, &factory); |
bool ok = true; |
int start_position = scanner()->peek_location().beg_pos; |
ParseSourceElements(Token::EOS, &ok); |
@@ -1572,8 +1560,8 @@ template <class Traits> |
ParserBase<Traits>::FunctionState::FunctionState( |
FunctionState** function_state_stack, |
typename Traits::Type::Scope** scope_stack, |
- typename Traits::Type::Scope* scope, typename Traits::Type::Zone* zone, |
- AstValueFactory* ast_value_factory, AstNode::IdGen* ast_node_id_gen) |
+ typename Traits::Type::Scope* scope, |
+ typename Traits::Type::Factory* factory) |
: next_materialized_literal_index_(JSFunction::kLiteralsPrefixSize), |
next_handler_index_(0), |
expected_property_count_(0), |
@@ -1583,11 +1571,9 @@ ParserBase<Traits>::FunctionState::FunctionState( |
outer_function_state_(*function_state_stack), |
scope_stack_(scope_stack), |
outer_scope_(*scope_stack), |
- ast_node_id_gen_(ast_node_id_gen), |
- factory_(zone, ast_value_factory, ast_node_id_gen) { |
+ factory_(factory) { |
*scope_stack_ = scope; |
*function_state_stack = this; |
- Traits::SetUpFunctionState(this); |
} |
@@ -1595,8 +1581,8 @@ template <class Traits> |
ParserBase<Traits>::FunctionState::FunctionState( |
FunctionState** function_state_stack, |
typename Traits::Type::Scope** scope_stack, |
- typename Traits::Type::Scope** scope, typename Traits::Type::Zone* zone, |
- AstValueFactory* ast_value_factory, AstNode::IdGen* ast_node_id_gen) |
+ typename Traits::Type::Scope** scope, |
+ typename Traits::Type::Factory* factory) |
: next_materialized_literal_index_(JSFunction::kLiteralsPrefixSize), |
next_handler_index_(0), |
expected_property_count_(0), |
@@ -1606,11 +1592,9 @@ ParserBase<Traits>::FunctionState::FunctionState( |
outer_function_state_(*function_state_stack), |
scope_stack_(scope_stack), |
outer_scope_(*scope_stack), |
- ast_node_id_gen_(ast_node_id_gen), |
- factory_(zone, ast_value_factory, ast_node_id_gen) { |
+ factory_(factory) { |
*scope_stack_ = *scope; |
*function_state_stack = this; |
- Traits::SetUpFunctionState(this); |
} |
@@ -1618,7 +1602,6 @@ template <class Traits> |
ParserBase<Traits>::FunctionState::~FunctionState() { |
*scope_stack_ = outer_scope_; |
*function_state_stack_ = outer_function_state_; |
- Traits::TearDownFunctionState(this); |
} |
@@ -2651,8 +2634,10 @@ typename ParserBase<Traits>::ExpressionT ParserBase< |
int handler_count = 0; |
{ |
- FunctionState function_state(&function_state_, &scope_, &scope, zone(), |
- this->ast_value_factory(), ast_node_id_gen_); |
+ typename Traits::Type::Factory function_factory( |
+ zone(), this->ast_value_factory(), ast_node_id_gen_); |
+ FunctionState function_state(&function_state_, &scope_, &scope, |
+ &function_factory); |
Scanner::Location dupe_error_loc = Scanner::Location::invalid(); |
num_parameters = Traits::DeclareArrowParametersFromExpression( |
params_ast, scope_, &dupe_error_loc, ok); |