| OLD | NEW | 
|---|
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "src/v8.h" | 5 #include "src/v8.h" | 
| 6 | 6 | 
| 7 #include "src/bootstrapper.h" | 7 #include "src/bootstrapper.h" | 
| 8 #include "src/debug.h" | 8 #include "src/debug.h" | 
| 9 #include "src/scopeinfo.h" | 9 #include "src/scopeinfo.h" | 
| 10 | 10 | 
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 251       } | 251       } | 
| 252 | 252 | 
| 253       // Context extension objects needs to behave as if they have no | 253       // Context extension objects needs to behave as if they have no | 
| 254       // prototype.  So even if we want to follow prototype chains, we need | 254       // prototype.  So even if we want to follow prototype chains, we need | 
| 255       // to only do a local lookup for context extension objects. | 255       // to only do a local lookup for context extension objects. | 
| 256       Maybe<PropertyAttributes> maybe = Nothing<PropertyAttributes>(); | 256       Maybe<PropertyAttributes> maybe = Nothing<PropertyAttributes>(); | 
| 257       if ((flags & FOLLOW_PROTOTYPE_CHAIN) == 0 || | 257       if ((flags & FOLLOW_PROTOTYPE_CHAIN) == 0 || | 
| 258           object->IsJSContextExtensionObject()) { | 258           object->IsJSContextExtensionObject()) { | 
| 259         maybe = JSReceiver::GetOwnPropertyAttributes(object, name); | 259         maybe = JSReceiver::GetOwnPropertyAttributes(object, name); | 
| 260       } else if (context->IsWithContext()) { | 260       } else if (context->IsWithContext()) { | 
| 261         LookupIterator it(object, name); | 261         // A with context will never bind "this". | 
| 262         maybe = UnscopableLookup(&it); | 262         if (name->Equals(*isolate->factory()->this_string())) { | 
|  | 263           maybe = Just(ABSENT); | 
|  | 264         } else { | 
|  | 265           LookupIterator it(object, name); | 
|  | 266           maybe = UnscopableLookup(&it); | 
|  | 267         } | 
| 263       } else { | 268       } else { | 
| 264         maybe = JSReceiver::GetPropertyAttributes(object, name); | 269         maybe = JSReceiver::GetPropertyAttributes(object, name); | 
| 265       } | 270       } | 
| 266 | 271 | 
| 267       if (!maybe.IsJust()) return Handle<Object>(); | 272       if (!maybe.IsJust()) return Handle<Object>(); | 
| 268       DCHECK(!isolate->has_pending_exception()); | 273       DCHECK(!isolate->has_pending_exception()); | 
| 269       *attributes = maybe.FromJust(); | 274       *attributes = maybe.FromJust(); | 
| 270 | 275 | 
| 271       if (maybe.FromJust() != ABSENT) { | 276       if (maybe.FromJust() != ABSENT) { | 
| 272         if (FLAG_trace_contexts) { | 277         if (FLAG_trace_contexts) { | 
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 488 bool Context::IsBootstrappingOrGlobalObject(Isolate* isolate, Object* object) { | 493 bool Context::IsBootstrappingOrGlobalObject(Isolate* isolate, Object* object) { | 
| 489   // During bootstrapping we allow all objects to pass as global | 494   // During bootstrapping we allow all objects to pass as global | 
| 490   // objects. This is necessary to fix circular dependencies. | 495   // objects. This is necessary to fix circular dependencies. | 
| 491   return isolate->heap()->gc_state() != Heap::NOT_IN_GC || | 496   return isolate->heap()->gc_state() != Heap::NOT_IN_GC || | 
| 492       isolate->bootstrapper()->IsActive() || | 497       isolate->bootstrapper()->IsActive() || | 
| 493       object->IsGlobalObject(); | 498       object->IsGlobalObject(); | 
| 494 } | 499 } | 
| 495 #endif | 500 #endif | 
| 496 | 501 | 
| 497 } }  // namespace v8::internal | 502 } }  // namespace v8::internal | 
| OLD | NEW | 
|---|