Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index de9b49abbf21fce9f433e5bef21a3eed824cbe3d..4e00ba6907fd60f59e25f0570c812b6727ad30ec 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -815,9 +815,8 @@ void HGraphBuilder::IfBuilder::Then() { |
HConstant* constant_false = builder_->graph()->GetConstantFalse(); |
ToBooleanStub::Types boolean_type = ToBooleanStub::Types(); |
boolean_type.Add(ToBooleanStub::BOOLEAN); |
- HBranch* branch = |
- new(zone()) HBranch(constant_false, boolean_type, first_true_block_, |
- first_false_block_); |
+ HBranch* branch = builder()->New<HBranch>( |
+ constant_false, boolean_type, first_true_block_, first_false_block_); |
builder_->current_block()->Finish(branch); |
} |
builder_->set_current_block(first_true_block_); |
@@ -949,11 +948,8 @@ HValue* HGraphBuilder::LoopBuilder::BeginBody( |
builder_->set_current_block(header_block_); |
env->Pop(); |
- HCompareNumericAndBranch* compare = |
- new(zone()) HCompareNumericAndBranch(phi_, terminating, token); |
- compare->SetSuccessorAt(0, body_block_); |
- compare->SetSuccessorAt(1, exit_block_); |
- builder_->current_block()->Finish(compare); |
+ builder_->current_block()->Finish(builder_->New<HCompareNumericAndBranch>( |
+ phi_, terminating, token, body_block_, exit_block_)); |
builder_->set_current_block(body_block_); |
if (direction_ == kPreIncrement || direction_ == kPreDecrement) { |
@@ -2772,8 +2768,8 @@ void TestContext::BuildBranch(HValue* value) { |
HBasicBlock* empty_true = builder->graph()->CreateBasicBlock(); |
HBasicBlock* empty_false = builder->graph()->CreateBasicBlock(); |
ToBooleanStub::Types expected(condition()->to_boolean_types()); |
- HBranch* test = new(zone()) HBranch(value, expected, empty_true, empty_false); |
- builder->current_block()->Finish(test); |
+ builder->current_block()->Finish(builder->New<HBranch>( |
+ value, expected, empty_true, empty_false)); |
empty_true->Goto(if_true(), builder->function_state()); |
empty_false->Goto(if_false(), builder->function_state()); |
@@ -3374,12 +3370,10 @@ void HOptimizedGraphBuilder::VisitSwitchStatement(SwitchStatement* stmt) { |
// Test switch's tag value if all clauses are string literals |
if (stmt->switch_type() == SwitchStatement::STRING_SWITCH) { |
- string_check = new(zone()) HIsStringAndBranch(tag_value); |
first_test_block = graph()->CreateBasicBlock(); |
not_string_block = graph()->CreateBasicBlock(); |
- |
- string_check->SetSuccessorAt(0, first_test_block); |
- string_check->SetSuccessorAt(1, not_string_block); |
+ string_check = New<HIsStringAndBranch>( |
+ tag_value, first_test_block, not_string_block); |
current_block()->Finish(string_check); |
set_current_block(first_test_block); |
@@ -3409,9 +3403,9 @@ void HOptimizedGraphBuilder::VisitSwitchStatement(SwitchStatement* stmt) { |
} |
HCompareNumericAndBranch* compare_ = |
- new(zone()) HCompareNumericAndBranch(tag_value, |
- label_value, |
- Token::EQ_STRICT); |
+ New<HCompareNumericAndBranch>(tag_value, |
+ label_value, |
+ Token::EQ_STRICT); |
compare_->set_observed_input_representation( |
Representation::Smi(), Representation::Smi()); |
compare = compare_; |
@@ -3695,7 +3689,7 @@ void HOptimizedGraphBuilder::VisitForInStatement(ForInStatement* stmt) { |
// Check that we still have more keys. |
HCompareNumericAndBranch* compare_index = |
- new(zone()) HCompareNumericAndBranch(index, limit, Token::LT); |
+ New<HCompareNumericAndBranch>(index, limit, Token::LT); |
compare_index->set_observed_input_representation( |
Representation::Smi(), Representation::Smi()); |
@@ -4710,7 +4704,7 @@ void HOptimizedGraphBuilder::HandlePolymorphicLoadNamedField( |
++count; |
HBasicBlock* if_true = graph()->CreateBasicBlock(); |
HBasicBlock* if_false = graph()->CreateBasicBlock(); |
- HCompareMap* compare = new(zone()) HCompareMap( |
+ HCompareMap* compare = New<HCompareMap>( |
object, info.map(), if_true, if_false); |
current_block()->Finish(compare); |
@@ -4849,8 +4843,7 @@ void HOptimizedGraphBuilder::HandlePolymorphicStoreNamedField( |
++count; |
HBasicBlock* if_true = graph()->CreateBasicBlock(); |
HBasicBlock* if_false = graph()->CreateBasicBlock(); |
- HCompareMap* compare = |
- new(zone()) HCompareMap(object, map, if_true, if_false); |
+ HCompareMap* compare = New<HCompareMap>(object, map, if_true, if_false); |
current_block()->Finish(compare); |
set_current_block(if_true); |
@@ -5572,7 +5565,7 @@ HValue* HOptimizedGraphBuilder::HandlePolymorphicElementAccess( |
HBasicBlock* this_map = graph()->CreateBasicBlock(); |
HBasicBlock* other_map = graph()->CreateBasicBlock(); |
HCompareMap* mapcompare = |
- new(zone()) HCompareMap(object, map, this_map, other_map); |
+ New<HCompareMap>(object, map, this_map, other_map); |
current_block()->Finish(mapcompare); |
set_current_block(this_map); |
@@ -6040,10 +6033,8 @@ void HOptimizedGraphBuilder::HandlePolymorphicCallNamed( |
HBasicBlock* empty_smi_block = graph()->CreateBasicBlock(); |
HBasicBlock* not_smi_block = graph()->CreateBasicBlock(); |
number_block = graph()->CreateBasicBlock(); |
- HIsSmiAndBranch* smicheck = new(zone()) HIsSmiAndBranch(receiver); |
- smicheck->SetSuccessorAt(0, empty_smi_block); |
- smicheck->SetSuccessorAt(1, not_smi_block); |
- current_block()->Finish(smicheck); |
+ current_block()->Finish(New<HIsSmiAndBranch>( |
+ receiver, empty_smi_block, not_smi_block)); |
empty_smi_block->Goto(number_block); |
set_current_block(not_smi_block); |
} else { |
@@ -6055,20 +6046,17 @@ void HOptimizedGraphBuilder::HandlePolymorphicCallNamed( |
HUnaryControlInstruction* compare; |
if (handle_smi && map.is_identical_to(number_marker_map)) { |
- compare = new(zone()) HCompareMap( |
- receiver, heap_number_map, if_true, if_false); |
+ compare = New<HCompareMap>(receiver, heap_number_map, if_true, if_false); |
map = initial_number_map; |
expr->set_number_check( |
Handle<JSObject>(JSObject::cast(map->prototype()))); |
} else if (map.is_identical_to(string_marker_map)) { |
- compare = new(zone()) HIsStringAndBranch(receiver); |
- compare->SetSuccessorAt(0, if_true); |
- compare->SetSuccessorAt(1, if_false); |
+ compare = New<HIsStringAndBranch>(receiver, if_true, if_false); |
map = initial_string_map; |
expr->set_string_check( |
Handle<JSObject>(JSObject::cast(map->prototype()))); |
} else { |
- compare = new(zone()) HCompareMap(receiver, map, if_true, if_false); |
+ compare = New<HCompareMap>(receiver, map, if_true, if_false); |
expr->set_map_check(); |
} |
@@ -7812,8 +7800,8 @@ void HOptimizedGraphBuilder::VisitLogicalExpression(BinaryOperation* expr) { |
HBasicBlock* eval_right = graph()->CreateBasicBlock(); |
ToBooleanStub::Types expected(expr->left()->to_boolean_types()); |
HBranch* test = is_logical_and |
- ? new(zone()) HBranch(left_value, expected, eval_right, empty_block) |
- : new(zone()) HBranch(left_value, expected, empty_block, eval_right); |
+ ? New<HBranch>(left_value, expected, eval_right, empty_block) |
+ : New<HBranch>(left_value, expected, empty_block, eval_right); |
current_block()->Finish(test); |
set_current_block(eval_right); |
@@ -8036,7 +8024,7 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) { |
BuildCheckHeapObject(right); |
AddInstruction(HCheckInstanceType::NewIsSpecObject(right, zone())); |
HCompareObjectEqAndBranch* result = |
- new(zone()) HCompareObjectEqAndBranch(left, right); |
+ New<HCompareObjectEqAndBranch>(left, right); |
result->set_position(expr->position()); |
return ast_context()->ReturnControl(result, expr->id()); |
} |
@@ -8051,7 +8039,7 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) { |
BuildCheckHeapObject(right); |
AddInstruction(HCheckInstanceType::NewIsInternalizedString(right, zone())); |
HCompareObjectEqAndBranch* result = |
- new(zone()) HCompareObjectEqAndBranch(left, right); |
+ New<HCompareObjectEqAndBranch>(left, right); |
result->set_position(expr->position()); |
return ast_context()->ReturnControl(result, expr->id()); |
} else { |
@@ -8064,7 +8052,7 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) { |
return ast_context()->ReturnInstruction(result, expr->id()); |
} else { |
HCompareNumericAndBranch* result = |
- new(zone()) HCompareNumericAndBranch(left, right, op); |
+ New<HCompareNumericAndBranch>(left, right, op); |
result->set_observed_input_representation(left_rep, right_rep); |
result->set_position(expr->position()); |
return ast_context()->ReturnControl(result, expr->id()); |
@@ -8506,7 +8494,7 @@ void HOptimizedGraphBuilder::GenerateIsSmi(CallRuntime* call) { |
ASSERT(call->arguments()->length() == 1); |
CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); |
HValue* value = Pop(); |
- HIsSmiAndBranch* result = new(zone()) HIsSmiAndBranch(value); |
+ HIsSmiAndBranch* result = New<HIsSmiAndBranch>(value); |
return ast_context()->ReturnControl(result, call->id()); |
} |
@@ -8567,7 +8555,7 @@ void HOptimizedGraphBuilder::GenerateIsObject(CallRuntime* call) { |
ASSERT(call->arguments()->length() == 1); |
CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); |
HValue* value = Pop(); |
- HIsObjectAndBranch* result = new(zone()) HIsObjectAndBranch(value); |
+ HIsObjectAndBranch* result = New<HIsObjectAndBranch>(value); |
return ast_context()->ReturnControl(result, call->id()); |
} |
@@ -8581,8 +8569,7 @@ void HOptimizedGraphBuilder::GenerateIsUndetectableObject(CallRuntime* call) { |
ASSERT(call->arguments()->length() == 1); |
CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); |
HValue* value = Pop(); |
- HIsUndetectableAndBranch* result = |
- new(zone()) HIsUndetectableAndBranch(value); |
+ HIsUndetectableAndBranch* result = New<HIsUndetectableAndBranch>(value); |
return ast_context()->ReturnControl(result, call->id()); |
} |
@@ -8704,13 +8691,10 @@ void HOptimizedGraphBuilder::GenerateSetValueOf(CallRuntime* call) { |
HValue* value = Pop(); |
HValue* object = Pop(); |
// Check if object is a not a smi. |
- HIsSmiAndBranch* smicheck = new(zone()) HIsSmiAndBranch(object); |
HBasicBlock* if_smi = graph()->CreateBasicBlock(); |
HBasicBlock* if_heap_object = graph()->CreateBasicBlock(); |
HBasicBlock* join = graph()->CreateBasicBlock(); |
- smicheck->SetSuccessorAt(0, if_smi); |
- smicheck->SetSuccessorAt(1, if_heap_object); |
- current_block()->Finish(smicheck); |
+ current_block()->Finish(New<HIsSmiAndBranch>(object, if_smi, if_heap_object)); |
if_smi->Goto(join); |
// Check if object is a JSValue. |