| Index: src/full-codegen/full-codegen.cc
|
| diff --git a/src/full-codegen/full-codegen.cc b/src/full-codegen/full-codegen.cc
|
| index 1133cab4ac0655c21565b4e0290f323a8b70f698..ae8880ddae7fb0514f457020496cfb0380294c0e 100644
|
| --- a/src/full-codegen/full-codegen.cc
|
| +++ b/src/full-codegen/full-codegen.cc
|
| @@ -1027,7 +1027,11 @@ void FullCodeGenerator::EmitUnwindAndReturn() {
|
| }
|
|
|
| void FullCodeGenerator::EmitNewClosure(Handle<SharedFunctionInfo> info,
|
| + FeedbackVectorSlot slot,
|
| bool pretenure) {
|
| + // If slot is invalid, then it's a native function literal and we
|
| + // can pass the empty array or empty literal array, something like that...
|
| +
|
| // If we're running with the --always-opt or the --prepare-always-opt
|
| // flag, we need to use the runtime function so that the new function
|
| // we are creating here gets a chance to have its code optimized and
|
| @@ -1036,9 +1040,17 @@ void FullCodeGenerator::EmitNewClosure(Handle<SharedFunctionInfo> info,
|
| scope()->is_function_scope()) {
|
| FastNewClosureStub stub(isolate());
|
| __ Move(stub.GetCallInterfaceDescriptor().GetRegisterParameter(0), info);
|
| + DCHECK(!slot.IsInvalid());
|
| + __ EmitLoadTypeFeedbackVector(
|
| + stub.GetCallInterfaceDescriptor().GetRegisterParameter(1));
|
| + __ Move(stub.GetCallInterfaceDescriptor().GetRegisterParameter(2),
|
| + SmiFromSlot(slot));
|
| __ CallStub(&stub);
|
| } else {
|
| __ Push(info);
|
| + __ EmitLoadTypeFeedbackVector(result_register());
|
| + __ Push(result_register());
|
| + __ Push(SmiFromSlot(slot));
|
| __ CallRuntime(pretenure ? Runtime::kNewClosure_Tenured
|
| : Runtime::kNewClosure);
|
| }
|
| @@ -1300,7 +1312,7 @@ void FullCodeGenerator::VisitFunctionLiteral(FunctionLiteral* expr) {
|
| SetStackOverflow();
|
| return;
|
| }
|
| - EmitNewClosure(function_info, expr->pretenure());
|
| + EmitNewClosure(function_info, expr->LiteralFeedbackSlot(), expr->pretenure());
|
| }
|
|
|
|
|
| @@ -1333,7 +1345,7 @@ void FullCodeGenerator::VisitNativeFunctionLiteral(
|
| Comment cmnt(masm_, "[ NativeFunctionLiteral");
|
| Handle<SharedFunctionInfo> shared =
|
| Compiler::GetSharedFunctionInfoForNative(expr->extension(), expr->name());
|
| - EmitNewClosure(shared, false);
|
| + EmitNewClosure(shared, expr->LiteralFeedbackSlot(), false);
|
| }
|
|
|
|
|
|
|