Index: src/full-codegen/s390/full-codegen-s390.cc |
diff --git a/src/full-codegen/s390/full-codegen-s390.cc b/src/full-codegen/s390/full-codegen-s390.cc |
index 80996221600e3dab001ba53e7ba9980ad1871165..003c9312e43f9818daab1346ffd128af33f3191c 100644 |
--- a/src/full-codegen/s390/full-codegen-s390.cc |
+++ b/src/full-codegen/s390/full-codegen-s390.cc |
@@ -1115,23 +1115,19 @@ void FullCodeGenerator::EmitLoadGlobalCheckExtensions(VariableProxy* proxy, |
Register next = r3; |
Register temp = r4; |
- Scope* s = scope(); |
- while (s != NULL) { |
- if (s->num_heap_slots() > 0) { |
- if (s->calls_sloppy_eval()) { |
- // Check that extension is "the hole". |
- __ LoadP(temp, ContextMemOperand(current, Context::EXTENSION_INDEX)); |
- __ JumpIfNotRoot(temp, Heap::kTheHoleValueRootIndex, slow); |
- } |
- // Load next context in chain. |
- __ LoadP(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". |
+ __ LoadP(temp, ContextMemOperand(current, Context::EXTENSION_INDEX)); |
+ __ JumpIfNotRoot(temp, Heap::kTheHoleValueRootIndex, slow); |
+ } |
+ // Load next context in chain. |
+ __ LoadP(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 |