| 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 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 478 Debug* debug = isolate->debug(); | 478 Debug* debug = isolate->debug(); |
| 479 // Handle stepping into a getter if step into is active. | 479 // Handle stepping into a getter if step into is active. |
| 480 // TODO(rossberg): should this apply to getters that are function proxies? | 480 // TODO(rossberg): should this apply to getters that are function proxies? |
| 481 if (debug->StepInActive() && fun->IsJSFunction()) { | 481 if (debug->StepInActive() && fun->IsJSFunction()) { |
| 482 debug->HandleStepIn( | 482 debug->HandleStepIn( |
| 483 Handle<JSFunction>::cast(fun), Handle<Object>::null(), 0, false); | 483 Handle<JSFunction>::cast(fun), Handle<Object>::null(), 0, false); |
| 484 } | 484 } |
| 485 #endif | 485 #endif |
| 486 | 486 |
| 487 bool has_pending_exception; | 487 bool has_pending_exception; |
| 488 Handle<Object> result = | 488 Handle<Object> result = Execution::Call( |
| 489 Execution::Call(fun, self, 0, NULL, &has_pending_exception, true); | 489 isolate, fun, self, 0, NULL, &has_pending_exception, true); |
| 490 // Check for pending exception and return the result. | 490 // Check for pending exception and return the result. |
| 491 if (has_pending_exception) return Failure::Exception(); | 491 if (has_pending_exception) return Failure::Exception(); |
| 492 return *result; | 492 return *result; |
| 493 } | 493 } |
| 494 | 494 |
| 495 | 495 |
| 496 // Only deal with CALLBACKS and INTERCEPTOR | 496 // Only deal with CALLBACKS and INTERCEPTOR |
| 497 MaybeObject* JSObject::GetPropertyWithFailedAccessCheck( | 497 MaybeObject* JSObject::GetPropertyWithFailedAccessCheck( |
| 498 Object* receiver, | 498 Object* receiver, |
| 499 LookupResult* result, | 499 LookupResult* result, |
| (...skipping 1582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2082 Handle<Name> name, | 2082 Handle<Name> name, |
| 2083 Handle<Object> old_value) { | 2083 Handle<Object> old_value) { |
| 2084 Isolate* isolate = object->GetIsolate(); | 2084 Isolate* isolate = object->GetIsolate(); |
| 2085 HandleScope scope(isolate); | 2085 HandleScope scope(isolate); |
| 2086 Handle<String> type = isolate->factory()->InternalizeUtf8String(type_str); | 2086 Handle<String> type = isolate->factory()->InternalizeUtf8String(type_str); |
| 2087 if (object->IsJSGlobalObject()) { | 2087 if (object->IsJSGlobalObject()) { |
| 2088 object = handle(JSGlobalObject::cast(*object)->global_receiver(), isolate); | 2088 object = handle(JSGlobalObject::cast(*object)->global_receiver(), isolate); |
| 2089 } | 2089 } |
| 2090 Handle<Object> args[] = { type, object, name, old_value }; | 2090 Handle<Object> args[] = { type, object, name, old_value }; |
| 2091 bool threw; | 2091 bool threw; |
| 2092 Execution::Call(Handle<JSFunction>(isolate->observers_notify_change()), | 2092 Execution::Call(isolate, |
| 2093 Handle<JSFunction>(isolate->observers_notify_change()), |
| 2093 isolate->factory()->undefined_value(), | 2094 isolate->factory()->undefined_value(), |
| 2094 old_value->IsTheHole() ? 3 : 4, args, | 2095 old_value->IsTheHole() ? 3 : 4, args, |
| 2095 &threw); | 2096 &threw); |
| 2096 ASSERT(!threw); | 2097 ASSERT(!threw); |
| 2097 } | 2098 } |
| 2098 | 2099 |
| 2099 | 2100 |
| 2100 void JSObject::DeliverChangeRecords(Isolate* isolate) { | 2101 void JSObject::DeliverChangeRecords(Isolate* isolate) { |
| 2101 ASSERT(isolate->observer_delivery_pending()); | 2102 ASSERT(isolate->observer_delivery_pending()); |
| 2102 bool threw = false; | 2103 bool threw = false; |
| 2103 Execution::Call( | 2104 Execution::Call( |
| 2105 isolate, |
| 2104 isolate->observers_deliver_changes(), | 2106 isolate->observers_deliver_changes(), |
| 2105 isolate->factory()->undefined_value(), | 2107 isolate->factory()->undefined_value(), |
| 2106 0, | 2108 0, |
| 2107 NULL, | 2109 NULL, |
| 2108 &threw); | 2110 &threw); |
| 2109 ASSERT(!threw); | 2111 ASSERT(!threw); |
| 2110 isolate->set_observer_delivery_pending(false); | 2112 isolate->set_observer_delivery_pending(false); |
| 2111 } | 2113 } |
| 2112 | 2114 |
| 2113 | 2115 |
| (...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2870 Debug* debug = isolate->debug(); | 2872 Debug* debug = isolate->debug(); |
| 2871 // Handle stepping into a setter if step into is active. | 2873 // Handle stepping into a setter if step into is active. |
| 2872 // TODO(rossberg): should this apply to getters that are function proxies? | 2874 // TODO(rossberg): should this apply to getters that are function proxies? |
| 2873 if (debug->StepInActive() && fun->IsJSFunction()) { | 2875 if (debug->StepInActive() && fun->IsJSFunction()) { |
| 2874 debug->HandleStepIn( | 2876 debug->HandleStepIn( |
| 2875 Handle<JSFunction>::cast(fun), Handle<Object>::null(), 0, false); | 2877 Handle<JSFunction>::cast(fun), Handle<Object>::null(), 0, false); |
| 2876 } | 2878 } |
| 2877 #endif | 2879 #endif |
| 2878 bool has_pending_exception; | 2880 bool has_pending_exception; |
| 2879 Handle<Object> argv[] = { value_handle }; | 2881 Handle<Object> argv[] = { value_handle }; |
| 2880 Execution::Call(fun, self, ARRAY_SIZE(argv), argv, &has_pending_exception); | 2882 Execution::Call( |
| 2883 isolate, fun, self, ARRAY_SIZE(argv), argv, &has_pending_exception); |
| 2881 // Check for pending exception and return the result. | 2884 // Check for pending exception and return the result. |
| 2882 if (has_pending_exception) return Failure::Exception(); | 2885 if (has_pending_exception) return Failure::Exception(); |
| 2883 return *value_handle; | 2886 return *value_handle; |
| 2884 } | 2887 } |
| 2885 | 2888 |
| 2886 | 2889 |
| 2887 MaybeObject* JSObject::SetElementWithCallbackSetterInPrototypes( | 2890 MaybeObject* JSObject::SetElementWithCallbackSetterInPrototypes( |
| 2888 uint32_t index, | 2891 uint32_t index, |
| 2889 Object* value, | 2892 Object* value, |
| 2890 bool* found, | 2893 bool* found, |
| (...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3485 if (isolate->has_pending_exception()) return Failure::Exception(); | 3488 if (isolate->has_pending_exception()) return Failure::Exception(); |
| 3486 | 3489 |
| 3487 if (result->IsUndefined()) { | 3490 if (result->IsUndefined()) { |
| 3488 *done = false; | 3491 *done = false; |
| 3489 return isolate->heap()->the_hole_value(); | 3492 return isolate->heap()->the_hole_value(); |
| 3490 } | 3493 } |
| 3491 | 3494 |
| 3492 // Emulate [[GetProperty]] semantics for proxies. | 3495 // Emulate [[GetProperty]] semantics for proxies. |
| 3493 bool has_pending_exception; | 3496 bool has_pending_exception; |
| 3494 Handle<Object> argv[] = { result }; | 3497 Handle<Object> argv[] = { result }; |
| 3495 Handle<Object> desc = | 3498 Handle<Object> desc = Execution::Call( |
| 3496 Execution::Call(isolate->to_complete_property_descriptor(), result, | 3499 isolate, isolate->to_complete_property_descriptor(), result, |
| 3497 ARRAY_SIZE(argv), argv, &has_pending_exception); | 3500 ARRAY_SIZE(argv), argv, &has_pending_exception); |
| 3498 if (has_pending_exception) return Failure::Exception(); | 3501 if (has_pending_exception) return Failure::Exception(); |
| 3499 | 3502 |
| 3500 // [[GetProperty]] requires to check that all properties are configurable. | 3503 // [[GetProperty]] requires to check that all properties are configurable. |
| 3501 Handle<String> configurable_name = | 3504 Handle<String> configurable_name = |
| 3502 isolate->factory()->InternalizeOneByteString( | 3505 isolate->factory()->InternalizeOneByteString( |
| 3503 STATIC_ASCII_VECTOR("configurable_")); | 3506 STATIC_ASCII_VECTOR("configurable_")); |
| 3504 Handle<Object> configurable( | 3507 Handle<Object> configurable( |
| 3505 v8::internal::GetProperty(isolate, desc, configurable_name)); | 3508 v8::internal::GetProperty(isolate, desc, configurable_name)); |
| 3506 ASSERT(!isolate->has_pending_exception()); | 3509 ASSERT(!isolate->has_pending_exception()); |
| 3507 ASSERT(configurable->IsTrue() || configurable->IsFalse()); | 3510 ASSERT(configurable->IsTrue() || configurable->IsFalse()); |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3610 | 3613 |
| 3611 Handle<Object> args[] = { name }; | 3614 Handle<Object> args[] = { name }; |
| 3612 Handle<Object> result = CallTrap( | 3615 Handle<Object> result = CallTrap( |
| 3613 "getPropertyDescriptor", Handle<Object>(), ARRAY_SIZE(args), args); | 3616 "getPropertyDescriptor", Handle<Object>(), ARRAY_SIZE(args), args); |
| 3614 if (isolate->has_pending_exception()) return NONE; | 3617 if (isolate->has_pending_exception()) return NONE; |
| 3615 | 3618 |
| 3616 if (result->IsUndefined()) return ABSENT; | 3619 if (result->IsUndefined()) return ABSENT; |
| 3617 | 3620 |
| 3618 bool has_pending_exception; | 3621 bool has_pending_exception; |
| 3619 Handle<Object> argv[] = { result }; | 3622 Handle<Object> argv[] = { result }; |
| 3620 Handle<Object> desc = | 3623 Handle<Object> desc = Execution::Call( |
| 3621 Execution::Call(isolate->to_complete_property_descriptor(), result, | 3624 isolate, isolate->to_complete_property_descriptor(), result, |
| 3622 ARRAY_SIZE(argv), argv, &has_pending_exception); | 3625 ARRAY_SIZE(argv), argv, &has_pending_exception); |
| 3623 if (has_pending_exception) return NONE; | 3626 if (has_pending_exception) return NONE; |
| 3624 | 3627 |
| 3625 // Convert result to PropertyAttributes. | 3628 // Convert result to PropertyAttributes. |
| 3626 Handle<String> enum_n = isolate->factory()->InternalizeOneByteString( | 3629 Handle<String> enum_n = isolate->factory()->InternalizeOneByteString( |
| 3627 STATIC_ASCII_VECTOR("enumerable_")); | 3630 STATIC_ASCII_VECTOR("enumerable_")); |
| 3628 Handle<Object> enumerable(v8::internal::GetProperty(isolate, desc, enum_n)); | 3631 Handle<Object> enumerable(v8::internal::GetProperty(isolate, desc, enum_n)); |
| 3629 if (isolate->has_pending_exception()) return NONE; | 3632 if (isolate->has_pending_exception()) return NONE; |
| 3630 Handle<String> conf_n = isolate->factory()->InternalizeOneByteString( | 3633 Handle<String> conf_n = isolate->factory()->InternalizeOneByteString( |
| 3631 STATIC_ASCII_VECTOR("configurable_")); | 3634 STATIC_ASCII_VECTOR("configurable_")); |
| 3632 Handle<Object> configurable(v8::internal::GetProperty(isolate, desc, conf_n)); | 3635 Handle<Object> configurable(v8::internal::GetProperty(isolate, desc, conf_n)); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3710 Handle<Object> args[] = { handler, trap_name }; | 3713 Handle<Object> args[] = { handler, trap_name }; |
| 3711 Handle<Object> error = isolate->factory()->NewTypeError( | 3714 Handle<Object> error = isolate->factory()->NewTypeError( |
| 3712 "handler_trap_missing", HandleVector(args, ARRAY_SIZE(args))); | 3715 "handler_trap_missing", HandleVector(args, ARRAY_SIZE(args))); |
| 3713 isolate->Throw(*error); | 3716 isolate->Throw(*error); |
| 3714 return Handle<Object>(); | 3717 return Handle<Object>(); |
| 3715 } | 3718 } |
| 3716 trap = Handle<Object>(derived); | 3719 trap = Handle<Object>(derived); |
| 3717 } | 3720 } |
| 3718 | 3721 |
| 3719 bool threw; | 3722 bool threw; |
| 3720 return Execution::Call(trap, handler, argc, argv, &threw); | 3723 return Execution::Call(isolate, trap, handler, argc, argv, &threw); |
| 3721 } | 3724 } |
| 3722 | 3725 |
| 3723 | 3726 |
| 3724 void JSObject::AllocateStorageForMap(Handle<JSObject> object, Handle<Map> map) { | 3727 void JSObject::AllocateStorageForMap(Handle<JSObject> object, Handle<Map> map) { |
| 3725 CALL_HEAP_FUNCTION_VOID( | 3728 CALL_HEAP_FUNCTION_VOID( |
| 3726 object->GetIsolate(), | 3729 object->GetIsolate(), |
| 3727 object->AllocateStorageForMap(*map)); | 3730 object->AllocateStorageForMap(*map)); |
| 3728 } | 3731 } |
| 3729 | 3732 |
| 3730 | 3733 |
| (...skipping 7307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11038 Isolate* isolate = object->GetIsolate(); | 11041 Isolate* isolate = object->GetIsolate(); |
| 11039 HandleScope scope(isolate); | 11042 HandleScope scope(isolate); |
| 11040 Handle<Object> index_object = isolate->factory()->NewNumberFromUint(index); | 11043 Handle<Object> index_object = isolate->factory()->NewNumberFromUint(index); |
| 11041 Handle<Object> add_count_object = | 11044 Handle<Object> add_count_object = |
| 11042 isolate->factory()->NewNumberFromUint(add_count); | 11045 isolate->factory()->NewNumberFromUint(add_count); |
| 11043 | 11046 |
| 11044 Handle<Object> args[] = | 11047 Handle<Object> args[] = |
| 11045 { object, index_object, deleted, add_count_object }; | 11048 { object, index_object, deleted, add_count_object }; |
| 11046 | 11049 |
| 11047 bool threw; | 11050 bool threw; |
| 11048 Execution::Call(Handle<JSFunction>(isolate->observers_enqueue_splice()), | 11051 Execution::Call(isolate, |
| 11052 Handle<JSFunction>(isolate->observers_enqueue_splice()), |
| 11049 isolate->factory()->undefined_value(), ARRAY_SIZE(args), args, | 11053 isolate->factory()->undefined_value(), ARRAY_SIZE(args), args, |
| 11050 &threw); | 11054 &threw); |
| 11051 ASSERT(!threw); | 11055 ASSERT(!threw); |
| 11052 } | 11056 } |
| 11053 | 11057 |
| 11054 | 11058 |
| 11055 static void BeginPerformSplice(Handle<JSArray> object) { | 11059 static void BeginPerformSplice(Handle<JSArray> object) { |
| 11056 Isolate* isolate = object->GetIsolate(); | 11060 Isolate* isolate = object->GetIsolate(); |
| 11057 HandleScope scope(isolate); | 11061 HandleScope scope(isolate); |
| 11058 Handle<Object> args[] = { object }; | 11062 Handle<Object> args[] = { object }; |
| 11059 | 11063 |
| 11060 bool threw; | 11064 bool threw; |
| 11061 Execution::Call(Handle<JSFunction>(isolate->observers_begin_perform_splice()), | 11065 Execution::Call(isolate, |
| 11066 Handle<JSFunction>(isolate->observers_begin_perform_splice()), |
| 11062 isolate->factory()->undefined_value(), ARRAY_SIZE(args), args, | 11067 isolate->factory()->undefined_value(), ARRAY_SIZE(args), args, |
| 11063 &threw); | 11068 &threw); |
| 11064 ASSERT(!threw); | 11069 ASSERT(!threw); |
| 11065 } | 11070 } |
| 11066 | 11071 |
| 11067 | 11072 |
| 11068 static void EndPerformSplice(Handle<JSArray> object) { | 11073 static void EndPerformSplice(Handle<JSArray> object) { |
| 11069 Isolate* isolate = object->GetIsolate(); | 11074 Isolate* isolate = object->GetIsolate(); |
| 11070 HandleScope scope(isolate); | 11075 HandleScope scope(isolate); |
| 11071 Handle<Object> args[] = { object }; | 11076 Handle<Object> args[] = { object }; |
| 11072 | 11077 |
| 11073 bool threw; | 11078 bool threw; |
| 11074 Execution::Call(Handle<JSFunction>(isolate->observers_end_perform_splice()), | 11079 Execution::Call(isolate, |
| 11080 Handle<JSFunction>(isolate->observers_end_perform_splice()), |
| 11075 isolate->factory()->undefined_value(), ARRAY_SIZE(args), args, | 11081 isolate->factory()->undefined_value(), ARRAY_SIZE(args), args, |
| 11076 &threw); | 11082 &threw); |
| 11077 ASSERT(!threw); | 11083 ASSERT(!threw); |
| 11078 } | 11084 } |
| 11079 | 11085 |
| 11080 | 11086 |
| 11081 MaybeObject* JSArray::SetElementsLength(Object* len) { | 11087 MaybeObject* JSArray::SetElementsLength(Object* len) { |
| 11082 // We should never end in here with a pixel or external array. | 11088 // We should never end in here with a pixel or external array. |
| 11083 ASSERT(AllowsSetElementsLength()); | 11089 ASSERT(AllowsSetElementsLength()); |
| 11084 if (!(FLAG_harmony_observation && map()->is_observed())) | 11090 if (!(FLAG_harmony_observation && map()->is_observed())) |
| (...skipping 4951 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16036 #define ERROR_MESSAGES_TEXTS(C, T) T, | 16042 #define ERROR_MESSAGES_TEXTS(C, T) T, |
| 16037 static const char* error_messages_[] = { | 16043 static const char* error_messages_[] = { |
| 16038 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) | 16044 ERROR_MESSAGES_LIST(ERROR_MESSAGES_TEXTS) |
| 16039 }; | 16045 }; |
| 16040 #undef ERROR_MESSAGES_TEXTS | 16046 #undef ERROR_MESSAGES_TEXTS |
| 16041 return error_messages_[reason]; | 16047 return error_messages_[reason]; |
| 16042 } | 16048 } |
| 16043 | 16049 |
| 16044 | 16050 |
| 16045 } } // namespace v8::internal | 16051 } } // namespace v8::internal |
| OLD | NEW |