| 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 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 375 object->EnsureWritableFastElements(), | 375 object->EnsureWritableFastElements(), |
| 376 FixedArray); | 376 FixedArray); |
| 377 } | 377 } |
| 378 | 378 |
| 379 | 379 |
| 380 MaybeHandle<Object> JSObject::GetPropertyWithCallback(Handle<JSObject> object, | 380 MaybeHandle<Object> JSObject::GetPropertyWithCallback(Handle<JSObject> object, |
| 381 Handle<Object> receiver, | 381 Handle<Object> receiver, |
| 382 Handle<Object> structure, | 382 Handle<Object> structure, |
| 383 Handle<Name> name) { | 383 Handle<Name> name) { |
| 384 Isolate* isolate = name->GetIsolate(); | 384 Isolate* isolate = name->GetIsolate(); |
| 385 // To accommodate both the old and the new api we switch on the | 385 ASSERT(!structure->IsForeign()); |
| 386 // data structure used to store the callbacks. Eventually foreign | |
| 387 // callbacks should be phased out. | |
| 388 if (structure->IsForeign()) { | |
| 389 AccessorDescriptor* callback = | |
| 390 reinterpret_cast<AccessorDescriptor*>( | |
| 391 Handle<Foreign>::cast(structure)->foreign_address()); | |
| 392 CALL_HEAP_FUNCTION(isolate, | |
| 393 (callback->getter)(isolate, *receiver, callback->data), | |
| 394 Object); | |
| 395 } | |
| 396 | |
| 397 // api style callbacks. | 386 // api style callbacks. |
| 398 if (structure->IsAccessorInfo()) { | 387 if (structure->IsAccessorInfo()) { |
| 399 Handle<AccessorInfo> accessor_info = Handle<AccessorInfo>::cast(structure); | 388 Handle<AccessorInfo> accessor_info = Handle<AccessorInfo>::cast(structure); |
| 400 if (!accessor_info->IsCompatibleReceiver(*receiver)) { | 389 if (!accessor_info->IsCompatibleReceiver(*receiver)) { |
| 401 Handle<Object> args[2] = { name, receiver }; | 390 Handle<Object> args[2] = { name, receiver }; |
| 402 Handle<Object> error = | 391 Handle<Object> error = |
| 403 isolate->factory()->NewTypeError("incompatible_method_receiver", | 392 isolate->factory()->NewTypeError("incompatible_method_receiver", |
| 404 HandleVector(args, | 393 HandleVector(args, |
| 405 ARRAY_SIZE(args))); | 394 ARRAY_SIZE(args))); |
| 406 return isolate->Throw<Object>(error); | 395 return isolate->Throw<Object>(error); |
| (...skipping 2610 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3017 Handle<Object> structure, | 3006 Handle<Object> structure, |
| 3018 Handle<Name> name, | 3007 Handle<Name> name, |
| 3019 Handle<Object> value, | 3008 Handle<Object> value, |
| 3020 Handle<JSObject> holder, | 3009 Handle<JSObject> holder, |
| 3021 StrictMode strict_mode) { | 3010 StrictMode strict_mode) { |
| 3022 Isolate* isolate = object->GetIsolate(); | 3011 Isolate* isolate = object->GetIsolate(); |
| 3023 | 3012 |
| 3024 // We should never get here to initialize a const with the hole | 3013 // We should never get here to initialize a const with the hole |
| 3025 // value since a const declaration would conflict with the setter. | 3014 // value since a const declaration would conflict with the setter. |
| 3026 ASSERT(!value->IsTheHole()); | 3015 ASSERT(!value->IsTheHole()); |
| 3027 | 3016 ASSERT(!structure->IsForeign()); |
| 3028 // To accommodate both the old and the new api we switch on the | |
| 3029 // data structure used to store the callbacks. Eventually foreign | |
| 3030 // callbacks should be phased out. | |
| 3031 if (structure->IsForeign()) { | |
| 3032 AccessorDescriptor* callback = | |
| 3033 reinterpret_cast<AccessorDescriptor*>( | |
| 3034 Handle<Foreign>::cast(structure)->foreign_address()); | |
| 3035 CALL_AND_RETRY_OR_DIE(isolate, | |
| 3036 (callback->setter)( | |
| 3037 isolate, *object, *value, callback->data), | |
| 3038 break, | |
| 3039 return Handle<Object>()); | |
| 3040 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); | |
| 3041 return value; | |
| 3042 } | |
| 3043 | |
| 3044 if (structure->IsExecutableAccessorInfo()) { | 3017 if (structure->IsExecutableAccessorInfo()) { |
| 3045 // api style callbacks | 3018 // api style callbacks |
| 3046 ExecutableAccessorInfo* data = ExecutableAccessorInfo::cast(*structure); | 3019 ExecutableAccessorInfo* data = ExecutableAccessorInfo::cast(*structure); |
| 3047 if (!data->IsCompatibleReceiver(*object)) { | 3020 if (!data->IsCompatibleReceiver(*object)) { |
| 3048 Handle<Object> args[2] = { name, object }; | 3021 Handle<Object> args[2] = { name, object }; |
| 3049 Handle<Object> error = | 3022 Handle<Object> error = |
| 3050 isolate->factory()->NewTypeError("incompatible_method_receiver", | 3023 isolate->factory()->NewTypeError("incompatible_method_receiver", |
| 3051 HandleVector(args, | 3024 HandleVector(args, |
| 3052 ARRAY_SIZE(args))); | 3025 ARRAY_SIZE(args))); |
| 3053 return isolate->Throw<Object>(error); | 3026 return isolate->Throw<Object>(error); |
| (...skipping 9525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12579 | 12552 |
| 12580 | 12553 |
| 12581 MaybeHandle<Object> JSObject::GetElementWithCallback( | 12554 MaybeHandle<Object> JSObject::GetElementWithCallback( |
| 12582 Handle<JSObject> object, | 12555 Handle<JSObject> object, |
| 12583 Handle<Object> receiver, | 12556 Handle<Object> receiver, |
| 12584 Handle<Object> structure, | 12557 Handle<Object> structure, |
| 12585 uint32_t index, | 12558 uint32_t index, |
| 12586 Handle<Object> holder) { | 12559 Handle<Object> holder) { |
| 12587 Isolate* isolate = object->GetIsolate(); | 12560 Isolate* isolate = object->GetIsolate(); |
| 12588 ASSERT(!structure->IsForeign()); | 12561 ASSERT(!structure->IsForeign()); |
| 12589 | |
| 12590 // api style callbacks. | 12562 // api style callbacks. |
| 12591 if (structure->IsExecutableAccessorInfo()) { | 12563 if (structure->IsExecutableAccessorInfo()) { |
| 12592 Handle<ExecutableAccessorInfo> data = | 12564 Handle<ExecutableAccessorInfo> data = |
| 12593 Handle<ExecutableAccessorInfo>::cast(structure); | 12565 Handle<ExecutableAccessorInfo>::cast(structure); |
| 12594 Object* fun_obj = data->getter(); | 12566 Object* fun_obj = data->getter(); |
| 12595 v8::AccessorGetterCallback call_fun = | 12567 v8::AccessorGetterCallback call_fun = |
| 12596 v8::ToCData<v8::AccessorGetterCallback>(fun_obj); | 12568 v8::ToCData<v8::AccessorGetterCallback>(fun_obj); |
| 12597 if (call_fun == NULL) return isolate->factory()->undefined_value(); | 12569 if (call_fun == NULL) return isolate->factory()->undefined_value(); |
| 12598 Handle<JSObject> holder_handle = Handle<JSObject>::cast(holder); | 12570 Handle<JSObject> holder_handle = Handle<JSObject>::cast(holder); |
| 12599 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); | 12571 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12637 Handle<Object> structure, | 12609 Handle<Object> structure, |
| 12638 uint32_t index, | 12610 uint32_t index, |
| 12639 Handle<Object> value, | 12611 Handle<Object> value, |
| 12640 Handle<JSObject> holder, | 12612 Handle<JSObject> holder, |
| 12641 StrictMode strict_mode) { | 12613 StrictMode strict_mode) { |
| 12642 Isolate* isolate = object->GetIsolate(); | 12614 Isolate* isolate = object->GetIsolate(); |
| 12643 | 12615 |
| 12644 // We should never get here to initialize a const with the hole | 12616 // We should never get here to initialize a const with the hole |
| 12645 // value since a const declaration would conflict with the setter. | 12617 // value since a const declaration would conflict with the setter. |
| 12646 ASSERT(!value->IsTheHole()); | 12618 ASSERT(!value->IsTheHole()); |
| 12647 | |
| 12648 // To accommodate both the old and the new api we switch on the | |
| 12649 // data structure used to store the callbacks. Eventually foreign | |
| 12650 // callbacks should be phased out. | |
| 12651 ASSERT(!structure->IsForeign()); | 12619 ASSERT(!structure->IsForeign()); |
| 12652 | |
| 12653 if (structure->IsExecutableAccessorInfo()) { | 12620 if (structure->IsExecutableAccessorInfo()) { |
| 12654 // api style callbacks | 12621 // api style callbacks |
| 12655 Handle<ExecutableAccessorInfo> data = | 12622 Handle<ExecutableAccessorInfo> data = |
| 12656 Handle<ExecutableAccessorInfo>::cast(structure); | 12623 Handle<ExecutableAccessorInfo>::cast(structure); |
| 12657 Object* call_obj = data->setter(); | 12624 Object* call_obj = data->setter(); |
| 12658 v8::AccessorSetterCallback call_fun = | 12625 v8::AccessorSetterCallback call_fun = |
| 12659 v8::ToCData<v8::AccessorSetterCallback>(call_obj); | 12626 v8::ToCData<v8::AccessorSetterCallback>(call_obj); |
| 12660 if (call_fun == NULL) return value; | 12627 if (call_fun == NULL) return value; |
| 12661 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); | 12628 Handle<Object> number = isolate->factory()->NewNumberFromUint(index); |
| 12662 Handle<String> key(isolate->factory()->NumberToString(number)); | 12629 Handle<String> key(isolate->factory()->NumberToString(number)); |
| (...skipping 4663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 17326 #define ERROR_MESSAGES_TEXTS(C, T) T, | 17293 #define ERROR_MESSAGES_TEXTS(C, T) T, |
| 17327 static const char* error_messages_[] = { | 17294 static const char* error_messages_[] = { |
| 17328 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 17295 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
| 17329 }; | 17296 }; |
| 17330 #undef ERROR_MESSAGES_TEXTS | 17297 #undef ERROR_MESSAGES_TEXTS |
| 17331 return error_messages_[reason]; | 17298 return error_messages_[reason]; |
| 17332 } | 17299 } |
| 17333 | 17300 |
| 17334 | 17301 |
| 17335 } } // namespace v8::internal | 17302 } } // namespace v8::internal |
| OLD | NEW |