Index: src/hydrogen.h |
diff --git a/src/hydrogen.h b/src/hydrogen.h |
index 93664e963dfe36c8cd7595369cda91ea7e95a845..1b2c76a746c71d220d91a20c662aecb6e7d14968 100644 |
--- a/src/hydrogen.h |
+++ b/src/hydrogen.h |
@@ -141,6 +141,8 @@ class HBasicBlock: public ZoneObject { |
bool IsInlineReturnTarget() const { return is_inline_return_target_; } |
void MarkAsInlineReturnTarget() { is_inline_return_target_ = true; } |
+ inline Zone* zone(); |
+ |
#ifdef DEBUG |
void Verify(); |
#endif |
@@ -201,6 +203,9 @@ class HGraph: public ZoneObject { |
public: |
explicit HGraph(CompilationInfo* info); |
+ Isolate* isolate() { return isolate_; } |
+ Zone* zone() { return isolate_->zone(); } |
+ |
const ZoneList<HBasicBlock*>* blocks() const { return &blocks_; } |
const ZoneList<HPhi*>* phi_list() const { return phi_list_; } |
HBasicBlock* entry_block() const { return entry_block_; } |
@@ -281,8 +286,6 @@ class HGraph: public ZoneObject { |
void InitializeInferredTypes(int from_inclusive, int to_inclusive); |
void CheckForBackEdge(HBasicBlock* block, HBasicBlock* successor); |
- Isolate* isolate() { return isolate_; } |
- |
Isolate* isolate_; |
int next_block_id_; |
HBasicBlock* entry_block_; |
@@ -301,6 +304,9 @@ class HGraph: public ZoneObject { |
}; |
+Zone* HBasicBlock::zone() { return graph_->zone(); } |
+ |
+ |
class HEnvironment: public ZoneObject { |
public: |
HEnvironment(HEnvironment* outer, |
@@ -462,6 +468,8 @@ class AstContext { |
HGraphBuilder* owner() const { return owner_; } |
+ inline Zone* zone(); |
+ |
// We want to be able to assert, in a context-specific way, that the stack |
// height makes sense when the context is filled. |
#ifdef DEBUG |
@@ -630,7 +638,8 @@ class HGraphBuilder: public AstVisitor { |
break_scope_(NULL), |
graph_(NULL), |
current_block_(NULL), |
- inlined_count_(0) { |
+ inlined_count_(0), |
+ zone_(info->isolate()->zone()) { |
// This is not initialized in the initializer list because the |
// constructor for the initial state relies on function_state_ == NULL |
// to know it's the initial state. |
@@ -874,6 +883,7 @@ class HGraphBuilder: public AstVisitor { |
Handle<Map> receiver_map, |
bool smi_and_map_check); |
+ Zone* zone() { return zone_; } |
// The translation state of the currently-being-translated function. |
FunctionState* function_state_; |
@@ -893,6 +903,8 @@ class HGraphBuilder: public AstVisitor { |
int inlined_count_; |
+ Zone* zone_; |
+ |
friend class FunctionState; // Pushes and pops the state stack. |
friend class AstContext; // Pushes and pops the AST context stack. |
@@ -900,6 +912,9 @@ class HGraphBuilder: public AstVisitor { |
}; |
+Zone* AstContext::zone() { return owner_->zone(); } |
+ |
+ |
class HValueMap: public ZoneObject { |
public: |
HValueMap() |
@@ -922,7 +937,10 @@ class HValueMap: public ZoneObject { |
} |
HValue* Lookup(HValue* value) const; |
- HValueMap* Copy() const { return new HValueMap(this); } |
+ |
+ HValueMap* Copy(Zone* zone) const { |
+ return new(zone) HValueMap(this); |
+ } |
private: |
// A linked list of HValue* values. Stored in arrays. |