Index: src/mips/full-codegen-mips.cc |
diff --git a/src/mips/full-codegen-mips.cc b/src/mips/full-codegen-mips.cc |
index b1b3d8410e826142ededf19646eb6484d4046121..0762886289e5e832dd2bf271942672361774fe0a 100644 |
--- a/src/mips/full-codegen-mips.cc |
+++ b/src/mips/full-codegen-mips.cc |
@@ -4245,6 +4245,26 @@ 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. |
+ __ li(at, Operand(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. |
+ __ lw(at, ContextOperand(cp, Context::CLOSURE_INDEX)); |
+ } else { |
+ ASSERT(scope()->is_function_scope()); |
+ __ lw(at, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); |
+ } |
+ __ push(at); |
+} |
+ |
+ |
// ---------------------------------------------------------------------------- |
// Non-local control flow support. |