OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/deoptimizer.h" | 8 #include "src/deoptimizer.h" |
9 #include "src/lookup.h" | 9 #include "src/lookup.h" |
10 #include "src/lookup-inl.h" | 10 #include "src/lookup-inl.h" |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 PrototypeIterator::START_AT_RECEIVER); | 266 PrototypeIterator::START_AT_RECEIVER); |
267 do { | 267 do { |
268 if (JSReceiver::cast(iter.GetCurrent()) == holder) return true; | 268 if (JSReceiver::cast(iter.GetCurrent()) == holder) return true; |
269 DCHECK(!current->IsJSProxy()); | 269 DCHECK(!current->IsJSProxy()); |
270 iter.Advance(); | 270 iter.Advance(); |
271 } while (!iter.IsAtEnd(PrototypeIterator::END_AT_NON_HIDDEN)); | 271 } while (!iter.IsAtEnd(PrototypeIterator::END_AT_NON_HIDDEN)); |
272 return false; | 272 return false; |
273 } | 273 } |
274 | 274 |
275 | 275 |
276 bool LookupIterator::HolderIsNonGlobalHiddenPrototype() const { | |
277 if (!HolderIsReceiverOrHiddenPrototype()) return false; | |
278 Handle<Object> receiver = GetReceiver(); | |
279 Handle<JSReceiver> holder = GetHolder<JSReceiver>(); | |
280 if (receiver.is_identical_to(holder)) return false; | |
281 if (receiver->IsJSGlobalProxy()) return !holder->IsJSGlobalObject(); | |
282 return true; | |
283 } | |
284 | |
285 | |
286 Handle<Object> LookupIterator::FetchValue() const { | 276 Handle<Object> LookupIterator::FetchValue() const { |
287 Object* result = NULL; | 277 Object* result = NULL; |
288 Handle<JSObject> holder = GetHolder<JSObject>(); | 278 Handle<JSObject> holder = GetHolder<JSObject>(); |
289 switch (property_encoding_) { | 279 switch (property_encoding_) { |
290 case DICTIONARY: | 280 case DICTIONARY: |
291 result = holder->property_dictionary()->ValueAt(number_); | 281 result = holder->property_dictionary()->ValueAt(number_); |
292 if (holder->IsGlobalObject()) { | 282 if (holder->IsGlobalObject()) { |
293 result = PropertyCell::cast(result)->value(); | 283 result = PropertyCell::cast(result)->value(); |
294 } | 284 } |
295 break; | 285 break; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 DCHECK_EQ(v8::internal::CONSTANT, property_details_.type()); | 367 DCHECK_EQ(v8::internal::CONSTANT, property_details_.type()); |
378 } | 368 } |
379 } | 369 } |
380 | 370 |
381 | 371 |
382 void LookupIterator::InternalizeName() { | 372 void LookupIterator::InternalizeName() { |
383 if (name_->IsUniqueName()) return; | 373 if (name_->IsUniqueName()) return; |
384 name_ = factory()->InternalizeString(Handle<String>::cast(name_)); | 374 name_ = factory()->InternalizeString(Handle<String>::cast(name_)); |
385 } | 375 } |
386 } } // namespace v8::internal | 376 } } // namespace v8::internal |
OLD | NEW |