| Index: runtime/vm/flow_graph_compiler_mips.cc | 
| =================================================================== | 
| --- runtime/vm/flow_graph_compiler_mips.cc	(revision 41393) | 
| +++ runtime/vm/flow_graph_compiler_mips.cc	(working copy) | 
| @@ -1102,16 +1102,41 @@ | 
| CopyParameters(); | 
| } | 
|  | 
| +  if (function.IsClosureFunction() && !flow_graph().IsCompiledForOsr()) { | 
| +    // Load context from the closure object (first argument). | 
| +    LocalScope* scope = parsed_function().node_sequence()->scope(); | 
| +    LocalVariable* closure_parameter = scope->VariableAt(0); | 
| +    __ lw(CTX, Address(FP, closure_parameter->index() * kWordSize)); | 
| +    __ lw(CTX, FieldAddress(CTX, Closure::context_offset())); | 
| +  } | 
| + | 
| // In unoptimized code, initialize (non-argument) stack allocated slots to | 
| // null. | 
| -  if (!is_optimizing() && (num_locals > 0)) { | 
| +  if (!is_optimizing()) { | 
| +    ASSERT(num_locals > 0);  // There is always at least context_var. | 
| __ TraceSimMsg("Initialize spill slots"); | 
| __ Comment("Initialize spill slots"); | 
| const intptr_t slot_base = parsed_function().first_stack_local_index(); | 
| +    const intptr_t context_index = | 
| +        parsed_function().current_context_var()->index(); | 
| +    if (num_locals > 1) { | 
| +      __ LoadImmediate(V0, reinterpret_cast<int32_t>(Object::null())); | 
| +    } | 
| for (intptr_t i = 0; i < num_locals; ++i) { | 
| // Subtract index i (locals lie at lower addresses than FP). | 
| -      __ LoadImmediate(TMP, reinterpret_cast<int32_t>(Object::null())); | 
| -      __ sw(TMP, Address(FP, (slot_base - i) * kWordSize)); | 
| +      if (((slot_base - i) == context_index)) { | 
| +        if (function.IsClosureFunction()) { | 
| +          __ sw(CTX, Address(FP, (slot_base - i) * kWordSize)); | 
| +        } else { | 
| +          const Context& empty_context = Context::ZoneHandle( | 
| +              isolate(), isolate()->object_store()->empty_context()); | 
| +          __ LoadObject(V1, empty_context); | 
| +          __ sw(V1, Address(FP, (slot_base - i) * kWordSize)); | 
| +        } | 
| +      } else { | 
| +        ASSERT(num_locals > 1); | 
| +        __ sw(V0, Address(FP, (slot_base - i) * kWordSize)); | 
| +      } | 
| } | 
| } | 
|  | 
|  |