Index: src/preparser.h |
diff --git a/src/preparser.h b/src/preparser.h |
index 1062907c5fa3f85135b10c13a49c348390acdd25..a41b22822495713526ef794509b21e71fd4442bb 100644 |
--- a/src/preparser.h |
+++ b/src/preparser.h |
@@ -150,13 +150,6 @@ class ParserBase : public Traits { |
scope_(scope) { |
*scope_stack_ = scope_; |
} |
- BlockState(typename Traits::Type::Scope** scope_stack, |
- typename Traits::Type::Scope** scope) |
- : scope_stack_(scope_stack), |
- outer_scope_(*scope_stack), |
- scope_(*scope) { |
- *scope_stack_ = scope_; |
- } |
~BlockState() { *scope_stack_ = outer_scope_; } |
private: |
@@ -171,10 +164,6 @@ class ParserBase : public Traits { |
typename Traits::Type::Scope** scope_stack, |
typename Traits::Type::Scope* scope, |
typename Traits::Type::Factory* factory); |
- FunctionState(FunctionState** function_state_stack, |
- typename Traits::Type::Scope** scope_stack, |
- typename Traits::Type::Scope** scope, |
- typename Traits::Type::Factory* factory); |
~FunctionState(); |
int NextMaterializedLiteralIndex() { |
@@ -1123,6 +1112,7 @@ class PreParserTraits { |
// Used by FunctionState and BlockState. |
typedef PreParserScope Scope; |
typedef PreParserScope ScopePtr; |
+ inline static Scope* ptr_to_scope(ScopePtr& scope) { return &scope; } |
// PreParser doesn't need to store generator variables. |
typedef void GeneratorVariable; |
@@ -1578,27 +1568,6 @@ ParserBase<Traits>::FunctionState::FunctionState( |
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::Factory* factory) |
- : next_materialized_literal_index_(JSFunction::kLiteralsPrefixSize), |
- next_handler_index_(0), |
- expected_property_count_(0), |
- is_generator_(false), |
- generator_object_variable_(NULL), |
- function_state_stack_(function_state_stack), |
- outer_function_state_(*function_state_stack), |
- scope_stack_(scope_stack), |
- outer_scope_(*scope_stack), |
- factory_(factory) { |
- *scope_stack_ = *scope; |
- *function_state_stack = this; |
-} |
- |
- |
-template <class Traits> |
ParserBase<Traits>::FunctionState::~FunctionState() { |
*scope_stack_ = outer_scope_; |
*function_state_stack_ = outer_function_state_; |
@@ -2636,7 +2605,8 @@ typename ParserBase<Traits>::ExpressionT ParserBase< |
{ |
typename Traits::Type::Factory function_factory( |
zone(), this->ast_value_factory(), ast_node_id_gen_); |
- FunctionState function_state(&function_state_, &scope_, &scope, |
+ FunctionState function_state(&function_state_, &scope_, |
+ Traits::Type::ptr_to_scope(scope), |
&function_factory); |
Scanner::Location dupe_error_loc = Scanner::Location::invalid(); |
num_parameters = Traits::DeclareArrowParametersFromExpression( |
@@ -2751,14 +2721,14 @@ typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseClassLiteral( |
ExpressionT extends = this->EmptyExpression(); |
if (Check(Token::EXTENDS)) { |
typename Traits::Type::ScopePtr scope = this->NewScope(scope_, BLOCK_SCOPE); |
- BlockState block_state(&scope_, &scope); |
+ BlockState block_state(&scope_, Traits::Type::ptr_to_scope(scope)); |
scope_->SetStrictMode(STRICT); |
extends = this->ParseLeftHandSideExpression(CHECK_OK); |
} |
// TODO(arv): Implement scopes and name binding in class body only. |
typename Traits::Type::ScopePtr scope = this->NewScope(scope_, BLOCK_SCOPE); |
- BlockState block_state(&scope_, &scope); |
+ BlockState block_state(&scope_, Traits::Type::ptr_to_scope(scope)); |
scope_->SetStrictMode(STRICT); |
scope_->SetScopeName(name); |