Index: src/hydrogen.h |
diff --git a/src/hydrogen.h b/src/hydrogen.h |
index 0837bf9634e33cc088a7a8dea90e479161c65902..98b05d147a290d67e10cbe57daae8bc2f73b02ea 100644 |
--- a/src/hydrogen.h |
+++ b/src/hydrogen.h |
@@ -429,8 +429,7 @@ enum FrameType { |
JS_CONSTRUCT, |
JS_GETTER, |
JS_SETTER, |
- ARGUMENTS_ADAPTOR, |
- STUB |
+ ARGUMENTS_ADAPTOR |
}; |
@@ -441,8 +440,6 @@ class HEnvironment: public ZoneObject { |
Handle<JSFunction> closure, |
Zone* zone); |
- explicit HEnvironment(Zone* zone); |
- |
HEnvironment* arguments_environment() { |
return outer()->frame_type() == ARGUMENTS_ADAPTOR ? outer() : this; |
} |
@@ -639,7 +636,7 @@ class HInferRepresentation BASE_EMBEDDED { |
}; |
-class HOptimizedGraphBuilder; |
+class HGraphBuilder; |
enum ArgumentsAllowedFlag { |
ARGUMENTS_NOT_ALLOWED, |
@@ -675,10 +672,10 @@ class AstContext { |
bool is_for_typeof() { return for_typeof_; } |
protected: |
- AstContext(HOptimizedGraphBuilder* owner, Expression::Context kind); |
+ AstContext(HGraphBuilder* owner, Expression::Context kind); |
virtual ~AstContext(); |
- HOptimizedGraphBuilder* owner() const { return owner_; } |
+ HGraphBuilder* owner() const { return owner_; } |
inline Zone* zone() const; |
@@ -689,7 +686,7 @@ class AstContext { |
#endif |
private: |
- HOptimizedGraphBuilder* owner_; |
+ HGraphBuilder* owner_; |
Expression::Context kind_; |
AstContext* outer_; |
bool for_typeof_; |
@@ -698,7 +695,7 @@ class AstContext { |
class EffectContext: public AstContext { |
public: |
- explicit EffectContext(HOptimizedGraphBuilder* owner) |
+ explicit EffectContext(HGraphBuilder* owner) |
: AstContext(owner, Expression::kEffect) { |
} |
virtual ~EffectContext(); |
@@ -711,7 +708,7 @@ class EffectContext: public AstContext { |
class ValueContext: public AstContext { |
public: |
- ValueContext(HOptimizedGraphBuilder* owner, ArgumentsAllowedFlag flag) |
+ explicit ValueContext(HGraphBuilder* owner, ArgumentsAllowedFlag flag) |
: AstContext(owner, Expression::kValue), flag_(flag) { |
} |
virtual ~ValueContext(); |
@@ -729,7 +726,7 @@ class ValueContext: public AstContext { |
class TestContext: public AstContext { |
public: |
- TestContext(HOptimizedGraphBuilder* owner, |
+ TestContext(HGraphBuilder* owner, |
Expression* condition, |
TypeFeedbackOracle* oracle, |
HBasicBlock* if_true, |
@@ -769,7 +766,7 @@ class TestContext: public AstContext { |
class FunctionState { |
public: |
- FunctionState(HOptimizedGraphBuilder* owner, |
+ FunctionState(HGraphBuilder* owner, |
CompilationInfo* info, |
TypeFeedbackOracle* oracle, |
InliningKind inlining_kind); |
@@ -799,7 +796,7 @@ class FunctionState { |
bool arguments_pushed() { return arguments_elements() != NULL; } |
private: |
- HOptimizedGraphBuilder* owner_; |
+ HGraphBuilder* owner_; |
CompilationInfo* compilation_info_; |
TypeFeedbackOracle* oracle_; |
@@ -831,65 +828,7 @@ class FunctionState { |
}; |
-class HGraphBuilder { |
- public: |
- explicit HGraphBuilder(CompilationInfo* info) |
- : info_(info), graph_(NULL), current_block_(NULL) {} |
- virtual ~HGraphBuilder() {} |
- |
- HBasicBlock* current_block() const { return current_block_; } |
- void set_current_block(HBasicBlock* block) { current_block_ = block; } |
- HEnvironment* environment() const { |
- return current_block()->last_environment(); |
- } |
- Zone* zone() const { return info_->zone(); } |
- HGraph* graph() { return graph_; } |
- |
- HGraph* CreateGraph(); |
- |
- // Adding instructions. |
- HInstruction* AddInstruction(HInstruction* instr); |
- void AddSimulate(BailoutId id, |
- RemovableSimulate removable = FIXED_SIMULATE); |
- |
- protected: |
- virtual bool BuildGraph() = 0; |
- |
- // Building common constructs |
- HInstruction* BuildExternalArrayElementAccess( |
- HValue* external_elements, |
- HValue* checked_key, |
- HValue* val, |
- HValue* dependency, |
- ElementsKind elements_kind, |
- bool is_store); |
- |
- HInstruction* BuildFastElementAccess( |
- HValue* elements, |
- HValue* checked_key, |
- HValue* val, |
- HValue* dependency, |
- ElementsKind elements_kind, |
- bool is_store); |
- |
- HInstruction* BuildUncheckedMonomorphicElementAccess( |
- HValue* object, |
- HValue* key, |
- HValue* val, |
- HCheckMaps* mapcheck, |
- bool is_js_array, |
- ElementsKind elements_kind, |
- bool is_store); |
- |
- private: |
- HGraphBuilder(); |
- CompilationInfo* info_; |
- HGraph* graph_; |
- HBasicBlock* current_block_; |
-}; |
- |
- |
-class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor { |
+class HGraphBuilder: public AstVisitor { |
public: |
enum BreakType { BREAK, CONTINUE }; |
enum SwitchType { UNKNOWN_SWITCH, SMI_SWITCH, STRING_SWITCH }; |
@@ -925,8 +864,7 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor { |
// structures mirroring BreakableStatement nesting. |
class BreakAndContinueScope BASE_EMBEDDED { |
public: |
- BreakAndContinueScope(BreakAndContinueInfo* info, |
- HOptimizedGraphBuilder* owner) |
+ BreakAndContinueScope(BreakAndContinueInfo* info, HGraphBuilder* owner) |
: info_(info), owner_(owner), next_(owner->break_scope()) { |
owner->set_break_scope(this); |
} |
@@ -934,7 +872,7 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor { |
~BreakAndContinueScope() { owner_->set_break_scope(next_); } |
BreakAndContinueInfo* info() { return info_; } |
- HOptimizedGraphBuilder* owner() { return owner_; } |
+ HGraphBuilder* owner() { return owner_; } |
BreakAndContinueScope* next() { return next_; } |
// Search the break stack for a break or continue target. |
@@ -942,20 +880,32 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor { |
private: |
BreakAndContinueInfo* info_; |
- HOptimizedGraphBuilder* owner_; |
+ HGraphBuilder* owner_; |
BreakAndContinueScope* next_; |
}; |
- HOptimizedGraphBuilder(CompilationInfo* info, TypeFeedbackOracle* oracle); |
+ HGraphBuilder(CompilationInfo* info, TypeFeedbackOracle* oracle); |
- virtual bool BuildGraph(); |
+ HGraph* CreateGraph(); |
// Simple accessors. |
+ HGraph* graph() const { return graph_; } |
BreakAndContinueScope* break_scope() const { return break_scope_; } |
void set_break_scope(BreakAndContinueScope* head) { break_scope_ = head; } |
+ HBasicBlock* current_block() const { return current_block_; } |
+ void set_current_block(HBasicBlock* block) { current_block_ = block; } |
+ HEnvironment* environment() const { |
+ return current_block()->last_environment(); |
+ } |
+ |
bool inline_bailout() { return inline_bailout_; } |
+ // Adding instructions. |
+ HInstruction* AddInstruction(HInstruction* instr); |
+ void AddSimulate(BailoutId ast_id, |
+ RemovableSimulate removable = FIXED_SIMULATE); |
+ |
// Bailout environment manipulation. |
void Push(HValue* value) { environment()->Push(value); } |
HValue* Pop() { return environment()->Pop(); } |
@@ -978,12 +928,9 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor { |
void operator delete(void* pointer, Zone* zone) { } |
void operator delete(void* pointer) { } |
- DEFINE_AST_VISITOR_SUBCLASS_MEMBERS(); |
- |
private: |
// Type of a member function that generates inline code for a native function. |
- typedef void (HOptimizedGraphBuilder::*InlineFunctionGenerator) |
- (CallRuntime* call); |
+ typedef void (HGraphBuilder::*InlineFunctionGenerator)(CallRuntime* call); |
// Forward declarations for inner scope classes. |
class SubgraphScope; |
@@ -1192,14 +1139,25 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor { |
HValue* right); |
HInstruction* BuildIncrement(bool returns_original_input, |
CountOperation* expr); |
- HInstruction* BuildLoadKeyedGeneric(HValue* object, |
- HValue* key); |
+ HInstruction* BuildFastElementAccess(HValue* elements, |
+ HValue* checked_key, |
+ HValue* val, |
+ HValue* dependency, |
+ ElementsKind elements_kind, |
+ bool is_store); |
HInstruction* TryBuildConsolidatedElementLoad(HValue* object, |
HValue* key, |
HValue* val, |
SmallMapList* maps); |
+ HInstruction* BuildUncheckedMonomorphicElementAccess(HValue* object, |
+ HValue* key, |
+ HValue* val, |
+ HCheckMaps* mapcheck, |
+ Handle<Map> map, |
+ bool is_store); |
+ |
HInstruction* BuildMonomorphicElementAccess(HValue* object, |
HValue* key, |
HValue* val, |
@@ -1239,6 +1197,14 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor { |
Handle<String> name, |
Property* expr, |
Handle<Map> map); |
+ HInstruction* BuildLoadKeyedGeneric(HValue* object, HValue* key); |
+ HInstruction* BuildExternalArrayElementAccess( |
+ HValue* external_elements, |
+ HValue* checked_key, |
+ HValue* val, |
+ HValue* dependency, |
+ ElementsKind elements_kind, |
+ bool is_store); |
void AddCheckMapsWithTransitions(HValue* object, |
Handle<Map> map); |
@@ -1280,6 +1246,8 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor { |
HValue** operand, |
HValue** shift_amount); |
+ Zone* zone() const { return zone_; } |
+ |
// The translation state of the currently-being-translated function. |
FunctionState* function_state_; |
@@ -1293,16 +1261,20 @@ class HOptimizedGraphBuilder: public HGraphBuilder, public AstVisitor { |
// A stack of breakable statements entered. |
BreakAndContinueScope* break_scope_; |
+ HGraph* graph_; |
+ HBasicBlock* current_block_; |
+ |
int inlined_count_; |
ZoneList<Handle<Object> > globals_; |
+ Zone* zone_; |
+ |
bool inline_bailout_; |
friend class FunctionState; // Pushes and pops the state stack. |
friend class AstContext; // Pushes and pops the AST context stack. |
- friend class KeyedLoadFastElementStub; |
- DISALLOW_COPY_AND_ASSIGN(HOptimizedGraphBuilder); |
+ DISALLOW_COPY_AND_ASSIGN(HGraphBuilder); |
}; |
@@ -1475,7 +1447,7 @@ class HPhase BASE_EMBEDDED { |
class HTracer: public Malloced { |
public: |
- void TraceCompilation(CompilationInfo* info); |
+ void TraceCompilation(FunctionLiteral* function); |
void TraceHydrogen(const char* name, HGraph* graph); |
void TraceLithium(const char* name, LChunk* chunk); |
void TraceLiveRanges(const char* name, LAllocator* allocator); |