| Index: src/full-codegen/mips64/full-codegen-mips64.cc
|
| diff --git a/src/full-codegen/mips64/full-codegen-mips64.cc b/src/full-codegen/mips64/full-codegen-mips64.cc
|
| index eaae5268ee6dbb652ff6b8f2eba86f2942c25f9b..0c09bdf176cc986770beb1fdf0bbe9a11822dcf6 100644
|
| --- a/src/full-codegen/mips64/full-codegen-mips64.cc
|
| +++ b/src/full-codegen/mips64/full-codegen-mips64.cc
|
| @@ -1180,23 +1180,19 @@ void FullCodeGenerator::EmitLoadGlobalCheckExtensions(VariableProxy* proxy,
|
| Register next = a1;
|
| Register temp = a2;
|
|
|
| - Scope* s = scope();
|
| - while (s != NULL) {
|
| - if (s->num_heap_slots() > 0) {
|
| - if (s->calls_sloppy_eval()) {
|
| - // Check that extension is "the hole".
|
| - __ ld(temp, ContextMemOperand(current, Context::EXTENSION_INDEX));
|
| - __ JumpIfNotRoot(temp, Heap::kTheHoleValueRootIndex, slow);
|
| - }
|
| - // Load next context in chain.
|
| - __ ld(next, ContextMemOperand(current, Context::PREVIOUS_INDEX));
|
| - // Walk the rest of the chain without clobbering cp.
|
| - current = next;
|
| - }
|
| - // If no outer scope calls eval, we do not need to check more
|
| - // context extensions.
|
| - if (!s->outer_scope_calls_sloppy_eval()) break;
|
| - s = s->outer_scope();
|
| + int to_check = scope()->ContextChainLengthUntilOutermostSloppyEval();
|
| + for (Scope* s = scope(); to_check > 0; s = s->outer_scope()) {
|
| + if (!s->NeedsContext()) continue;
|
| + if (s->calls_sloppy_eval()) {
|
| + // Check that extension is "the hole".
|
| + __ ld(temp, ContextMemOperand(current, Context::EXTENSION_INDEX));
|
| + __ JumpIfNotRoot(temp, Heap::kTheHoleValueRootIndex, slow);
|
| + }
|
| + // Load next context in chain.
|
| + __ ld(next, ContextMemOperand(current, Context::PREVIOUS_INDEX));
|
| + // Walk the rest of the chain without clobbering cp.
|
| + current = next;
|
| + to_check--;
|
| }
|
|
|
| // All extension objects were empty and it is safe to use a normal global
|
|
|