| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 684 return heap->undefined_value(); | 684 return heap->undefined_value(); |
| 685 } | 685 } |
| 686 } | 686 } |
| 687 | 687 |
| 688 if (js_object->HasIndexedInterceptor()) { | 688 if (js_object->HasIndexedInterceptor()) { |
| 689 return js_object->GetElementWithInterceptor(receiver, index); | 689 return js_object->GetElementWithInterceptor(receiver, index); |
| 690 } | 690 } |
| 691 | 691 |
| 692 if (js_object->elements() != heap->empty_fixed_array()) { | 692 if (js_object->elements() != heap->empty_fixed_array()) { |
| 693 MaybeObject* result = js_object->GetElementsAccessor()->Get( | 693 MaybeObject* result = js_object->GetElementsAccessor()->Get( |
| 694 js_object->elements(), | 694 receiver, js_object, index); |
| 695 index, | |
| 696 js_object, | |
| 697 receiver); | |
| 698 if (result != heap->the_hole_value()) return result; | 695 if (result != heap->the_hole_value()) return result; |
| 699 } | 696 } |
| 700 } | 697 } |
| 701 | 698 |
| 702 return heap->undefined_value(); | 699 return heap->undefined_value(); |
| 703 } | 700 } |
| 704 | 701 |
| 705 | 702 |
| 706 Object* Object::GetPrototype() { | 703 Object* Object::GetPrototype() { |
| 707 if (IsSmi()) { | 704 if (IsSmi()) { |
| (...skipping 4836 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5544 cache->set(EntryToIndex(entry), obj); | 5541 cache->set(EntryToIndex(entry), obj); |
| 5545 cache->set(EntryToIndex(entry) + 1, code); | 5542 cache->set(EntryToIndex(entry) + 1, code); |
| 5546 cache->ElementAdded(); | 5543 cache->ElementAdded(); |
| 5547 return cache; | 5544 return cache; |
| 5548 } | 5545 } |
| 5549 | 5546 |
| 5550 | 5547 |
| 5551 MaybeObject* FixedArray::AddKeysFromJSArray(JSArray* array) { | 5548 MaybeObject* FixedArray::AddKeysFromJSArray(JSArray* array) { |
| 5552 ElementsAccessor* accessor = array->GetElementsAccessor(); | 5549 ElementsAccessor* accessor = array->GetElementsAccessor(); |
| 5553 MaybeObject* maybe_result = | 5550 MaybeObject* maybe_result = |
| 5554 accessor->AddElementsToFixedArray(array->elements(), this, array, array); | 5551 accessor->AddElementsToFixedArray(array, array, this); |
| 5555 FixedArray* result; | 5552 FixedArray* result; |
| 5556 if (!maybe_result->To<FixedArray>(&result)) return maybe_result; | 5553 if (!maybe_result->To<FixedArray>(&result)) return maybe_result; |
| 5557 #ifdef DEBUG | 5554 #ifdef DEBUG |
| 5558 if (FLAG_enable_slow_asserts) { | 5555 if (FLAG_enable_slow_asserts) { |
| 5559 for (int i = 0; i < result->length(); i++) { | 5556 for (int i = 0; i < result->length(); i++) { |
| 5560 Object* current = result->get(i); | 5557 Object* current = result->get(i); |
| 5561 ASSERT(current->IsNumber() || current->IsString()); | 5558 ASSERT(current->IsNumber() || current->IsString()); |
| 5562 } | 5559 } |
| 5563 } | 5560 } |
| 5564 #endif | 5561 #endif |
| 5565 return result; | 5562 return result; |
| 5566 } | 5563 } |
| 5567 | 5564 |
| 5568 | 5565 |
| 5569 MaybeObject* FixedArray::UnionOfKeys(FixedArray* other) { | 5566 MaybeObject* FixedArray::UnionOfKeys(FixedArray* other) { |
| 5570 ElementsAccessor* accessor = ElementsAccessor::ForArray(other); | 5567 ElementsAccessor* accessor = ElementsAccessor::ForArray(other); |
| 5571 MaybeObject* maybe_result = | 5568 MaybeObject* maybe_result = |
| 5572 accessor->AddElementsToFixedArray(other, this, NULL, NULL); | 5569 accessor->AddElementsToFixedArray(NULL, NULL, this, other); |
| 5573 FixedArray* result; | 5570 FixedArray* result; |
| 5574 if (!maybe_result->To<FixedArray>(&result)) return maybe_result; | 5571 if (!maybe_result->To<FixedArray>(&result)) return maybe_result; |
| 5575 #ifdef DEBUG | 5572 #ifdef DEBUG |
| 5576 if (FLAG_enable_slow_asserts) { | 5573 if (FLAG_enable_slow_asserts) { |
| 5577 for (int i = 0; i < result->length(); i++) { | 5574 for (int i = 0; i < result->length(); i++) { |
| 5578 Object* current = result->get(i); | 5575 Object* current = result->get(i); |
| 5579 ASSERT(current->IsNumber() || current->IsString()); | 5576 ASSERT(current->IsNumber() || current->IsString()); |
| 5580 } | 5577 } |
| 5581 } | 5578 } |
| 5582 #endif | 5579 #endif |
| (...skipping 3305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8888 v8::Handle<v8::Value> result; | 8885 v8::Handle<v8::Value> result; |
| 8889 { | 8886 { |
| 8890 // Leaving JavaScript. | 8887 // Leaving JavaScript. |
| 8891 VMState state(isolate, EXTERNAL); | 8888 VMState state(isolate, EXTERNAL); |
| 8892 result = getter(index, info); | 8889 result = getter(index, info); |
| 8893 } | 8890 } |
| 8894 if (!result.IsEmpty()) return true; | 8891 if (!result.IsEmpty()) return true; |
| 8895 } | 8892 } |
| 8896 | 8893 |
| 8897 if (holder_handle->GetElementsAccessor()->HasElement( | 8894 if (holder_handle->GetElementsAccessor()->HasElement( |
| 8898 holder_handle->elements(), index, *holder_handle, *receiver_handle)) { | 8895 *receiver_handle, *holder_handle, index)) { |
| 8899 return true; | 8896 return true; |
| 8900 } | 8897 } |
| 8901 | 8898 |
| 8902 if (holder_handle->IsStringObjectWithCharacterAt(index)) return true; | 8899 if (holder_handle->IsStringObjectWithCharacterAt(index)) return true; |
| 8903 Object* pt = holder_handle->GetPrototype(); | 8900 Object* pt = holder_handle->GetPrototype(); |
| 8904 if (pt->IsJSProxy()) { | 8901 if (pt->IsJSProxy()) { |
| 8905 // We need to follow the spec and simulate a call to [[GetOwnProperty]]. | 8902 // We need to follow the spec and simulate a call to [[GetOwnProperty]]. |
| 8906 return JSProxy::cast(pt)->GetElementAttributeWithHandler( | 8903 return JSProxy::cast(pt)->GetElementAttributeWithHandler( |
| 8907 receiver, index) != ABSENT; | 8904 receiver, index) != ABSENT; |
| 8908 } | 8905 } |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9026 return false; | 9023 return false; |
| 9027 } | 9024 } |
| 9028 } | 9025 } |
| 9029 | 9026 |
| 9030 // Check for lookup interceptor | 9027 // Check for lookup interceptor |
| 9031 if (HasIndexedInterceptor()) { | 9028 if (HasIndexedInterceptor()) { |
| 9032 return HasElementWithInterceptor(receiver, index); | 9029 return HasElementWithInterceptor(receiver, index); |
| 9033 } | 9030 } |
| 9034 | 9031 |
| 9035 ElementsAccessor* accessor = GetElementsAccessor(); | 9032 ElementsAccessor* accessor = GetElementsAccessor(); |
| 9036 if (accessor->HasElement(elements(), index, this, receiver)) { | 9033 if (accessor->HasElement(receiver, this, index)) { |
| 9037 return true; | 9034 return true; |
| 9038 } | 9035 } |
| 9039 | 9036 |
| 9040 // Handle [] on String objects. | 9037 // Handle [] on String objects. |
| 9041 if (this->IsStringObjectWithCharacterAt(index)) return true; | 9038 if (this->IsStringObjectWithCharacterAt(index)) return true; |
| 9042 | 9039 |
| 9043 Object* pt = GetPrototype(); | 9040 Object* pt = GetPrototype(); |
| 9044 if (pt->IsNull()) return false; | 9041 if (pt->IsNull()) return false; |
| 9045 if (pt->IsJSProxy()) { | 9042 if (pt->IsJSProxy()) { |
| 9046 // We need to follow the spec and simulate a call to [[GetOwnProperty]]. | 9043 // We need to follow the spec and simulate a call to [[GetOwnProperty]]. |
| (...skipping 840 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9887 // Leaving JavaScript. | 9884 // Leaving JavaScript. |
| 9888 VMState state(isolate, EXTERNAL); | 9885 VMState state(isolate, EXTERNAL); |
| 9889 result = getter(index, info); | 9886 result = getter(index, info); |
| 9890 } | 9887 } |
| 9891 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 9888 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
| 9892 if (!result.IsEmpty()) return *v8::Utils::OpenHandle(*result); | 9889 if (!result.IsEmpty()) return *v8::Utils::OpenHandle(*result); |
| 9893 } | 9890 } |
| 9894 | 9891 |
| 9895 Heap* heap = holder_handle->GetHeap(); | 9892 Heap* heap = holder_handle->GetHeap(); |
| 9896 ElementsAccessor* handler = holder_handle->GetElementsAccessor(); | 9893 ElementsAccessor* handler = holder_handle->GetElementsAccessor(); |
| 9897 MaybeObject* raw_result = handler->Get(holder_handle->elements(), | 9894 MaybeObject* raw_result = handler->Get(*this_handle, |
| 9898 index, | |
| 9899 *holder_handle, | 9895 *holder_handle, |
| 9900 *this_handle); | 9896 index); |
| 9901 if (raw_result != heap->the_hole_value()) return raw_result; | 9897 if (raw_result != heap->the_hole_value()) return raw_result; |
| 9902 | 9898 |
| 9903 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 9899 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
| 9904 | 9900 |
| 9905 Object* pt = holder_handle->GetPrototype(); | 9901 Object* pt = holder_handle->GetPrototype(); |
| 9906 if (pt == heap->null_value()) return heap->undefined_value(); | 9902 if (pt == heap->null_value()) return heap->undefined_value(); |
| 9907 return pt->GetElementWithReceiver(*this_handle, index); | 9903 return pt->GetElementWithReceiver(*this_handle, index); |
| 9908 } | 9904 } |
| 9909 | 9905 |
| 9910 | 9906 |
| (...skipping 3050 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12961 if (break_point_objects()->IsUndefined()) return 0; | 12957 if (break_point_objects()->IsUndefined()) return 0; |
| 12962 // Single break point. | 12958 // Single break point. |
| 12963 if (!break_point_objects()->IsFixedArray()) return 1; | 12959 if (!break_point_objects()->IsFixedArray()) return 1; |
| 12964 // Multiple break points. | 12960 // Multiple break points. |
| 12965 return FixedArray::cast(break_point_objects())->length(); | 12961 return FixedArray::cast(break_point_objects())->length(); |
| 12966 } | 12962 } |
| 12967 #endif // ENABLE_DEBUGGER_SUPPORT | 12963 #endif // ENABLE_DEBUGGER_SUPPORT |
| 12968 | 12964 |
| 12969 | 12965 |
| 12970 } } // namespace v8::internal | 12966 } } // namespace v8::internal |
| OLD | NEW |