| Index: src/codegen-ia32.cc
|
| ===================================================================
|
| --- src/codegen-ia32.cc (revision 1298)
|
| +++ src/codegen-ia32.cc (working copy)
|
| @@ -455,16 +455,17 @@
|
| Label* slow) {
|
| ASSERT(slot->type() == Slot::CONTEXT);
|
| int index = slot->index();
|
| - __ mov(tmp, Operand(esi));
|
| + Register context = esi;
|
| for (Scope* s = scope(); s != slot->var()->scope(); s = s->outer_scope()) {
|
| if (s->num_heap_slots() > 0) {
|
| if (s->calls_eval()) {
|
| // Check that extension is NULL.
|
| - __ cmp(ContextOperand(tmp, Context::EXTENSION_INDEX), Immediate(0));
|
| + __ cmp(ContextOperand(context, Context::EXTENSION_INDEX), Immediate(0));
|
| __ j(not_equal, slow, not_taken);
|
| }
|
| - __ mov(tmp, ContextOperand(tmp, Context::CLOSURE_INDEX));
|
| + __ mov(tmp, ContextOperand(context, Context::CLOSURE_INDEX));
|
| __ mov(tmp, FieldOperand(tmp, JSFunction::kContextOffset));
|
| + context = tmp;
|
| }
|
| }
|
| // Check that last extension is NULL.
|
| @@ -2412,17 +2413,18 @@
|
| Label* slow) {
|
| // Check that no extension objects have been created by calls to
|
| // eval from the current scope to the global scope.
|
| - __ mov(tmp, Operand(esi));
|
| + Register context = esi;
|
| for (Scope* s = scope(); s != NULL; s = s->outer_scope()) {
|
| if (s->num_heap_slots() > 0) {
|
| if (s->calls_eval()) {
|
| // Check that extension is NULL.
|
| - __ cmp(ContextOperand(tmp, Context::EXTENSION_INDEX), Immediate(0));
|
| + __ cmp(ContextOperand(context, Context::EXTENSION_INDEX), Immediate(0));
|
| __ j(not_equal, slow, not_taken);
|
| }
|
| // Load next context in chain.
|
| - __ mov(tmp, ContextOperand(tmp, Context::CLOSURE_INDEX));
|
| + __ mov(tmp, ContextOperand(context, Context::CLOSURE_INDEX));
|
| __ mov(tmp, FieldOperand(tmp, JSFunction::kContextOffset));
|
| + context = tmp;
|
| }
|
| // If no outer scope calls eval, we do not need to check more
|
| // context extensions.
|
|
|