OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 4804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4815 PropertyDescriptor desc; | 4815 PropertyDescriptor desc; |
4816 bool found = JSProxy::GetOwnPropertyDescriptor( | 4816 bool found = JSProxy::GetOwnPropertyDescriptor( |
4817 isolate, it->GetHolder<JSProxy>(), it->GetName(), &desc); | 4817 isolate, it->GetHolder<JSProxy>(), it->GetName(), &desc); |
4818 if (isolate->has_pending_exception()) return Nothing<PropertyAttributes>(); | 4818 if (isolate->has_pending_exception()) return Nothing<PropertyAttributes>(); |
4819 if (!found) return Just(ABSENT); | 4819 if (!found) return Just(ABSENT); |
4820 return Just(desc.ToAttributes()); | 4820 return Just(desc.ToAttributes()); |
4821 } | 4821 } |
4822 | 4822 |
4823 | 4823 |
4824 MaybeHandle<Object> JSProxy::GetTrap(Handle<JSProxy> proxy, | 4824 MaybeHandle<Object> JSProxy::GetTrap(Handle<JSProxy> proxy, |
4825 Handle<String> trap) { | 4825 Handle<String> trap_name) { |
4826 DCHECK(!proxy->IsRevoked()); | 4826 DCHECK(!proxy->IsRevoked()); |
4827 Isolate* isolate = proxy->GetIsolate(); | 4827 Isolate* isolate = proxy->GetIsolate(); |
4828 Handle<JSReceiver> handler(JSReceiver::cast(proxy->handler()), isolate); | 4828 Handle<JSReceiver> handler(JSReceiver::cast(proxy->handler()), isolate); |
4829 return Object::GetMethod(handler, trap); | 4829 return Object::GetMethod(handler, trap_name); |
4830 } | 4830 } |
4831 | 4831 |
4832 | 4832 |
4833 MaybeHandle<Object> JSProxy::CallTrap(Handle<JSProxy> proxy, | |
4834 const char* name, | |
4835 Handle<Object> derived, | |
4836 int argc, | |
4837 Handle<Object> argv[]) { | |
4838 Isolate* isolate = proxy->GetIsolate(); | |
4839 Handle<Object> handler(proxy->handler(), isolate); | |
4840 Handle<String> trap_name = isolate->factory()->InternalizeUtf8String(name); | |
4841 Handle<Object> trap; | |
4842 ASSIGN_RETURN_ON_EXCEPTION(isolate, trap, GetTrap(proxy, trap_name), Object); | |
4843 | |
4844 if (trap->IsUndefined()) { | |
4845 if (derived.is_null()) { | |
4846 THROW_NEW_ERROR(isolate, | |
4847 NewTypeError(MessageTemplate::kProxyHandlerTrapMissing, | |
4848 handler, trap_name), | |
4849 Object); | |
4850 } | |
4851 trap = Handle<Object>(derived); | |
4852 } | |
4853 | |
4854 return Execution::Call(isolate, trap, handler, argc, argv); | |
4855 } | |
4856 | |
4857 | |
4858 void JSObject::AllocateStorageForMap(Handle<JSObject> object, Handle<Map> map) { | 4833 void JSObject::AllocateStorageForMap(Handle<JSObject> object, Handle<Map> map) { |
4859 DCHECK(object->map()->GetInObjectProperties() == | 4834 DCHECK(object->map()->GetInObjectProperties() == |
4860 map->GetInObjectProperties()); | 4835 map->GetInObjectProperties()); |
4861 ElementsKind obj_kind = object->map()->elements_kind(); | 4836 ElementsKind obj_kind = object->map()->elements_kind(); |
4862 ElementsKind map_kind = map->elements_kind(); | 4837 ElementsKind map_kind = map->elements_kind(); |
4863 if (map_kind != obj_kind) { | 4838 if (map_kind != obj_kind) { |
4864 ElementsKind to_kind = GetMoreGeneralElementsKind(map_kind, obj_kind); | 4839 ElementsKind to_kind = GetMoreGeneralElementsKind(map_kind, obj_kind); |
4865 if (IsDictionaryElementsKind(obj_kind)) { | 4840 if (IsDictionaryElementsKind(obj_kind)) { |
4866 to_kind = obj_kind; | 4841 to_kind = obj_kind; |
4867 } | 4842 } |
(...skipping 14187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19055 if (cell->value() != *new_value) { | 19030 if (cell->value() != *new_value) { |
19056 cell->set_value(*new_value); | 19031 cell->set_value(*new_value); |
19057 Isolate* isolate = cell->GetIsolate(); | 19032 Isolate* isolate = cell->GetIsolate(); |
19058 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 19033 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
19059 isolate, DependentCode::kPropertyCellChangedGroup); | 19034 isolate, DependentCode::kPropertyCellChangedGroup); |
19060 } | 19035 } |
19061 } | 19036 } |
19062 | 19037 |
19063 } // namespace internal | 19038 } // namespace internal |
19064 } // namespace v8 | 19039 } // namespace v8 |
OLD | NEW |