| Index: src/contexts.cc
 | 
| diff --git a/src/contexts.cc b/src/contexts.cc
 | 
| index a008d49ac37ebfdf9e47cdcb995eac2fba591918..a18f181bef8ccb3e0ca80d43dc5a1f3107105d73 100644
 | 
| --- a/src/contexts.cc
 | 
| +++ b/src/contexts.cc
 | 
| @@ -264,7 +264,8 @@ Handle<Object> Context::Lookup(Handle<String> name,
 | 
|      }
 | 
|  
 | 
|      // 1. Check global objects, subjects of with, and extension objects.
 | 
| -    if ((context->IsNativeContext() || context->IsWithContext() ||
 | 
| +    if ((context->IsNativeContext() ||
 | 
| +         (context->IsWithContext() && ((flags & SKIP_WITH_CONTEXT) == 0)) ||
 | 
|           context->IsFunctionContext() || context->IsBlockContext()) &&
 | 
|          context->extension_receiver() != nullptr) {
 | 
|        Handle<JSReceiver> object(context->extension_receiver());
 | 
| @@ -384,7 +385,9 @@ Handle<Object> Context::Lookup(Handle<String> name,
 | 
|      }
 | 
|  
 | 
|      // 3. Prepare to continue with the previous (next outermost) context.
 | 
| -    if (context->IsNativeContext()) {
 | 
| +    if (context->IsNativeContext() ||
 | 
| +        ((flags & STOP_AT_DECLARATION_SCOPE) != 0 &&
 | 
| +         context->is_declaration_context())) {
 | 
|        follow_context_chain = false;
 | 
|      } else {
 | 
|        context = Handle<Context>(context->previous(), isolate);
 | 
| 
 |