Index: src/hydrogen.h |
diff --git a/src/hydrogen.h b/src/hydrogen.h |
index a7f5025c5e545400f2b206477746c991dc2dc0ae..63948c42eb3032f82a0ac86ea67134e14c6943a5 100644 |
--- a/src/hydrogen.h |
+++ b/src/hydrogen.h |
@@ -77,7 +77,7 @@ class HBasicBlock: public ZoneObject { |
return &deleted_phis_; |
} |
void RecordDeletedPhi(int merge_index) { |
- deleted_phis_.Add(merge_index); |
+ deleted_phis_.Add(merge_index, zone()); |
} |
HBasicBlock* dominator() const { return dominator_; } |
HEnvironment* last_environment() const { return last_environment_; } |
@@ -158,7 +158,7 @@ class HBasicBlock: public ZoneObject { |
dominates_loop_successors_ = true; |
} |
- inline Zone* zone(); |
+ inline Zone* zone() const; |
#ifdef DEBUG |
void Verify(); |
@@ -212,12 +212,12 @@ class HPredecessorIterator BASE_EMBEDDED { |
class HLoopInformation: public ZoneObject { |
public: |
- explicit HLoopInformation(HBasicBlock* loop_header) |
- : back_edges_(4), |
+ HLoopInformation(HBasicBlock* loop_header, Zone* zone) |
+ : back_edges_(4, zone), |
loop_header_(loop_header), |
- blocks_(8), |
+ blocks_(8, zone), |
stack_check_(NULL) { |
- blocks_.Add(loop_header); |
+ blocks_.Add(loop_header, zone); |
} |
virtual ~HLoopInformation() {} |
@@ -244,10 +244,10 @@ class HLoopInformation: public ZoneObject { |
class BoundsCheckTable; |
class HGraph: public ZoneObject { |
public: |
- explicit HGraph(CompilationInfo* info); |
+ HGraph(CompilationInfo* info, Zone* zone); |
Isolate* isolate() { return isolate_; } |
- Zone* zone() { return isolate_->zone(); } |
+ Zone* zone() const { return zone_; } |
const ZoneList<HBasicBlock*>* blocks() const { return &blocks_; } |
const ZoneList<HPhi*>* phi_list() const { return phi_list_; } |
@@ -304,7 +304,7 @@ class HGraph: public ZoneObject { |
int GetMaximumValueID() const { return values_.length(); } |
int GetNextBlockID() { return next_block_id_++; } |
int GetNextValueID(HValue* value) { |
- values_.Add(value); |
+ values_.Add(value, zone()); |
return values_.length() - 1; |
} |
HValue* LookupValue(int id) const { |
@@ -380,11 +380,13 @@ class HGraph: public ZoneObject { |
SetOncePointer<HBasicBlock> osr_loop_entry_; |
SetOncePointer<ZoneList<HUnknownOSRValue*> > osr_values_; |
+ Zone* zone_; |
+ |
DISALLOW_COPY_AND_ASSIGN(HGraph); |
}; |
-Zone* HBasicBlock::zone() { return graph_->zone(); } |
+Zone* HBasicBlock::zone() const { return graph_->zone(); } |
// Type of stack frame an environment might refer to. |
@@ -395,7 +397,8 @@ class HEnvironment: public ZoneObject { |
public: |
HEnvironment(HEnvironment* outer, |
Scope* scope, |
- Handle<JSFunction> closure); |
+ Handle<JSFunction> closure, |
+ Zone* zone); |
HEnvironment* DiscardInlined(bool drop_extra) { |
HEnvironment* outer = outer_; |
@@ -462,7 +465,7 @@ class HEnvironment: public ZoneObject { |
void Push(HValue* value) { |
ASSERT(value != NULL); |
++push_count_; |
- values_.Add(value); |
+ values_.Add(value, zone()); |
} |
HValue* Pop() { |
@@ -519,13 +522,16 @@ class HEnvironment: public ZoneObject { |
void PrintTo(StringStream* stream); |
void PrintToStd(); |
+ Zone* zone() const { return zone_; } |
+ |
private: |
- explicit HEnvironment(const HEnvironment* other); |
+ HEnvironment(const HEnvironment* other, Zone* zone); |
HEnvironment(HEnvironment* outer, |
Handle<JSFunction> closure, |
FrameType frame_type, |
- int arguments); |
+ int arguments, |
+ Zone* zone); |
// Create an artificial stub environment (e.g. for argument adaptor or |
// constructor stub). |
@@ -563,6 +569,7 @@ class HEnvironment: public ZoneObject { |
int pop_count_; |
int push_count_; |
int ast_id_; |
+ Zone* zone_; |
}; |
@@ -607,7 +614,7 @@ class AstContext { |
HGraphBuilder* owner() const { return owner_; } |
- inline Zone* zone(); |
+ inline Zone* zone() const; |
// We want to be able to assert, in a context-specific way, that the stack |
// height makes sense when the context is filled. |
@@ -821,7 +828,7 @@ class HGraphBuilder: public AstVisitor { |
BreakAndContinueScope* next_; |
}; |
- HGraphBuilder(CompilationInfo* info, TypeFeedbackOracle* oracle); |
+ HGraphBuilder(CompilationInfo* info, TypeFeedbackOracle* oracle, Zone* zone); |
HGraph* CreateGraph(); |
@@ -1144,7 +1151,7 @@ class HGraphBuilder: public AstVisitor { |
Handle<Map> receiver_map, |
bool smi_and_map_check); |
- Zone* zone() { return zone_; } |
+ Zone* zone() const { return zone_; } |
// The translation state of the currently-being-translated function. |
FunctionState* function_state_; |
@@ -1176,12 +1183,12 @@ class HGraphBuilder: public AstVisitor { |
}; |
-Zone* AstContext::zone() { return owner_->zone(); } |
+Zone* AstContext::zone() const { return owner_->zone(); } |
class HValueMap: public ZoneObject { |
public: |
- HValueMap() |
+ explicit HValueMap(Zone* zone) |
: array_size_(0), |
lists_size_(0), |
count_(0), |
@@ -1189,15 +1196,15 @@ class HValueMap: public ZoneObject { |
array_(NULL), |
lists_(NULL), |
free_list_head_(kNil) { |
- ResizeLists(kInitialSize); |
- Resize(kInitialSize); |
+ ResizeLists(kInitialSize, zone); |
+ Resize(kInitialSize, zone); |
} |
void Kill(GVNFlagSet flags); |
- void Add(HValue* value) { |
+ void Add(HValue* value, Zone* zone) { |
present_flags_.Add(value->gvn_flags()); |
- Insert(value); |
+ Insert(value, zone); |
} |
HValue* Lookup(HValue* value) const; |
@@ -1221,9 +1228,9 @@ class HValueMap: public ZoneObject { |
HValueMap(Zone* zone, const HValueMap* other); |
- void Resize(int new_size); |
- void ResizeLists(int new_size); |
- void Insert(HValue* value); |
+ void Resize(int new_size, Zone* zone); |
+ void ResizeLists(int new_size, Zone* zone); |
+ void Insert(HValue* value, Zone* zone); |
uint32_t Bound(uint32_t value) const { return value & (array_size_ - 1); } |
int array_size_; |
@@ -1376,7 +1383,7 @@ class HTracer: public Malloced { |
WriteChars(filename, "", 0, false); |
} |
- void TraceLiveRange(LiveRange* range, const char* type); |
+ void TraceLiveRange(LiveRange* range, const char* type, Zone* zone); |
void Trace(const char* name, HGraph* graph, LChunk* chunk); |
void FlushToFile(); |