Index: src/parser.h |
diff --git a/src/parser.h b/src/parser.h |
index 1b1b55f45e2a72bf590c44ec4c5dd13a16907c0d..de994256e00b99f15e52733f4da187dd1ec1a10d 100644 |
--- a/src/parser.h |
+++ b/src/parser.h |
@@ -498,7 +498,9 @@ class Parser : public ParserBase<ParserTraits> { |
class FunctionState BASE_EMBEDDED { |
public: |
- FunctionState(Parser* parser, Scope* scope); |
+ FunctionState(FunctionState** function_state_stack, |
+ Scope** scope_stack, Scope* scope, |
+ Zone* zone); |
~FunctionState(); |
int NextMaterializedLiteralIndex() { |
@@ -545,9 +547,11 @@ class Parser : public ParserBase<ParserTraits> { |
// indicates that this function is not a generator. |
Variable* generator_object_variable_; |
- Parser* parser_; |
+ FunctionState** function_state_stack_; |
FunctionState* outer_function_state_; |
+ Scope** scope_stack_; |
Scope* outer_scope_; |
+ Isolate* isolate_; |
int saved_ast_node_id_; |
AstNodeFactory<AstConstructionVisitor> factory_; |
}; |
@@ -590,17 +594,17 @@ class Parser : public ParserBase<ParserTraits> { |
symbol_cache_.Initialize(data ? data->symbol_count() : 0, zone()); |
} |
- bool inside_with() const { return top_scope_->inside_with(); } |
+ bool inside_with() const { return scope_->inside_with(); } |
Scanner& scanner() { return scanner_; } |
Mode mode() const { return mode_; } |
ScriptDataImpl* pre_parse_data() const { return pre_parse_data_; } |
bool is_extended_mode() { |
- ASSERT(top_scope_ != NULL); |
- return top_scope_->is_extended_mode(); |
+ ASSERT(scope_ != NULL); |
+ return scope_->is_extended_mode(); |
} |
Scope* DeclarationScope(VariableMode mode) { |
return IsLexicalVariableMode(mode) |
- ? top_scope_ : top_scope_->DeclarationScope(); |
+ ? scope_ : scope_->DeclarationScope(); |
} |
// All ParseXXX functions take as the last argument an *ok parameter |
@@ -767,7 +771,7 @@ class Parser : public ParserBase<ParserTraits> { |
SingletonLogger* logger); |
AstNodeFactory<AstConstructionVisitor>* factory() { |
- return current_function_state_->factory(); |
+ return function_state_->factory(); |
} |
Isolate* isolate_; |
@@ -776,9 +780,9 @@ class Parser : public ParserBase<ParserTraits> { |
Handle<Script> script_; |
Scanner scanner_; |
PreParser* reusable_preparser_; |
- Scope* top_scope_; |
+ Scope* scope_; // Scope stack. |
Scope* original_scope_; // for ES5 function declarations in sloppy eval |
- FunctionState* current_function_state_; |
+ FunctionState* function_state_; // Function state stack. |
Target* target_stack_; // for break, continue statements |
v8::Extension* extension_; |
ScriptDataImpl* pre_parse_data_; |
@@ -788,8 +792,6 @@ class Parser : public ParserBase<ParserTraits> { |
Zone* zone_; |
CompilationInfo* info_; |
- friend class BlockState; |
- friend class FunctionState; |
}; |