OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 | 181 |
182 // api style callbacks. | 182 // api style callbacks. |
183 if (structure->IsAccessorInfo()) { | 183 if (structure->IsAccessorInfo()) { |
184 AccessorInfo* data = AccessorInfo::cast(structure); | 184 AccessorInfo* data = AccessorInfo::cast(structure); |
185 Object* fun_obj = data->getter(); | 185 Object* fun_obj = data->getter(); |
186 v8::AccessorGetter call_fun = v8::ToCData<v8::AccessorGetter>(fun_obj); | 186 v8::AccessorGetter call_fun = v8::ToCData<v8::AccessorGetter>(fun_obj); |
187 HandleScope scope; | 187 HandleScope scope; |
188 JSObject* self = JSObject::cast(receiver); | 188 JSObject* self = JSObject::cast(receiver); |
189 JSObject* holder_handle = JSObject::cast(holder); | 189 JSObject* holder_handle = JSObject::cast(holder); |
190 Handle<String> key(name); | 190 Handle<String> key(name); |
191 LOG(ApiNamedPropertyAccess("load", self, name)); | 191 LOG(isolate,ApiNamedPropertyAccess("load", self, name)); |
192 CustomArguments args(isolate, data->data(), self, holder_handle); | 192 CustomArguments args(isolate, data->data(), self, holder_handle); |
193 v8::AccessorInfo info(args.end()); | 193 v8::AccessorInfo info(args.end()); |
194 v8::Handle<v8::Value> result; | 194 v8::Handle<v8::Value> result; |
195 { | 195 { |
196 // Leaving JavaScript. | 196 // Leaving JavaScript. |
197 VMState state(isolate, EXTERNAL); | 197 VMState state(isolate, EXTERNAL); |
198 result = call_fun(v8::Utils::ToLocal(key), info); | 198 result = call_fun(v8::Utils::ToLocal(key), info); |
199 } | 199 } |
200 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 200 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
201 if (result.IsEmpty()) { | 201 if (result.IsEmpty()) { |
(...skipping 1408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1610 Object* value, | 1610 Object* value, |
1611 PropertyAttributes attributes, | 1611 PropertyAttributes attributes, |
1612 StrictModeFlag strict_mode) { | 1612 StrictModeFlag strict_mode) { |
1613 Isolate* isolate = GetIsolate(); | 1613 Isolate* isolate = GetIsolate(); |
1614 HandleScope scope(isolate); | 1614 HandleScope scope(isolate); |
1615 Handle<JSObject> this_handle(this); | 1615 Handle<JSObject> this_handle(this); |
1616 Handle<String> name_handle(name); | 1616 Handle<String> name_handle(name); |
1617 Handle<Object> value_handle(value, isolate); | 1617 Handle<Object> value_handle(value, isolate); |
1618 Handle<InterceptorInfo> interceptor(GetNamedInterceptor()); | 1618 Handle<InterceptorInfo> interceptor(GetNamedInterceptor()); |
1619 if (!interceptor->setter()->IsUndefined()) { | 1619 if (!interceptor->setter()->IsUndefined()) { |
1620 LOG(ApiNamedPropertyAccess("interceptor-named-set", this, name)); | 1620 LOG(isolate,ApiNamedPropertyAccess("interceptor-named-set", this, name)); |
1621 CustomArguments args(isolate, interceptor->data(), this, this); | 1621 CustomArguments args(isolate, interceptor->data(), this, this); |
1622 v8::AccessorInfo info(args.end()); | 1622 v8::AccessorInfo info(args.end()); |
1623 v8::NamedPropertySetter setter = | 1623 v8::NamedPropertySetter setter = |
1624 v8::ToCData<v8::NamedPropertySetter>(interceptor->setter()); | 1624 v8::ToCData<v8::NamedPropertySetter>(interceptor->setter()); |
1625 v8::Handle<v8::Value> result; | 1625 v8::Handle<v8::Value> result; |
1626 { | 1626 { |
1627 // Leaving JavaScript. | 1627 // Leaving JavaScript. |
1628 VMState state(isolate, EXTERNAL); | 1628 VMState state(isolate, EXTERNAL); |
1629 Handle<Object> value_unhole(value->IsTheHole() ? | 1629 Handle<Object> value_unhole(value->IsTheHole() ? |
1630 isolate->heap()->undefined_value() : | 1630 isolate->heap()->undefined_value() : |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1681 return *value_handle; | 1681 return *value_handle; |
1682 } | 1682 } |
1683 | 1683 |
1684 if (structure->IsAccessorInfo()) { | 1684 if (structure->IsAccessorInfo()) { |
1685 // api style callbacks | 1685 // api style callbacks |
1686 AccessorInfo* data = AccessorInfo::cast(structure); | 1686 AccessorInfo* data = AccessorInfo::cast(structure); |
1687 Object* call_obj = data->setter(); | 1687 Object* call_obj = data->setter(); |
1688 v8::AccessorSetter call_fun = v8::ToCData<v8::AccessorSetter>(call_obj); | 1688 v8::AccessorSetter call_fun = v8::ToCData<v8::AccessorSetter>(call_obj); |
1689 if (call_fun == NULL) return value; | 1689 if (call_fun == NULL) return value; |
1690 Handle<String> key(name); | 1690 Handle<String> key(name); |
1691 LOG(ApiNamedPropertyAccess("store", this, name)); | 1691 LOG(isolate,ApiNamedPropertyAccess("store", this, name)); |
1692 CustomArguments args(isolate, data->data(), this, JSObject::cast(holder)); | 1692 CustomArguments args(isolate, data->data(), this, JSObject::cast(holder)); |
1693 v8::AccessorInfo info(args.end()); | 1693 v8::AccessorInfo info(args.end()); |
1694 { | 1694 { |
1695 // Leaving JavaScript. | 1695 // Leaving JavaScript. |
1696 VMState state(isolate, EXTERNAL); | 1696 VMState state(isolate, EXTERNAL); |
1697 call_fun(v8::Utils::ToLocal(key), | 1697 call_fun(v8::Utils::ToLocal(key), |
1698 v8::Utils::ToLocal(value_handle), | 1698 v8::Utils::ToLocal(value_handle), |
1699 info); | 1699 info); |
1700 } | 1700 } |
1701 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 1701 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2173 HandleScope scope(isolate); | 2173 HandleScope scope(isolate); |
2174 Handle<InterceptorInfo> interceptor(GetNamedInterceptor()); | 2174 Handle<InterceptorInfo> interceptor(GetNamedInterceptor()); |
2175 Handle<JSObject> receiver_handle(receiver); | 2175 Handle<JSObject> receiver_handle(receiver); |
2176 Handle<JSObject> holder_handle(this); | 2176 Handle<JSObject> holder_handle(this); |
2177 Handle<String> name_handle(name); | 2177 Handle<String> name_handle(name); |
2178 CustomArguments args(isolate, interceptor->data(), receiver, this); | 2178 CustomArguments args(isolate, interceptor->data(), receiver, this); |
2179 v8::AccessorInfo info(args.end()); | 2179 v8::AccessorInfo info(args.end()); |
2180 if (!interceptor->query()->IsUndefined()) { | 2180 if (!interceptor->query()->IsUndefined()) { |
2181 v8::NamedPropertyQuery query = | 2181 v8::NamedPropertyQuery query = |
2182 v8::ToCData<v8::NamedPropertyQuery>(interceptor->query()); | 2182 v8::ToCData<v8::NamedPropertyQuery>(interceptor->query()); |
2183 LOG(ApiNamedPropertyAccess("interceptor-named-has", *holder_handle, name)); | 2183 LOG(isolate,ApiNamedPropertyAccess("interceptor-named-has", *holder_handle,
name)); |
2184 v8::Handle<v8::Integer> result; | 2184 v8::Handle<v8::Integer> result; |
2185 { | 2185 { |
2186 // Leaving JavaScript. | 2186 // Leaving JavaScript. |
2187 VMState state(isolate, EXTERNAL); | 2187 VMState state(isolate, EXTERNAL); |
2188 result = query(v8::Utils::ToLocal(name_handle), info); | 2188 result = query(v8::Utils::ToLocal(name_handle), info); |
2189 } | 2189 } |
2190 if (!result.IsEmpty()) { | 2190 if (!result.IsEmpty()) { |
2191 ASSERT(result->IsInt32()); | 2191 ASSERT(result->IsInt32()); |
2192 return static_cast<PropertyAttributes>(result->Int32Value()); | 2192 return static_cast<PropertyAttributes>(result->Int32Value()); |
2193 } | 2193 } |
2194 } else if (!interceptor->getter()->IsUndefined()) { | 2194 } else if (!interceptor->getter()->IsUndefined()) { |
2195 v8::NamedPropertyGetter getter = | 2195 v8::NamedPropertyGetter getter = |
2196 v8::ToCData<v8::NamedPropertyGetter>(interceptor->getter()); | 2196 v8::ToCData<v8::NamedPropertyGetter>(interceptor->getter()); |
2197 LOG(ApiNamedPropertyAccess("interceptor-named-get-has", this, name)); | 2197 LOG(isolate,ApiNamedPropertyAccess("interceptor-named-get-has", this, name))
; |
2198 v8::Handle<v8::Value> result; | 2198 v8::Handle<v8::Value> result; |
2199 { | 2199 { |
2200 // Leaving JavaScript. | 2200 // Leaving JavaScript. |
2201 VMState state(isolate, EXTERNAL); | 2201 VMState state(isolate, EXTERNAL); |
2202 result = getter(v8::Utils::ToLocal(name_handle), info); | 2202 result = getter(v8::Utils::ToLocal(name_handle), info); |
2203 } | 2203 } |
2204 if (!result.IsEmpty()) return DONT_ENUM; | 2204 if (!result.IsEmpty()) return DONT_ENUM; |
2205 } | 2205 } |
2206 return holder_handle->GetPropertyAttributePostInterceptor(*receiver_handle, | 2206 return holder_handle->GetPropertyAttributePostInterceptor(*receiver_handle, |
2207 *name_handle, | 2207 *name_handle, |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2560 | 2560 |
2561 MaybeObject* JSObject::DeletePropertyWithInterceptor(String* name) { | 2561 MaybeObject* JSObject::DeletePropertyWithInterceptor(String* name) { |
2562 Isolate* isolate = GetIsolate(); | 2562 Isolate* isolate = GetIsolate(); |
2563 HandleScope scope(isolate); | 2563 HandleScope scope(isolate); |
2564 Handle<InterceptorInfo> interceptor(GetNamedInterceptor()); | 2564 Handle<InterceptorInfo> interceptor(GetNamedInterceptor()); |
2565 Handle<String> name_handle(name); | 2565 Handle<String> name_handle(name); |
2566 Handle<JSObject> this_handle(this); | 2566 Handle<JSObject> this_handle(this); |
2567 if (!interceptor->deleter()->IsUndefined()) { | 2567 if (!interceptor->deleter()->IsUndefined()) { |
2568 v8::NamedPropertyDeleter deleter = | 2568 v8::NamedPropertyDeleter deleter = |
2569 v8::ToCData<v8::NamedPropertyDeleter>(interceptor->deleter()); | 2569 v8::ToCData<v8::NamedPropertyDeleter>(interceptor->deleter()); |
2570 LOG(ApiNamedPropertyAccess("interceptor-named-delete", *this_handle, name)); | 2570 LOG(isolate,ApiNamedPropertyAccess("interceptor-named-delete", *this_handle,
name)); |
2571 CustomArguments args(isolate, interceptor->data(), this, this); | 2571 CustomArguments args(isolate, interceptor->data(), this, this); |
2572 v8::AccessorInfo info(args.end()); | 2572 v8::AccessorInfo info(args.end()); |
2573 v8::Handle<v8::Boolean> result; | 2573 v8::Handle<v8::Boolean> result; |
2574 { | 2574 { |
2575 // Leaving JavaScript. | 2575 // Leaving JavaScript. |
2576 VMState state(isolate, EXTERNAL); | 2576 VMState state(isolate, EXTERNAL); |
2577 result = deleter(v8::Utils::ToLocal(name_handle), info); | 2577 result = deleter(v8::Utils::ToLocal(name_handle), info); |
2578 } | 2578 } |
2579 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 2579 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
2580 if (!result.IsEmpty()) { | 2580 if (!result.IsEmpty()) { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2628 Heap* heap = isolate->heap(); | 2628 Heap* heap = isolate->heap(); |
2629 // Make sure that the top context does not change when doing | 2629 // Make sure that the top context does not change when doing |
2630 // callbacks or interceptor calls. | 2630 // callbacks or interceptor calls. |
2631 AssertNoContextChange ncc; | 2631 AssertNoContextChange ncc; |
2632 HandleScope scope(isolate); | 2632 HandleScope scope(isolate); |
2633 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); | 2633 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); |
2634 if (interceptor->deleter()->IsUndefined()) return heap->false_value(); | 2634 if (interceptor->deleter()->IsUndefined()) return heap->false_value(); |
2635 v8::IndexedPropertyDeleter deleter = | 2635 v8::IndexedPropertyDeleter deleter = |
2636 v8::ToCData<v8::IndexedPropertyDeleter>(interceptor->deleter()); | 2636 v8::ToCData<v8::IndexedPropertyDeleter>(interceptor->deleter()); |
2637 Handle<JSObject> this_handle(this); | 2637 Handle<JSObject> this_handle(this); |
2638 LOG(ApiIndexedPropertyAccess("interceptor-indexed-delete", this, index)); | 2638 LOG(isolate,ApiIndexedPropertyAccess("interceptor-indexed-delete", this, index
)); |
2639 CustomArguments args(isolate, interceptor->data(), this, this); | 2639 CustomArguments args(isolate, interceptor->data(), this, this); |
2640 v8::AccessorInfo info(args.end()); | 2640 v8::AccessorInfo info(args.end()); |
2641 v8::Handle<v8::Boolean> result; | 2641 v8::Handle<v8::Boolean> result; |
2642 { | 2642 { |
2643 // Leaving JavaScript. | 2643 // Leaving JavaScript. |
2644 VMState state(isolate, EXTERNAL); | 2644 VMState state(isolate, EXTERNAL); |
2645 result = deleter(index, info); | 2645 result = deleter(index, info); |
2646 } | 2646 } |
2647 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 2647 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
2648 if (!result.IsEmpty()) { | 2648 if (!result.IsEmpty()) { |
(...skipping 4200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6849 AssertNoContextChange ncc; | 6849 AssertNoContextChange ncc; |
6850 HandleScope scope(isolate); | 6850 HandleScope scope(isolate); |
6851 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); | 6851 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); |
6852 Handle<JSObject> receiver_handle(receiver); | 6852 Handle<JSObject> receiver_handle(receiver); |
6853 Handle<JSObject> holder_handle(this); | 6853 Handle<JSObject> holder_handle(this); |
6854 CustomArguments args(isolate, interceptor->data(), receiver, this); | 6854 CustomArguments args(isolate, interceptor->data(), receiver, this); |
6855 v8::AccessorInfo info(args.end()); | 6855 v8::AccessorInfo info(args.end()); |
6856 if (!interceptor->query()->IsUndefined()) { | 6856 if (!interceptor->query()->IsUndefined()) { |
6857 v8::IndexedPropertyQuery query = | 6857 v8::IndexedPropertyQuery query = |
6858 v8::ToCData<v8::IndexedPropertyQuery>(interceptor->query()); | 6858 v8::ToCData<v8::IndexedPropertyQuery>(interceptor->query()); |
6859 LOG(ApiIndexedPropertyAccess("interceptor-indexed-has", this, index)); | 6859 LOG(isolate,ApiIndexedPropertyAccess("interceptor-indexed-has", this, index)
); |
6860 v8::Handle<v8::Integer> result; | 6860 v8::Handle<v8::Integer> result; |
6861 { | 6861 { |
6862 // Leaving JavaScript. | 6862 // Leaving JavaScript. |
6863 VMState state(isolate, EXTERNAL); | 6863 VMState state(isolate, EXTERNAL); |
6864 result = query(index, info); | 6864 result = query(index, info); |
6865 } | 6865 } |
6866 if (!result.IsEmpty()) { | 6866 if (!result.IsEmpty()) { |
6867 ASSERT(result->IsInt32()); | 6867 ASSERT(result->IsInt32()); |
6868 return true; // absence of property is signaled by empty handle. | 6868 return true; // absence of property is signaled by empty handle. |
6869 } | 6869 } |
6870 } else if (!interceptor->getter()->IsUndefined()) { | 6870 } else if (!interceptor->getter()->IsUndefined()) { |
6871 v8::IndexedPropertyGetter getter = | 6871 v8::IndexedPropertyGetter getter = |
6872 v8::ToCData<v8::IndexedPropertyGetter>(interceptor->getter()); | 6872 v8::ToCData<v8::IndexedPropertyGetter>(interceptor->getter()); |
6873 LOG(ApiIndexedPropertyAccess("interceptor-indexed-has-get", this, index)); | 6873 LOG(isolate,ApiIndexedPropertyAccess("interceptor-indexed-has-get", this, in
dex)); |
6874 v8::Handle<v8::Value> result; | 6874 v8::Handle<v8::Value> result; |
6875 { | 6875 { |
6876 // Leaving JavaScript. | 6876 // Leaving JavaScript. |
6877 VMState state(isolate, EXTERNAL); | 6877 VMState state(isolate, EXTERNAL); |
6878 result = getter(index, info); | 6878 result = getter(index, info); |
6879 } | 6879 } |
6880 if (!result.IsEmpty()) return true; | 6880 if (!result.IsEmpty()) return true; |
6881 } | 6881 } |
6882 return holder_handle->HasElementPostInterceptor(*receiver_handle, index); | 6882 return holder_handle->HasElementPostInterceptor(*receiver_handle, index); |
6883 } | 6883 } |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7029 // Make sure that the top context does not change when doing | 7029 // Make sure that the top context does not change when doing |
7030 // callbacks or interceptor calls. | 7030 // callbacks or interceptor calls. |
7031 AssertNoContextChange ncc; | 7031 AssertNoContextChange ncc; |
7032 HandleScope scope(isolate); | 7032 HandleScope scope(isolate); |
7033 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); | 7033 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); |
7034 Handle<JSObject> this_handle(this); | 7034 Handle<JSObject> this_handle(this); |
7035 Handle<Object> value_handle(value, isolate); | 7035 Handle<Object> value_handle(value, isolate); |
7036 if (!interceptor->setter()->IsUndefined()) { | 7036 if (!interceptor->setter()->IsUndefined()) { |
7037 v8::IndexedPropertySetter setter = | 7037 v8::IndexedPropertySetter setter = |
7038 v8::ToCData<v8::IndexedPropertySetter>(interceptor->setter()); | 7038 v8::ToCData<v8::IndexedPropertySetter>(interceptor->setter()); |
7039 LOG(ApiIndexedPropertyAccess("interceptor-indexed-set", this, index)); | 7039 LOG(isolate,ApiIndexedPropertyAccess("interceptor-indexed-set", this, index)
); |
7040 CustomArguments args(isolate, interceptor->data(), this, this); | 7040 CustomArguments args(isolate, interceptor->data(), this, this); |
7041 v8::AccessorInfo info(args.end()); | 7041 v8::AccessorInfo info(args.end()); |
7042 v8::Handle<v8::Value> result; | 7042 v8::Handle<v8::Value> result; |
7043 { | 7043 { |
7044 // Leaving JavaScript. | 7044 // Leaving JavaScript. |
7045 VMState state(isolate, EXTERNAL); | 7045 VMState state(isolate, EXTERNAL); |
7046 result = setter(index, v8::Utils::ToLocal(value_handle), info); | 7046 result = setter(index, v8::Utils::ToLocal(value_handle), info); |
7047 } | 7047 } |
7048 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 7048 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
7049 if (!result.IsEmpty()) return *value_handle; | 7049 if (!result.IsEmpty()) return *value_handle; |
(...skipping 18 matching lines...) Expand all Loading... |
7068 // api style callbacks. | 7068 // api style callbacks. |
7069 if (structure->IsAccessorInfo()) { | 7069 if (structure->IsAccessorInfo()) { |
7070 AccessorInfo* data = AccessorInfo::cast(structure); | 7070 AccessorInfo* data = AccessorInfo::cast(structure); |
7071 Object* fun_obj = data->getter(); | 7071 Object* fun_obj = data->getter(); |
7072 v8::AccessorGetter call_fun = v8::ToCData<v8::AccessorGetter>(fun_obj); | 7072 v8::AccessorGetter call_fun = v8::ToCData<v8::AccessorGetter>(fun_obj); |
7073 HandleScope scope(isolate); | 7073 HandleScope scope(isolate); |
7074 Handle<JSObject> self(JSObject::cast(receiver)); | 7074 Handle<JSObject> self(JSObject::cast(receiver)); |
7075 Handle<JSObject> holder_handle(JSObject::cast(holder)); | 7075 Handle<JSObject> holder_handle(JSObject::cast(holder)); |
7076 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); | 7076 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); |
7077 Handle<String> key(isolate->factory()->NumberToString(number)); | 7077 Handle<String> key(isolate->factory()->NumberToString(number)); |
7078 LOG(ApiNamedPropertyAccess("load", *self, *key)); | 7078 LOG(isolate,ApiNamedPropertyAccess("load", *self, *key)); |
7079 CustomArguments args(isolate, data->data(), *self, *holder_handle); | 7079 CustomArguments args(isolate, data->data(), *self, *holder_handle); |
7080 v8::AccessorInfo info(args.end()); | 7080 v8::AccessorInfo info(args.end()); |
7081 v8::Handle<v8::Value> result; | 7081 v8::Handle<v8::Value> result; |
7082 { | 7082 { |
7083 // Leaving JavaScript. | 7083 // Leaving JavaScript. |
7084 VMState state(isolate, EXTERNAL); | 7084 VMState state(isolate, EXTERNAL); |
7085 result = call_fun(v8::Utils::ToLocal(key), info); | 7085 result = call_fun(v8::Utils::ToLocal(key), info); |
7086 } | 7086 } |
7087 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 7087 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
7088 if (result.IsEmpty()) return isolate->heap()->undefined_value(); | 7088 if (result.IsEmpty()) return isolate->heap()->undefined_value(); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7123 ASSERT(!structure->IsProxy()); | 7123 ASSERT(!structure->IsProxy()); |
7124 | 7124 |
7125 if (structure->IsAccessorInfo()) { | 7125 if (structure->IsAccessorInfo()) { |
7126 // api style callbacks | 7126 // api style callbacks |
7127 AccessorInfo* data = AccessorInfo::cast(structure); | 7127 AccessorInfo* data = AccessorInfo::cast(structure); |
7128 Object* call_obj = data->setter(); | 7128 Object* call_obj = data->setter(); |
7129 v8::AccessorSetter call_fun = v8::ToCData<v8::AccessorSetter>(call_obj); | 7129 v8::AccessorSetter call_fun = v8::ToCData<v8::AccessorSetter>(call_obj); |
7130 if (call_fun == NULL) return value; | 7130 if (call_fun == NULL) return value; |
7131 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); | 7131 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); |
7132 Handle<String> key(isolate->factory()->NumberToString(number)); | 7132 Handle<String> key(isolate->factory()->NumberToString(number)); |
7133 LOG(ApiNamedPropertyAccess("store", this, *key)); | 7133 LOG(isolate,ApiNamedPropertyAccess("store", this, *key)); |
7134 CustomArguments args(isolate, data->data(), this, JSObject::cast(holder)); | 7134 CustomArguments args(isolate, data->data(), this, JSObject::cast(holder)); |
7135 v8::AccessorInfo info(args.end()); | 7135 v8::AccessorInfo info(args.end()); |
7136 { | 7136 { |
7137 // Leaving JavaScript. | 7137 // Leaving JavaScript. |
7138 VMState state(isolate, EXTERNAL); | 7138 VMState state(isolate, EXTERNAL); |
7139 call_fun(v8::Utils::ToLocal(key), | 7139 call_fun(v8::Utils::ToLocal(key), |
7140 v8::Utils::ToLocal(value_handle), | 7140 v8::Utils::ToLocal(value_handle), |
7141 info); | 7141 info); |
7142 } | 7142 } |
7143 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 7143 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7492 // callbacks or interceptor calls. | 7492 // callbacks or interceptor calls. |
7493 AssertNoContextChange ncc; | 7493 AssertNoContextChange ncc; |
7494 HandleScope scope(isolate); | 7494 HandleScope scope(isolate); |
7495 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); | 7495 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); |
7496 Handle<Object> this_handle(receiver); | 7496 Handle<Object> this_handle(receiver); |
7497 Handle<JSObject> holder_handle(this); | 7497 Handle<JSObject> holder_handle(this); |
7498 | 7498 |
7499 if (!interceptor->getter()->IsUndefined()) { | 7499 if (!interceptor->getter()->IsUndefined()) { |
7500 v8::IndexedPropertyGetter getter = | 7500 v8::IndexedPropertyGetter getter = |
7501 v8::ToCData<v8::IndexedPropertyGetter>(interceptor->getter()); | 7501 v8::ToCData<v8::IndexedPropertyGetter>(interceptor->getter()); |
7502 LOG(ApiIndexedPropertyAccess("interceptor-indexed-get", this, index)); | 7502 LOG(isolate,ApiIndexedPropertyAccess("interceptor-indexed-get", this, index)
); |
7503 CustomArguments args(isolate, interceptor->data(), receiver, this); | 7503 CustomArguments args(isolate, interceptor->data(), receiver, this); |
7504 v8::AccessorInfo info(args.end()); | 7504 v8::AccessorInfo info(args.end()); |
7505 v8::Handle<v8::Value> result; | 7505 v8::Handle<v8::Value> result; |
7506 { | 7506 { |
7507 // Leaving JavaScript. | 7507 // Leaving JavaScript. |
7508 VMState state(isolate, EXTERNAL); | 7508 VMState state(isolate, EXTERNAL); |
7509 result = getter(index, info); | 7509 result = getter(index, info); |
7510 } | 7510 } |
7511 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 7511 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
7512 if (!result.IsEmpty()) return *v8::Utils::OpenHandle(*result); | 7512 if (!result.IsEmpty()) return *v8::Utils::OpenHandle(*result); |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7840 Isolate* isolate = GetIsolate(); | 7840 Isolate* isolate = GetIsolate(); |
7841 InterceptorInfo* interceptor = GetNamedInterceptor(); | 7841 InterceptorInfo* interceptor = GetNamedInterceptor(); |
7842 HandleScope scope(isolate); | 7842 HandleScope scope(isolate); |
7843 Handle<JSObject> receiver_handle(receiver); | 7843 Handle<JSObject> receiver_handle(receiver); |
7844 Handle<JSObject> holder_handle(this); | 7844 Handle<JSObject> holder_handle(this); |
7845 Handle<String> name_handle(name); | 7845 Handle<String> name_handle(name); |
7846 | 7846 |
7847 if (!interceptor->getter()->IsUndefined()) { | 7847 if (!interceptor->getter()->IsUndefined()) { |
7848 v8::NamedPropertyGetter getter = | 7848 v8::NamedPropertyGetter getter = |
7849 v8::ToCData<v8::NamedPropertyGetter>(interceptor->getter()); | 7849 v8::ToCData<v8::NamedPropertyGetter>(interceptor->getter()); |
7850 LOG(ApiNamedPropertyAccess("interceptor-named-get", *holder_handle, name)); | 7850 LOG(isolate,ApiNamedPropertyAccess("interceptor-named-get", *holder_handle,
name)); |
7851 CustomArguments args(isolate, interceptor->data(), receiver, this); | 7851 CustomArguments args(isolate, interceptor->data(), receiver, this); |
7852 v8::AccessorInfo info(args.end()); | 7852 v8::AccessorInfo info(args.end()); |
7853 v8::Handle<v8::Value> result; | 7853 v8::Handle<v8::Value> result; |
7854 { | 7854 { |
7855 // Leaving JavaScript. | 7855 // Leaving JavaScript. |
7856 VMState state(isolate, EXTERNAL); | 7856 VMState state(isolate, EXTERNAL); |
7857 result = getter(v8::Utils::ToLocal(name_handle), info); | 7857 result = getter(v8::Utils::ToLocal(name_handle), info); |
7858 } | 7858 } |
7859 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 7859 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
7860 if (!result.IsEmpty()) { | 7860 if (!result.IsEmpty()) { |
(...skipping 2300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10161 if (break_point_objects()->IsUndefined()) return 0; | 10161 if (break_point_objects()->IsUndefined()) return 0; |
10162 // Single beak point. | 10162 // Single beak point. |
10163 if (!break_point_objects()->IsFixedArray()) return 1; | 10163 if (!break_point_objects()->IsFixedArray()) return 1; |
10164 // Multiple break points. | 10164 // Multiple break points. |
10165 return FixedArray::cast(break_point_objects())->length(); | 10165 return FixedArray::cast(break_point_objects())->length(); |
10166 } | 10166 } |
10167 #endif | 10167 #endif |
10168 | 10168 |
10169 | 10169 |
10170 } } // namespace v8::internal | 10170 } } // namespace v8::internal |
OLD | NEW |