Index: src/x64/full-codegen-x64.cc |
diff --git a/src/x64/full-codegen-x64.cc b/src/x64/full-codegen-x64.cc |
index 21ab4cb10e341ea97874a464f4192d45f7b02256..479405095a2c7c286d059ec0fdcfd203a97a47fe 100644 |
--- a/src/x64/full-codegen-x64.cc |
+++ b/src/x64/full-codegen-x64.cc |
@@ -4190,6 +4190,25 @@ void FullCodeGenerator::LoadContextField(Register dst, int context_index) { |
} |
+void FullCodeGenerator::PushFunctionArgumentForContextAllocation() { |
+ if (scope()->is_global_scope()) { |
+ // Contexts nested in the global context have a canonical empty function |
+ // as their closure, not the anonymous closure containing the global |
+ // code. Pass a smi sentinel and let the runtime look up the empty |
+ // function. |
+ __ Push(Smi::FromInt(0)); |
+ } else if (scope()->is_eval_scope()) { |
+ // Contexts created by a call to eval have the same closure as the |
+ // context calling eval, not the anonymous closure containing the eval |
+ // code. Fetch it from the context. |
+ __ push(ContextOperand(rsi, Context::CLOSURE_INDEX)); |
+ } else { |
+ ASSERT(scope()->is_function_scope()); |
+ __ push(Operand(rbp, JavaScriptFrameConstants::kFunctionOffset)); |
+ } |
+} |
+ |
+ |
// ---------------------------------------------------------------------------- |
// Non-local control flow support. |