Chromium Code Reviews| Index: src/ast.h |
| diff --git a/src/ast.h b/src/ast.h |
| index 1a56b32c00e9d1ea96a6c31a58d82b135a133463..70f0a590f9b3997b5f7b005725c4e1e5d9389cc4 100644 |
| --- a/src/ast.h |
| +++ b/src/ast.h |
| @@ -3278,13 +3278,14 @@ class AstNodeFactory final BASE_EMBEDDED { |
| public: |
| explicit AstNodeFactory(AstValueFactory* ast_value_factory) |
| : zone_(ast_value_factory->zone()), |
|
titzer
2015/09/09 19:48:16
Can we rename this zone to be clearer as well?
conradw
2015/09/10 11:17:28
Done.
|
| + parser_zone_(ast_value_factory->zone()), |
| ast_value_factory_(ast_value_factory) {} |
| VariableDeclaration* NewVariableDeclaration( |
| VariableProxy* proxy, VariableMode mode, Scope* scope, int pos, |
| bool is_class_declaration = false, int declaration_group_start = -1) { |
| - return new (zone_) |
| - VariableDeclaration(zone_, proxy, mode, scope, pos, |
| + return new (parser_zone_) |
| + VariableDeclaration(parser_zone_, proxy, mode, scope, pos, |
| is_class_declaration, declaration_group_start); |
| } |
| @@ -3293,21 +3294,23 @@ class AstNodeFactory final BASE_EMBEDDED { |
| FunctionLiteral* fun, |
| Scope* scope, |
| int pos) { |
| - return new (zone_) FunctionDeclaration(zone_, proxy, mode, fun, scope, pos); |
| + return new (parser_zone_) |
| + FunctionDeclaration(parser_zone_, proxy, mode, fun, scope, pos); |
| } |
| ImportDeclaration* NewImportDeclaration(VariableProxy* proxy, |
| const AstRawString* import_name, |
| const AstRawString* module_specifier, |
| Scope* scope, int pos) { |
| - return new (zone_) ImportDeclaration(zone_, proxy, import_name, |
| - module_specifier, scope, pos); |
| + return new (parser_zone_) ImportDeclaration( |
| + parser_zone_, proxy, import_name, module_specifier, scope, pos); |
| } |
| ExportDeclaration* NewExportDeclaration(VariableProxy* proxy, |
| Scope* scope, |
| int pos) { |
| - return new (zone_) ExportDeclaration(zone_, proxy, scope, pos); |
| + return new (parser_zone_) |
| + ExportDeclaration(parser_zone_, proxy, scope, pos); |
| } |
| Block* NewBlock(ZoneList<const AstRawString*>* labels, int capacity, |
| @@ -3465,8 +3468,8 @@ class AstNodeFactory final BASE_EMBEDDED { |
| int literal_index, |
| bool is_strong, |
| int pos) { |
| - return new (zone_) RegExpLiteral(zone_, pattern, flags, literal_index, |
| - is_strong, pos); |
| + return new (zone_) |
| + RegExpLiteral(zone_, pattern, flags, literal_index, is_strong, pos); |
| } |
| ArrayLiteral* NewArrayLiteral(ZoneList<Expression*>* values, |
| @@ -3487,7 +3490,8 @@ class AstNodeFactory final BASE_EMBEDDED { |
| VariableProxy* NewVariableProxy(Variable* var, |
| int start_position = RelocInfo::kNoPosition, |
| int end_position = RelocInfo::kNoPosition) { |
| - return new (zone_) VariableProxy(zone_, var, start_position, end_position); |
| + return new (parser_zone_) |
| + VariableProxy(parser_zone_, var, start_position, end_position); |
| } |
| VariableProxy* NewVariableProxy(const AstRawString* name, |
| @@ -3495,8 +3499,8 @@ class AstNodeFactory final BASE_EMBEDDED { |
| int start_position = RelocInfo::kNoPosition, |
| int end_position = RelocInfo::kNoPosition) { |
| DCHECK_NOT_NULL(name); |
| - return new (zone_) |
| - VariableProxy(zone_, name, variable_kind, start_position, end_position); |
| + return new (parser_zone_) VariableProxy(parser_zone_, name, variable_kind, |
| + start_position, end_position); |
| } |
| Property* NewProperty(Expression* obj, Expression* key, int pos) { |
| @@ -3606,11 +3610,11 @@ class AstNodeFactory final BASE_EMBEDDED { |
| FunctionLiteral::IsFunctionFlag is_function, |
| FunctionLiteral::EagerCompileHint eager_compile_hint, FunctionKind kind, |
| int position) { |
| - return new (zone_) FunctionLiteral( |
| - zone_, name, ast_value_factory, scope, body, materialized_literal_count, |
| - expected_property_count, parameter_count, function_type, |
| - has_duplicate_parameters, is_function, eager_compile_hint, kind, |
| - position); |
| + return new (parser_zone_) FunctionLiteral( |
| + parser_zone_, name, ast_value_factory, scope, body, |
| + materialized_literal_count, expected_property_count, parameter_count, |
| + function_type, has_duplicate_parameters, is_function, |
| + eager_compile_hint, kind, position); |
| } |
| ClassLiteral* NewClassLiteral(const AstRawString* name, Scope* scope, |
| @@ -3618,15 +3622,16 @@ class AstNodeFactory final BASE_EMBEDDED { |
| FunctionLiteral* constructor, |
| ZoneList<ObjectLiteral::Property*>* properties, |
| int start_position, int end_position) { |
| - return new (zone_) |
| - ClassLiteral(zone_, name, scope, proxy, extends, constructor, |
| + return new (parser_zone_) |
| + ClassLiteral(parser_zone_, name, scope, proxy, extends, constructor, |
| properties, start_position, end_position); |
| } |
| NativeFunctionLiteral* NewNativeFunctionLiteral(const AstRawString* name, |
| v8::Extension* extension, |
| int pos) { |
| - return new (zone_) NativeFunctionLiteral(zone_, name, extension, pos); |
| + return new (parser_zone_) |
| + NativeFunctionLiteral(parser_zone_, name, extension, pos); |
| } |
| ThisFunction* NewThisFunction(int pos) { |
| @@ -3636,24 +3641,31 @@ class AstNodeFactory final BASE_EMBEDDED { |
| SuperPropertyReference* NewSuperPropertyReference(VariableProxy* this_var, |
| Expression* home_object, |
| int pos) { |
| - return new (zone_) |
| - SuperPropertyReference(zone_, this_var, home_object, pos); |
| + return new (parser_zone_) |
| + SuperPropertyReference(parser_zone_, this_var, home_object, pos); |
| } |
| SuperCallReference* NewSuperCallReference(VariableProxy* this_var, |
| VariableProxy* new_target_var, |
| VariableProxy* this_function_var, |
| int pos) { |
| - return new (zone_) SuperCallReference(zone_, this_var, new_target_var, |
| - this_function_var, pos); |
| + return new (parser_zone_) SuperCallReference( |
| + parser_zone_, this_var, new_target_var, this_function_var, pos); |
| } |
| EmptyParentheses* NewEmptyParentheses(int pos) { |
| return new (zone_) EmptyParentheses(zone_, pos); |
| } |
| + Zone* zone() const { return zone_; } |
| + |
| + void set_zone(Zone* temp_zone) { zone_ = temp_zone; } |
| + |
| private: |
| Zone* zone_; |
| + // HeapObjects which need to persist until scope analysis must be allocated in |
| + // the parser-level zone. |
| + Zone* parser_zone_; |
| AstValueFactory* ast_value_factory_; |
| }; |