Index: src/arm/codegen-arm.cc |
=================================================================== |
--- src/arm/codegen-arm.cc (revision 5865) |
+++ src/arm/codegen-arm.cc (working copy) |
@@ -3103,10 +3103,13 @@ |
void CodeGenerator::InstantiateFunction( |
- Handle<SharedFunctionInfo> function_info) { |
+ Handle<SharedFunctionInfo> function_info, |
+ bool pretenure) { |
Søren Thygesen Gjesse
2010/11/19 13:31:04
bool -> PretenureFlag?
Mads Ager (chromium)
2010/11/22 09:56:24
Right. I didn't find a better way of doing this. I
|
// Use the fast case closure allocation code that allocates in new |
// space for nested functions that don't need literals cloning. |
- if (scope()->is_function_scope() && function_info->num_literals() == 0) { |
+ if (scope()->is_function_scope() && |
+ function_info->num_literals() == 0 && |
+ !pretenure) { |
FastNewClosureStub stub; |
frame_->EmitPush(Operand(function_info)); |
frame_->SpillAll(); |
@@ -3116,7 +3119,10 @@ |
// Create a new closure. |
frame_->EmitPush(cp); |
frame_->EmitPush(Operand(function_info)); |
- frame_->CallRuntime(Runtime::kNewClosure, 2); |
+ frame_->EmitPush(Operand(pretenure |
+ ? Factory::true_value() |
+ : Factory::false_value())); |
+ frame_->CallRuntime(Runtime::kNewClosure, 3); |
frame_->EmitPush(r0); |
} |
} |
@@ -3136,7 +3142,7 @@ |
ASSERT(frame_->height() == original_height); |
return; |
} |
- InstantiateFunction(function_info); |
+ InstantiateFunction(function_info, node->pretenure()); |
ASSERT_EQ(original_height + 1, frame_->height()); |
} |
@@ -3147,7 +3153,7 @@ |
int original_height = frame_->height(); |
#endif |
Comment cmnt(masm_, "[ SharedFunctionInfoLiteral"); |
- InstantiateFunction(node->shared_function_info()); |
+ InstantiateFunction(node->shared_function_info(), false); |
ASSERT_EQ(original_height + 1, frame_->height()); |
} |