| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/objects.h" | 5 #include "src/objects.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 #include <iomanip> | 8 #include <iomanip> |
| 9 #include <sstream> | 9 #include <sstream> |
| 10 | 10 |
| (...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 } | 713 } |
| 714 | 714 |
| 715 | 715 |
| 716 // static | 716 // static |
| 717 MaybeHandle<Object> Object::GetProperty(LookupIterator* it) { | 717 MaybeHandle<Object> Object::GetProperty(LookupIterator* it) { |
| 718 for (; it->IsFound(); it->Next()) { | 718 for (; it->IsFound(); it->Next()) { |
| 719 switch (it->state()) { | 719 switch (it->state()) { |
| 720 case LookupIterator::NOT_FOUND: | 720 case LookupIterator::NOT_FOUND: |
| 721 case LookupIterator::TRANSITION: | 721 case LookupIterator::TRANSITION: |
| 722 UNREACHABLE(); | 722 UNREACHABLE(); |
| 723 case LookupIterator::JSPROXY: | 723 case LookupIterator::JSPROXY: { |
| 724 return JSProxy::GetProperty(it->isolate(), it->GetHolder<JSProxy>(), | 724 bool was_found; |
| 725 it->GetName(), it->GetReceiver()); | 725 MaybeHandle<Object> result = |
| 726 JSProxy::GetProperty(it->isolate(), it->GetHolder<JSProxy>(), |
| 727 it->GetName(), it->GetReceiver(), &was_found); |
| 728 if (!was_found) it->NotFound(); |
| 729 return result; |
| 730 } |
| 726 case LookupIterator::INTERCEPTOR: { | 731 case LookupIterator::INTERCEPTOR: { |
| 727 bool done; | 732 bool done; |
| 728 Handle<Object> result; | 733 Handle<Object> result; |
| 729 ASSIGN_RETURN_ON_EXCEPTION( | 734 ASSIGN_RETURN_ON_EXCEPTION( |
| 730 it->isolate(), result, | 735 it->isolate(), result, |
| 731 JSObject::GetPropertyWithInterceptor(it, &done), Object); | 736 JSObject::GetPropertyWithInterceptor(it, &done), Object); |
| 732 if (done) return result; | 737 if (done) return result; |
| 733 break; | 738 break; |
| 734 } | 739 } |
| 735 case LookupIterator::ACCESS_CHECK: | 740 case LookupIterator::ACCESS_CHECK: |
| (...skipping 19 matching lines...) Expand all Loading... |
| 755 MessageTemplate::kStackOverflow)); \ | 760 MessageTemplate::kStackOverflow)); \ |
| 756 return result_value; \ | 761 return result_value; \ |
| 757 } \ | 762 } \ |
| 758 } while (false) | 763 } while (false) |
| 759 | 764 |
| 760 | 765 |
| 761 // static | 766 // static |
| 762 MaybeHandle<Object> JSProxy::GetProperty(Isolate* isolate, | 767 MaybeHandle<Object> JSProxy::GetProperty(Isolate* isolate, |
| 763 Handle<JSProxy> proxy, | 768 Handle<JSProxy> proxy, |
| 764 Handle<Name> name, | 769 Handle<Name> name, |
| 765 Handle<Object> receiver) { | 770 Handle<Object> receiver, |
| 771 bool* was_found) { |
| 772 *was_found = true; |
| 766 if (receiver->IsJSGlobalObject()) { | 773 if (receiver->IsJSGlobalObject()) { |
| 767 THROW_NEW_ERROR( | 774 THROW_NEW_ERROR( |
| 768 isolate, | 775 isolate, |
| 769 NewTypeError(MessageTemplate::kReadGlobalReferenceThroughProxy, name), | 776 NewTypeError(MessageTemplate::kReadGlobalReferenceThroughProxy, name), |
| 770 Object); | 777 Object); |
| 771 } | 778 } |
| 772 | 779 |
| 773 DCHECK(!name->IsPrivate()); | 780 DCHECK(!name->IsPrivate()); |
| 774 STACK_CHECK(MaybeHandle<Object>()); | 781 STACK_CHECK(MaybeHandle<Object>()); |
| 775 Handle<Name> trap_name = isolate->factory()->get_string(); | 782 Handle<Name> trap_name = isolate->factory()->get_string(); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 788 // 6. Let trap be ? GetMethod(handler, "get"). | 795 // 6. Let trap be ? GetMethod(handler, "get"). |
| 789 Handle<Object> trap; | 796 Handle<Object> trap; |
| 790 ASSIGN_RETURN_ON_EXCEPTION( | 797 ASSIGN_RETURN_ON_EXCEPTION( |
| 791 isolate, trap, | 798 isolate, trap, |
| 792 Object::GetMethod(Handle<JSReceiver>::cast(handler), trap_name), Object); | 799 Object::GetMethod(Handle<JSReceiver>::cast(handler), trap_name), Object); |
| 793 // 7. If trap is undefined, then | 800 // 7. If trap is undefined, then |
| 794 if (trap->IsUndefined()) { | 801 if (trap->IsUndefined()) { |
| 795 // 7.a Return target.[[Get]](P, Receiver). | 802 // 7.a Return target.[[Get]](P, Receiver). |
| 796 LookupIterator it = | 803 LookupIterator it = |
| 797 LookupIterator::PropertyOrElement(isolate, receiver, name, target); | 804 LookupIterator::PropertyOrElement(isolate, receiver, name, target); |
| 798 return Object::GetProperty(&it); | 805 MaybeHandle<Object> result = Object::GetProperty(&it); |
| 806 *was_found = it.IsFound(); |
| 807 return result; |
| 799 } | 808 } |
| 800 // 8. Let trapResult be ? Call(trap, handler, «target, P, Receiver»). | 809 // 8. Let trapResult be ? Call(trap, handler, «target, P, Receiver»). |
| 801 Handle<Object> trap_result; | 810 Handle<Object> trap_result; |
| 802 Handle<Object> args[] = {target, name, receiver}; | 811 Handle<Object> args[] = {target, name, receiver}; |
| 803 ASSIGN_RETURN_ON_EXCEPTION( | 812 ASSIGN_RETURN_ON_EXCEPTION( |
| 804 isolate, trap_result, | 813 isolate, trap_result, |
| 805 Execution::Call(isolate, trap, handler, arraysize(args), args), Object); | 814 Execution::Call(isolate, trap, handler, arraysize(args), args), Object); |
| 806 // 9. Let targetDesc be ? target.[[GetOwnProperty]](P). | 815 // 9. Let targetDesc be ? target.[[GetOwnProperty]](P). |
| 807 PropertyDescriptor target_desc; | 816 PropertyDescriptor target_desc; |
| 808 Maybe<bool> target_found = | 817 Maybe<bool> target_found = |
| (...skipping 18264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 19073 if (cell->value() != *new_value) { | 19082 if (cell->value() != *new_value) { |
| 19074 cell->set_value(*new_value); | 19083 cell->set_value(*new_value); |
| 19075 Isolate* isolate = cell->GetIsolate(); | 19084 Isolate* isolate = cell->GetIsolate(); |
| 19076 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 19085 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
| 19077 isolate, DependentCode::kPropertyCellChangedGroup); | 19086 isolate, DependentCode::kPropertyCellChangedGroup); |
| 19078 } | 19087 } |
| 19079 } | 19088 } |
| 19080 | 19089 |
| 19081 } // namespace internal | 19090 } // namespace internal |
| 19082 } // namespace v8 | 19091 } // namespace v8 |
| OLD | NEW |