| Index: src/interpreter/interpreter.cc | 
| diff --git a/src/interpreter/interpreter.cc b/src/interpreter/interpreter.cc | 
| index d1fb1b1711e5bfe53ed7837a82f28a350b2d45a8..6b8f9094021829ba505177c7a72abf62685eb338 100644 | 
| --- a/src/interpreter/interpreter.cc | 
| +++ b/src/interpreter/interpreter.cc | 
| @@ -1709,39 +1709,41 @@ void Interpreter::DoReturn(compiler::InterpreterAssembler* assembler) { | 
| } | 
|  | 
|  | 
| -// ForInPrepare <cache_type> <cache_array> <cache_length> | 
| +// ForInPrepare <cache_info_triple> | 
| // | 
| // Returns state for for..in loop execution based on the object in the | 
| -// accumulator. The registers |cache_type|, |cache_array|, and | 
| -// |cache_length| represent output parameters. | 
| +// accumulator. The result is output in registers |cache_info_triple| to | 
| +// |cache_info_triple + 2|, with the registers holding cache_type, cache_array, | 
| +// and cache_length respectively. | 
| void Interpreter::DoForInPrepare(compiler::InterpreterAssembler* assembler) { | 
| Node* object = __ GetAccumulator(); | 
| Node* result_triple = __ CallRuntime(Runtime::kForInPrepare, object); | 
|  | 
| // Set output registers: | 
| //   0 == cache_type, 1 == cache_array, 2 == cache_length | 
| +  Node* output_register = __ BytecodeOperandReg(0); | 
| for (int i = 0; i < 3; i++) { | 
| Node* cache_info = __ Projection(i, result_triple); | 
| -    Node* cache_info_reg = __ BytecodeOperandReg(i); | 
| -    __ StoreRegister(cache_info, cache_info_reg); | 
| +    __ StoreRegister(cache_info, output_register); | 
| +    output_register = __ NextRegister(output_register); | 
| } | 
|  | 
| __ Dispatch(); | 
| } | 
|  | 
|  | 
| -// ForInNext <receiver> <cache_type> <cache_array> <index> | 
| +// ForInNext <receiver> <index> <cache_info_pair> | 
| // | 
| // Returns the next enumerable property in the the accumulator. | 
| void Interpreter::DoForInNext(compiler::InterpreterAssembler* assembler) { | 
| Node* receiver_reg = __ BytecodeOperandReg(0); | 
| Node* receiver = __ LoadRegister(receiver_reg); | 
| -  Node* cache_type_reg = __ BytecodeOperandReg(1); | 
| +  Node* index_reg = __ BytecodeOperandReg(1); | 
| +  Node* index = __ LoadRegister(index_reg); | 
| +  Node* cache_type_reg = __ BytecodeOperandReg(2); | 
| Node* cache_type = __ LoadRegister(cache_type_reg); | 
| -  Node* cache_array_reg = __ BytecodeOperandReg(2); | 
| +  Node* cache_array_reg = __ NextRegister(cache_type_reg); | 
| Node* cache_array = __ LoadRegister(cache_array_reg); | 
| -  Node* index_reg = __ BytecodeOperandReg(3); | 
| -  Node* index = __ LoadRegister(index_reg); | 
| Node* result = __ CallRuntime(Runtime::kForInNext, receiver, cache_array, | 
| cache_type, index); | 
| __ SetAccumulator(result); | 
|  |