| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 412 Handle<DeclaredAccessorInfo>::cast(structure), | 412 Handle<DeclaredAccessorInfo>::cast(structure), |
| 413 isolate); | 413 isolate); |
| 414 } | 414 } |
| 415 | 415 |
| 416 Handle<ExecutableAccessorInfo> data = | 416 Handle<ExecutableAccessorInfo> data = |
| 417 Handle<ExecutableAccessorInfo>::cast(structure); | 417 Handle<ExecutableAccessorInfo>::cast(structure); |
| 418 v8::AccessorGetterCallback call_fun = | 418 v8::AccessorGetterCallback call_fun = |
| 419 v8::ToCData<v8::AccessorGetterCallback>(data->getter()); | 419 v8::ToCData<v8::AccessorGetterCallback>(data->getter()); |
| 420 if (call_fun == NULL) return isolate->factory()->undefined_value(); | 420 if (call_fun == NULL) return isolate->factory()->undefined_value(); |
| 421 | 421 |
| 422 Handle<JSObject> self = Handle<JSObject>::cast(receiver); | |
| 423 Handle<String> key = Handle<String>::cast(name); | 422 Handle<String> key = Handle<String>::cast(name); |
| 424 LOG(isolate, ApiNamedPropertyAccess("load", *self, *name)); | 423 LOG(isolate, ApiNamedPropertyAccess("load", *object, *name)); |
| 425 PropertyCallbackArguments args(isolate, data->data(), *self, *object); | 424 PropertyCallbackArguments args(isolate, data->data(), *receiver, *object); |
| 426 v8::Handle<v8::Value> result = | 425 v8::Handle<v8::Value> result = |
| 427 args.Call(call_fun, v8::Utils::ToLocal(key)); | 426 args.Call(call_fun, v8::Utils::ToLocal(key)); |
| 428 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); | 427 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); |
| 429 if (result.IsEmpty()) { | 428 if (result.IsEmpty()) { |
| 430 return isolate->factory()->undefined_value(); | 429 return isolate->factory()->undefined_value(); |
| 431 } | 430 } |
| 432 Handle<Object> return_value = v8::Utils::OpenHandle(*result); | 431 Handle<Object> return_value = v8::Utils::OpenHandle(*result); |
| 433 return_value->VerifyApiCallResultType(); | 432 return_value->VerifyApiCallResultType(); |
| 434 // Rebox handle before return. | 433 // Rebox handle before return. |
| 435 return handle(*return_value, isolate); | 434 return handle(*return_value, isolate); |
| (...skipping 2441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2877 return isolate->Throw<Object>(error); | 2876 return isolate->Throw<Object>(error); |
| 2878 } | 2877 } |
| 2879 // TODO(rossberg): Support symbols in the API. | 2878 // TODO(rossberg): Support symbols in the API. |
| 2880 if (name->IsSymbol()) return value; | 2879 if (name->IsSymbol()) return value; |
| 2881 Object* call_obj = data->setter(); | 2880 Object* call_obj = data->setter(); |
| 2882 v8::AccessorSetterCallback call_fun = | 2881 v8::AccessorSetterCallback call_fun = |
| 2883 v8::ToCData<v8::AccessorSetterCallback>(call_obj); | 2882 v8::ToCData<v8::AccessorSetterCallback>(call_obj); |
| 2884 if (call_fun == NULL) return value; | 2883 if (call_fun == NULL) return value; |
| 2885 Handle<String> key = Handle<String>::cast(name); | 2884 Handle<String> key = Handle<String>::cast(name); |
| 2886 LOG(isolate, ApiNamedPropertyAccess("store", *object, *name)); | 2885 LOG(isolate, ApiNamedPropertyAccess("store", *object, *name)); |
| 2887 PropertyCallbackArguments args( | 2886 PropertyCallbackArguments args(isolate, data->data(), *object, *holder); |
| 2888 isolate, data->data(), *object, JSObject::cast(*holder)); | |
| 2889 args.Call(call_fun, | 2887 args.Call(call_fun, |
| 2890 v8::Utils::ToLocal(key), | 2888 v8::Utils::ToLocal(key), |
| 2891 v8::Utils::ToLocal(value)); | 2889 v8::Utils::ToLocal(value)); |
| 2892 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); | 2890 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); |
| 2893 return value; | 2891 return value; |
| 2894 } | 2892 } |
| 2895 | 2893 |
| 2896 if (structure->IsAccessorPair()) { | 2894 if (structure->IsAccessorPair()) { |
| 2897 Handle<Object> setter(AccessorPair::cast(*structure)->setter(), isolate); | 2895 Handle<Object> setter(AccessorPair::cast(*structure)->setter(), isolate); |
| 2898 if (setter->IsSpecFunction()) { | 2896 if (setter->IsSpecFunction()) { |
| (...skipping 9231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12130 ASSERT(!structure->IsForeign()); | 12128 ASSERT(!structure->IsForeign()); |
| 12131 | 12129 |
| 12132 // api style callbacks. | 12130 // api style callbacks. |
| 12133 if (structure->IsExecutableAccessorInfo()) { | 12131 if (structure->IsExecutableAccessorInfo()) { |
| 12134 Handle<ExecutableAccessorInfo> data = | 12132 Handle<ExecutableAccessorInfo> data = |
| 12135 Handle<ExecutableAccessorInfo>::cast(structure); | 12133 Handle<ExecutableAccessorInfo>::cast(structure); |
| 12136 Object* fun_obj = data->getter(); | 12134 Object* fun_obj = data->getter(); |
| 12137 v8::AccessorGetterCallback call_fun = | 12135 v8::AccessorGetterCallback call_fun = |
| 12138 v8::ToCData<v8::AccessorGetterCallback>(fun_obj); | 12136 v8::ToCData<v8::AccessorGetterCallback>(fun_obj); |
| 12139 if (call_fun == NULL) return isolate->factory()->undefined_value(); | 12137 if (call_fun == NULL) return isolate->factory()->undefined_value(); |
| 12140 Handle<JSObject> self = Handle<JSObject>::cast(receiver); | |
| 12141 Handle<JSObject> holder_handle = Handle<JSObject>::cast(holder); | 12138 Handle<JSObject> holder_handle = Handle<JSObject>::cast(holder); |
| 12142 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); | 12139 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); |
| 12143 Handle<String> key = isolate->factory()->NumberToString(number); | 12140 Handle<String> key = isolate->factory()->NumberToString(number); |
| 12144 LOG(isolate, ApiNamedPropertyAccess("load", *self, *key)); | 12141 LOG(isolate, ApiNamedPropertyAccess("load", *holder_handle, *key)); |
| 12145 PropertyCallbackArguments | 12142 PropertyCallbackArguments |
| 12146 args(isolate, data->data(), *self, *holder_handle); | 12143 args(isolate, data->data(), *receiver, *holder_handle); |
| 12147 v8::Handle<v8::Value> result = args.Call(call_fun, v8::Utils::ToLocal(key)); | 12144 v8::Handle<v8::Value> result = args.Call(call_fun, v8::Utils::ToLocal(key)); |
| 12148 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); | 12145 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); |
| 12149 if (result.IsEmpty()) return isolate->factory()->undefined_value(); | 12146 if (result.IsEmpty()) return isolate->factory()->undefined_value(); |
| 12150 Handle<Object> result_internal = v8::Utils::OpenHandle(*result); | 12147 Handle<Object> result_internal = v8::Utils::OpenHandle(*result); |
| 12151 result_internal->VerifyApiCallResultType(); | 12148 result_internal->VerifyApiCallResultType(); |
| 12152 // Rebox handle before return. | 12149 // Rebox handle before return. |
| 12153 return handle(*result_internal, isolate); | 12150 return handle(*result_internal, isolate); |
| 12154 } | 12151 } |
| 12155 | 12152 |
| 12156 // __defineGetter__ callback | 12153 // __defineGetter__ callback |
| (...skipping 4437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16594 #define ERROR_MESSAGES_TEXTS(C, T) T, | 16591 #define ERROR_MESSAGES_TEXTS(C, T) T, |
| 16595 static const char* error_messages_[] = { | 16592 static const char* error_messages_[] = { |
| 16596 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 16593 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
| 16597 }; | 16594 }; |
| 16598 #undef ERROR_MESSAGES_TEXTS | 16595 #undef ERROR_MESSAGES_TEXTS |
| 16599 return error_messages_[reason]; | 16596 return error_messages_[reason]; |
| 16600 } | 16597 } |
| 16601 | 16598 |
| 16602 | 16599 |
| 16603 } } // namespace v8::internal | 16600 } } // namespace v8::internal |
| OLD | NEW |