| Index: src/x64/macro-assembler-x64.cc | 
| =================================================================== | 
| --- src/x64/macro-assembler-x64.cc	(revision 6919) | 
| +++ src/x64/macro-assembler-x64.cc	(working copy) | 
| @@ -136,7 +136,7 @@ | 
| Register value) { | 
| // The compiled code assumes that record write doesn't change the | 
| // context register, so we check that none of the clobbered | 
| -  // registers are esi. | 
| +  // registers are rsi. | 
| ASSERT(!object.is(rsi) && !value.is(rsi) && !address.is(rsi)); | 
|  | 
| // First, check if a write barrier is even needed. The tests below | 
| @@ -2531,10 +2531,22 @@ | 
| } | 
| // The context may be an intermediate context, not a function context. | 
| movq(dst, Operand(dst, Context::SlotOffset(Context::FCONTEXT_INDEX))); | 
| -  } else {  // context is the current function context. | 
| -    // The context may be an intermediate context, not a function context. | 
| -    movq(dst, Operand(rsi, Context::SlotOffset(Context::FCONTEXT_INDEX))); | 
| +  } else { | 
| +    // Slot is in the current function context.  Move it into the | 
| +    // destination register in case we store into it (the write barrier | 
| +    // cannot be allowed to destroy the context in rsi). | 
| +    movq(dst, rsi); | 
| } | 
| + | 
| +  // We should not have found a 'with' context by walking the context chain | 
| +  // (i.e., the static scope chain and runtime context chain do not agree). | 
| +  // A variable occurring in such a scope should have slot type LOOKUP and | 
| +  // not CONTEXT. | 
| +  if (FLAG_debug_code) { | 
| +    cmpq(dst, Operand(dst, Context::SlotOffset(Context::FCONTEXT_INDEX))); | 
| +    Check(equal, "Yo dawg, I heard you liked function contexts " | 
| +                 "so I put function contexts in all your contexts"); | 
| +  } | 
| } | 
|  | 
|  | 
|  |