Chromium Code Reviews| Index: src/contexts.cc |
| diff --git a/src/contexts.cc b/src/contexts.cc |
| index 3447b42f47dc32d3f37055fc36d9fa30f365ab43..71fe7a9b381c726266aff2560e0e7868ecb3394b 100644 |
| --- a/src/contexts.cc |
| +++ b/src/contexts.cc |
| @@ -227,6 +227,11 @@ Handle<Object> Context::Lookup(Handle<String> name, ContextLookupFlags flags, |
| (context->IsWithContext() && ((flags & SKIP_WITH_CONTEXT) == 0)) || |
| context->IsFunctionContext() || context->IsBlockContext()) && |
| context->extension_receiver() != nullptr) { |
| + // A dynamic context will never bind "this" or a synthetic variable; |
| + // scope analysis has already ensured that these are resolved |
| + // statically. |
| + DCHECK(!ScopeInfo::VariableIsSynthetic(*name)); |
|
adamk
2016/09/19 20:01:26
Looks like this is failing?
|
| + |
| Handle<JSReceiver> object(context->extension_receiver()); |
| if (context->IsNativeContext()) { |
| @@ -261,20 +266,15 @@ Handle<Object> Context::Lookup(Handle<String> name, ContextLookupFlags flags, |
| object->IsJSContextExtensionObject()) { |
| maybe = JSReceiver::GetOwnPropertyAttributes(object, name); |
| } else if (context->IsWithContext()) { |
| - // A with context will never bind "this". |
| - if (name->Equals(*isolate->factory()->this_string())) { |
| - maybe = Just(ABSENT); |
| + LookupIterator it(object, name, object); |
| + Maybe<bool> found = UnscopableLookup(&it); |
| + if (found.IsNothing()) { |
| + maybe = Nothing<PropertyAttributes>(); |
| } else { |
| - LookupIterator it(object, name, object); |
| - Maybe<bool> found = UnscopableLookup(&it); |
| - if (found.IsNothing()) { |
| - maybe = Nothing<PropertyAttributes>(); |
| - } else { |
| - // Luckily, consumers of |maybe| only care whether the property |
| - // was absent or not, so we can return a dummy |NONE| value |
| - // for its attributes when it was present. |
| - maybe = Just(found.FromJust() ? NONE : ABSENT); |
| - } |
| + // Luckily, consumers of |maybe| only care whether the property |
| + // was absent or not, so we can return a dummy |NONE| value |
| + // for its attributes when it was present. |
| + maybe = Just(found.FromJust() ? NONE : ABSENT); |
| } |
| } else { |
| maybe = JSReceiver::GetPropertyAttributes(object, name); |