| 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, |
| 2184 ApiNamedPropertyAccess("interceptor-named-has", *holder_handle, name)); |
| 2184 v8::Handle<v8::Integer> result; | 2185 v8::Handle<v8::Integer> result; |
| 2185 { | 2186 { |
| 2186 // Leaving JavaScript. | 2187 // Leaving JavaScript. |
| 2187 VMState state(isolate, EXTERNAL); | 2188 VMState state(isolate, EXTERNAL); |
| 2188 result = query(v8::Utils::ToLocal(name_handle), info); | 2189 result = query(v8::Utils::ToLocal(name_handle), info); |
| 2189 } | 2190 } |
| 2190 if (!result.IsEmpty()) { | 2191 if (!result.IsEmpty()) { |
| 2191 ASSERT(result->IsInt32()); | 2192 ASSERT(result->IsInt32()); |
| 2192 return static_cast<PropertyAttributes>(result->Int32Value()); | 2193 return static_cast<PropertyAttributes>(result->Int32Value()); |
| 2193 } | 2194 } |
| 2194 } else if (!interceptor->getter()->IsUndefined()) { | 2195 } else if (!interceptor->getter()->IsUndefined()) { |
| 2195 v8::NamedPropertyGetter getter = | 2196 v8::NamedPropertyGetter getter = |
| 2196 v8::ToCData<v8::NamedPropertyGetter>(interceptor->getter()); | 2197 v8::ToCData<v8::NamedPropertyGetter>(interceptor->getter()); |
| 2197 LOG(ApiNamedPropertyAccess("interceptor-named-get-has", this, name)); | 2198 LOG(isolate, |
| 2199 ApiNamedPropertyAccess("interceptor-named-get-has", this, name)); |
| 2198 v8::Handle<v8::Value> result; | 2200 v8::Handle<v8::Value> result; |
| 2199 { | 2201 { |
| 2200 // Leaving JavaScript. | 2202 // Leaving JavaScript. |
| 2201 VMState state(isolate, EXTERNAL); | 2203 VMState state(isolate, EXTERNAL); |
| 2202 result = getter(v8::Utils::ToLocal(name_handle), info); | 2204 result = getter(v8::Utils::ToLocal(name_handle), info); |
| 2203 } | 2205 } |
| 2204 if (!result.IsEmpty()) return DONT_ENUM; | 2206 if (!result.IsEmpty()) return DONT_ENUM; |
| 2205 } | 2207 } |
| 2206 return holder_handle->GetPropertyAttributePostInterceptor(*receiver_handle, | 2208 return holder_handle->GetPropertyAttributePostInterceptor(*receiver_handle, |
| 2207 *name_handle, | 2209 *name_handle, |
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2560 | 2562 |
| 2561 MaybeObject* JSObject::DeletePropertyWithInterceptor(String* name) { | 2563 MaybeObject* JSObject::DeletePropertyWithInterceptor(String* name) { |
| 2562 Isolate* isolate = GetIsolate(); | 2564 Isolate* isolate = GetIsolate(); |
| 2563 HandleScope scope(isolate); | 2565 HandleScope scope(isolate); |
| 2564 Handle<InterceptorInfo> interceptor(GetNamedInterceptor()); | 2566 Handle<InterceptorInfo> interceptor(GetNamedInterceptor()); |
| 2565 Handle<String> name_handle(name); | 2567 Handle<String> name_handle(name); |
| 2566 Handle<JSObject> this_handle(this); | 2568 Handle<JSObject> this_handle(this); |
| 2567 if (!interceptor->deleter()->IsUndefined()) { | 2569 if (!interceptor->deleter()->IsUndefined()) { |
| 2568 v8::NamedPropertyDeleter deleter = | 2570 v8::NamedPropertyDeleter deleter = |
| 2569 v8::ToCData<v8::NamedPropertyDeleter>(interceptor->deleter()); | 2571 v8::ToCData<v8::NamedPropertyDeleter>(interceptor->deleter()); |
| 2570 LOG(ApiNamedPropertyAccess("interceptor-named-delete", *this_handle, name)); | 2572 LOG(isolate, |
| 2573 ApiNamedPropertyAccess("interceptor-named-delete", *this_handle, name)); |
| 2571 CustomArguments args(isolate, interceptor->data(), this, this); | 2574 CustomArguments args(isolate, interceptor->data(), this, this); |
| 2572 v8::AccessorInfo info(args.end()); | 2575 v8::AccessorInfo info(args.end()); |
| 2573 v8::Handle<v8::Boolean> result; | 2576 v8::Handle<v8::Boolean> result; |
| 2574 { | 2577 { |
| 2575 // Leaving JavaScript. | 2578 // Leaving JavaScript. |
| 2576 VMState state(isolate, EXTERNAL); | 2579 VMState state(isolate, EXTERNAL); |
| 2577 result = deleter(v8::Utils::ToLocal(name_handle), info); | 2580 result = deleter(v8::Utils::ToLocal(name_handle), info); |
| 2578 } | 2581 } |
| 2579 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 2582 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
| 2580 if (!result.IsEmpty()) { | 2583 if (!result.IsEmpty()) { |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2628 Heap* heap = isolate->heap(); | 2631 Heap* heap = isolate->heap(); |
| 2629 // Make sure that the top context does not change when doing | 2632 // Make sure that the top context does not change when doing |
| 2630 // callbacks or interceptor calls. | 2633 // callbacks or interceptor calls. |
| 2631 AssertNoContextChange ncc; | 2634 AssertNoContextChange ncc; |
| 2632 HandleScope scope(isolate); | 2635 HandleScope scope(isolate); |
| 2633 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); | 2636 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); |
| 2634 if (interceptor->deleter()->IsUndefined()) return heap->false_value(); | 2637 if (interceptor->deleter()->IsUndefined()) return heap->false_value(); |
| 2635 v8::IndexedPropertyDeleter deleter = | 2638 v8::IndexedPropertyDeleter deleter = |
| 2636 v8::ToCData<v8::IndexedPropertyDeleter>(interceptor->deleter()); | 2639 v8::ToCData<v8::IndexedPropertyDeleter>(interceptor->deleter()); |
| 2637 Handle<JSObject> this_handle(this); | 2640 Handle<JSObject> this_handle(this); |
| 2638 LOG(ApiIndexedPropertyAccess("interceptor-indexed-delete", this, index)); | 2641 LOG(isolate, |
| 2642 ApiIndexedPropertyAccess("interceptor-indexed-delete", this, index)); |
| 2639 CustomArguments args(isolate, interceptor->data(), this, this); | 2643 CustomArguments args(isolate, interceptor->data(), this, this); |
| 2640 v8::AccessorInfo info(args.end()); | 2644 v8::AccessorInfo info(args.end()); |
| 2641 v8::Handle<v8::Boolean> result; | 2645 v8::Handle<v8::Boolean> result; |
| 2642 { | 2646 { |
| 2643 // Leaving JavaScript. | 2647 // Leaving JavaScript. |
| 2644 VMState state(isolate, EXTERNAL); | 2648 VMState state(isolate, EXTERNAL); |
| 2645 result = deleter(index, info); | 2649 result = deleter(index, info); |
| 2646 } | 2650 } |
| 2647 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 2651 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
| 2648 if (!result.IsEmpty()) { | 2652 if (!result.IsEmpty()) { |
| (...skipping 4184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6833 AssertNoContextChange ncc; | 6837 AssertNoContextChange ncc; |
| 6834 HandleScope scope(isolate); | 6838 HandleScope scope(isolate); |
| 6835 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); | 6839 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); |
| 6836 Handle<JSObject> receiver_handle(receiver); | 6840 Handle<JSObject> receiver_handle(receiver); |
| 6837 Handle<JSObject> holder_handle(this); | 6841 Handle<JSObject> holder_handle(this); |
| 6838 CustomArguments args(isolate, interceptor->data(), receiver, this); | 6842 CustomArguments args(isolate, interceptor->data(), receiver, this); |
| 6839 v8::AccessorInfo info(args.end()); | 6843 v8::AccessorInfo info(args.end()); |
| 6840 if (!interceptor->query()->IsUndefined()) { | 6844 if (!interceptor->query()->IsUndefined()) { |
| 6841 v8::IndexedPropertyQuery query = | 6845 v8::IndexedPropertyQuery query = |
| 6842 v8::ToCData<v8::IndexedPropertyQuery>(interceptor->query()); | 6846 v8::ToCData<v8::IndexedPropertyQuery>(interceptor->query()); |
| 6843 LOG(ApiIndexedPropertyAccess("interceptor-indexed-has", this, index)); | 6847 LOG(isolate, |
| 6848 ApiIndexedPropertyAccess("interceptor-indexed-has", this, index)); |
| 6844 v8::Handle<v8::Integer> result; | 6849 v8::Handle<v8::Integer> result; |
| 6845 { | 6850 { |
| 6846 // Leaving JavaScript. | 6851 // Leaving JavaScript. |
| 6847 VMState state(isolate, EXTERNAL); | 6852 VMState state(isolate, EXTERNAL); |
| 6848 result = query(index, info); | 6853 result = query(index, info); |
| 6849 } | 6854 } |
| 6850 if (!result.IsEmpty()) { | 6855 if (!result.IsEmpty()) { |
| 6851 ASSERT(result->IsInt32()); | 6856 ASSERT(result->IsInt32()); |
| 6852 return true; // absence of property is signaled by empty handle. | 6857 return true; // absence of property is signaled by empty handle. |
| 6853 } | 6858 } |
| 6854 } else if (!interceptor->getter()->IsUndefined()) { | 6859 } else if (!interceptor->getter()->IsUndefined()) { |
| 6855 v8::IndexedPropertyGetter getter = | 6860 v8::IndexedPropertyGetter getter = |
| 6856 v8::ToCData<v8::IndexedPropertyGetter>(interceptor->getter()); | 6861 v8::ToCData<v8::IndexedPropertyGetter>(interceptor->getter()); |
| 6857 LOG(ApiIndexedPropertyAccess("interceptor-indexed-has-get", this, index)); | 6862 LOG(isolate, |
| 6863 ApiIndexedPropertyAccess("interceptor-indexed-has-get", this, index)); |
| 6858 v8::Handle<v8::Value> result; | 6864 v8::Handle<v8::Value> result; |
| 6859 { | 6865 { |
| 6860 // Leaving JavaScript. | 6866 // Leaving JavaScript. |
| 6861 VMState state(isolate, EXTERNAL); | 6867 VMState state(isolate, EXTERNAL); |
| 6862 result = getter(index, info); | 6868 result = getter(index, info); |
| 6863 } | 6869 } |
| 6864 if (!result.IsEmpty()) return true; | 6870 if (!result.IsEmpty()) return true; |
| 6865 } | 6871 } |
| 6866 return holder_handle->HasElementPostInterceptor(*receiver_handle, index); | 6872 return holder_handle->HasElementPostInterceptor(*receiver_handle, index); |
| 6867 } | 6873 } |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7013 // Make sure that the top context does not change when doing | 7019 // Make sure that the top context does not change when doing |
| 7014 // callbacks or interceptor calls. | 7020 // callbacks or interceptor calls. |
| 7015 AssertNoContextChange ncc; | 7021 AssertNoContextChange ncc; |
| 7016 HandleScope scope(isolate); | 7022 HandleScope scope(isolate); |
| 7017 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); | 7023 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); |
| 7018 Handle<JSObject> this_handle(this); | 7024 Handle<JSObject> this_handle(this); |
| 7019 Handle<Object> value_handle(value, isolate); | 7025 Handle<Object> value_handle(value, isolate); |
| 7020 if (!interceptor->setter()->IsUndefined()) { | 7026 if (!interceptor->setter()->IsUndefined()) { |
| 7021 v8::IndexedPropertySetter setter = | 7027 v8::IndexedPropertySetter setter = |
| 7022 v8::ToCData<v8::IndexedPropertySetter>(interceptor->setter()); | 7028 v8::ToCData<v8::IndexedPropertySetter>(interceptor->setter()); |
| 7023 LOG(ApiIndexedPropertyAccess("interceptor-indexed-set", this, index)); | 7029 LOG(isolate, |
| 7030 ApiIndexedPropertyAccess("interceptor-indexed-set", this, index)); |
| 7024 CustomArguments args(isolate, interceptor->data(), this, this); | 7031 CustomArguments args(isolate, interceptor->data(), this, this); |
| 7025 v8::AccessorInfo info(args.end()); | 7032 v8::AccessorInfo info(args.end()); |
| 7026 v8::Handle<v8::Value> result; | 7033 v8::Handle<v8::Value> result; |
| 7027 { | 7034 { |
| 7028 // Leaving JavaScript. | 7035 // Leaving JavaScript. |
| 7029 VMState state(isolate, EXTERNAL); | 7036 VMState state(isolate, EXTERNAL); |
| 7030 result = setter(index, v8::Utils::ToLocal(value_handle), info); | 7037 result = setter(index, v8::Utils::ToLocal(value_handle), info); |
| 7031 } | 7038 } |
| 7032 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 7039 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
| 7033 if (!result.IsEmpty()) return *value_handle; | 7040 if (!result.IsEmpty()) return *value_handle; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 7052 // api style callbacks. | 7059 // api style callbacks. |
| 7053 if (structure->IsAccessorInfo()) { | 7060 if (structure->IsAccessorInfo()) { |
| 7054 AccessorInfo* data = AccessorInfo::cast(structure); | 7061 AccessorInfo* data = AccessorInfo::cast(structure); |
| 7055 Object* fun_obj = data->getter(); | 7062 Object* fun_obj = data->getter(); |
| 7056 v8::AccessorGetter call_fun = v8::ToCData<v8::AccessorGetter>(fun_obj); | 7063 v8::AccessorGetter call_fun = v8::ToCData<v8::AccessorGetter>(fun_obj); |
| 7057 HandleScope scope(isolate); | 7064 HandleScope scope(isolate); |
| 7058 Handle<JSObject> self(JSObject::cast(receiver)); | 7065 Handle<JSObject> self(JSObject::cast(receiver)); |
| 7059 Handle<JSObject> holder_handle(JSObject::cast(holder)); | 7066 Handle<JSObject> holder_handle(JSObject::cast(holder)); |
| 7060 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); | 7067 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); |
| 7061 Handle<String> key(isolate->factory()->NumberToString(number)); | 7068 Handle<String> key(isolate->factory()->NumberToString(number)); |
| 7062 LOG(ApiNamedPropertyAccess("load", *self, *key)); | 7069 LOG(isolate, ApiNamedPropertyAccess("load", *self, *key)); |
| 7063 CustomArguments args(isolate, data->data(), *self, *holder_handle); | 7070 CustomArguments args(isolate, data->data(), *self, *holder_handle); |
| 7064 v8::AccessorInfo info(args.end()); | 7071 v8::AccessorInfo info(args.end()); |
| 7065 v8::Handle<v8::Value> result; | 7072 v8::Handle<v8::Value> result; |
| 7066 { | 7073 { |
| 7067 // Leaving JavaScript. | 7074 // Leaving JavaScript. |
| 7068 VMState state(isolate, EXTERNAL); | 7075 VMState state(isolate, EXTERNAL); |
| 7069 result = call_fun(v8::Utils::ToLocal(key), info); | 7076 result = call_fun(v8::Utils::ToLocal(key), info); |
| 7070 } | 7077 } |
| 7071 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 7078 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
| 7072 if (result.IsEmpty()) return isolate->heap()->undefined_value(); | 7079 if (result.IsEmpty()) return isolate->heap()->undefined_value(); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7107 ASSERT(!structure->IsProxy()); | 7114 ASSERT(!structure->IsProxy()); |
| 7108 | 7115 |
| 7109 if (structure->IsAccessorInfo()) { | 7116 if (structure->IsAccessorInfo()) { |
| 7110 // api style callbacks | 7117 // api style callbacks |
| 7111 AccessorInfo* data = AccessorInfo::cast(structure); | 7118 AccessorInfo* data = AccessorInfo::cast(structure); |
| 7112 Object* call_obj = data->setter(); | 7119 Object* call_obj = data->setter(); |
| 7113 v8::AccessorSetter call_fun = v8::ToCData<v8::AccessorSetter>(call_obj); | 7120 v8::AccessorSetter call_fun = v8::ToCData<v8::AccessorSetter>(call_obj); |
| 7114 if (call_fun == NULL) return value; | 7121 if (call_fun == NULL) return value; |
| 7115 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); | 7122 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); |
| 7116 Handle<String> key(isolate->factory()->NumberToString(number)); | 7123 Handle<String> key(isolate->factory()->NumberToString(number)); |
| 7117 LOG(ApiNamedPropertyAccess("store", this, *key)); | 7124 LOG(isolate, ApiNamedPropertyAccess("store", this, *key)); |
| 7118 CustomArguments args(isolate, data->data(), this, JSObject::cast(holder)); | 7125 CustomArguments args(isolate, data->data(), this, JSObject::cast(holder)); |
| 7119 v8::AccessorInfo info(args.end()); | 7126 v8::AccessorInfo info(args.end()); |
| 7120 { | 7127 { |
| 7121 // Leaving JavaScript. | 7128 // Leaving JavaScript. |
| 7122 VMState state(isolate, EXTERNAL); | 7129 VMState state(isolate, EXTERNAL); |
| 7123 call_fun(v8::Utils::ToLocal(key), | 7130 call_fun(v8::Utils::ToLocal(key), |
| 7124 v8::Utils::ToLocal(value_handle), | 7131 v8::Utils::ToLocal(value_handle), |
| 7125 info); | 7132 info); |
| 7126 } | 7133 } |
| 7127 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 7134 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
| (...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7476 // callbacks or interceptor calls. | 7483 // callbacks or interceptor calls. |
| 7477 AssertNoContextChange ncc; | 7484 AssertNoContextChange ncc; |
| 7478 HandleScope scope(isolate); | 7485 HandleScope scope(isolate); |
| 7479 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); | 7486 Handle<InterceptorInfo> interceptor(GetIndexedInterceptor()); |
| 7480 Handle<Object> this_handle(receiver); | 7487 Handle<Object> this_handle(receiver); |
| 7481 Handle<JSObject> holder_handle(this); | 7488 Handle<JSObject> holder_handle(this); |
| 7482 | 7489 |
| 7483 if (!interceptor->getter()->IsUndefined()) { | 7490 if (!interceptor->getter()->IsUndefined()) { |
| 7484 v8::IndexedPropertyGetter getter = | 7491 v8::IndexedPropertyGetter getter = |
| 7485 v8::ToCData<v8::IndexedPropertyGetter>(interceptor->getter()); | 7492 v8::ToCData<v8::IndexedPropertyGetter>(interceptor->getter()); |
| 7486 LOG(ApiIndexedPropertyAccess("interceptor-indexed-get", this, index)); | 7493 LOG(isolate, |
| 7494 ApiIndexedPropertyAccess("interceptor-indexed-get", this, index)); |
| 7487 CustomArguments args(isolate, interceptor->data(), receiver, this); | 7495 CustomArguments args(isolate, interceptor->data(), receiver, this); |
| 7488 v8::AccessorInfo info(args.end()); | 7496 v8::AccessorInfo info(args.end()); |
| 7489 v8::Handle<v8::Value> result; | 7497 v8::Handle<v8::Value> result; |
| 7490 { | 7498 { |
| 7491 // Leaving JavaScript. | 7499 // Leaving JavaScript. |
| 7492 VMState state(isolate, EXTERNAL); | 7500 VMState state(isolate, EXTERNAL); |
| 7493 result = getter(index, info); | 7501 result = getter(index, info); |
| 7494 } | 7502 } |
| 7495 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 7503 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
| 7496 if (!result.IsEmpty()) return *v8::Utils::OpenHandle(*result); | 7504 if (!result.IsEmpty()) return *v8::Utils::OpenHandle(*result); |
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7824 Isolate* isolate = GetIsolate(); | 7832 Isolate* isolate = GetIsolate(); |
| 7825 InterceptorInfo* interceptor = GetNamedInterceptor(); | 7833 InterceptorInfo* interceptor = GetNamedInterceptor(); |
| 7826 HandleScope scope(isolate); | 7834 HandleScope scope(isolate); |
| 7827 Handle<JSObject> receiver_handle(receiver); | 7835 Handle<JSObject> receiver_handle(receiver); |
| 7828 Handle<JSObject> holder_handle(this); | 7836 Handle<JSObject> holder_handle(this); |
| 7829 Handle<String> name_handle(name); | 7837 Handle<String> name_handle(name); |
| 7830 | 7838 |
| 7831 if (!interceptor->getter()->IsUndefined()) { | 7839 if (!interceptor->getter()->IsUndefined()) { |
| 7832 v8::NamedPropertyGetter getter = | 7840 v8::NamedPropertyGetter getter = |
| 7833 v8::ToCData<v8::NamedPropertyGetter>(interceptor->getter()); | 7841 v8::ToCData<v8::NamedPropertyGetter>(interceptor->getter()); |
| 7834 LOG(ApiNamedPropertyAccess("interceptor-named-get", *holder_handle, name)); | 7842 LOG(isolate, |
| 7843 ApiNamedPropertyAccess("interceptor-named-get", *holder_handle, name)); |
| 7835 CustomArguments args(isolate, interceptor->data(), receiver, this); | 7844 CustomArguments args(isolate, interceptor->data(), receiver, this); |
| 7836 v8::AccessorInfo info(args.end()); | 7845 v8::AccessorInfo info(args.end()); |
| 7837 v8::Handle<v8::Value> result; | 7846 v8::Handle<v8::Value> result; |
| 7838 { | 7847 { |
| 7839 // Leaving JavaScript. | 7848 // Leaving JavaScript. |
| 7840 VMState state(isolate, EXTERNAL); | 7849 VMState state(isolate, EXTERNAL); |
| 7841 result = getter(v8::Utils::ToLocal(name_handle), info); | 7850 result = getter(v8::Utils::ToLocal(name_handle), info); |
| 7842 } | 7851 } |
| 7843 RETURN_IF_SCHEDULED_EXCEPTION(isolate); | 7852 RETURN_IF_SCHEDULED_EXCEPTION(isolate); |
| 7844 if (!result.IsEmpty()) { | 7853 if (!result.IsEmpty()) { |
| (...skipping 2300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10145 if (break_point_objects()->IsUndefined()) return 0; | 10154 if (break_point_objects()->IsUndefined()) return 0; |
| 10146 // Single beak point. | 10155 // Single beak point. |
| 10147 if (!break_point_objects()->IsFixedArray()) return 1; | 10156 if (!break_point_objects()->IsFixedArray()) return 1; |
| 10148 // Multiple break points. | 10157 // Multiple break points. |
| 10149 return FixedArray::cast(break_point_objects())->length(); | 10158 return FixedArray::cast(break_point_objects())->length(); |
| 10150 } | 10159 } |
| 10151 #endif | 10160 #endif |
| 10152 | 10161 |
| 10153 | 10162 |
| 10154 } } // namespace v8::internal | 10163 } } // namespace v8::internal |
| OLD | NEW |