OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/api.h" | 5 #include "src/api.h" |
6 | 6 |
7 #include <string.h> // For memcpy, strlen. | 7 #include <string.h> // For memcpy, strlen. |
8 #ifdef V8_USE_ADDRESS_SANITIZER | 8 #ifdef V8_USE_ADDRESS_SANITIZER |
9 #include <sanitizer/asan_interface.h> | 9 #include <sanitizer/asan_interface.h> |
10 #endif // V8_USE_ADDRESS_SANITIZER | 10 #endif // V8_USE_ADDRESS_SANITIZER |
(...skipping 1887 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1898 | 1898 |
1899 | 1899 |
1900 v8::Local<Value> v8::TryCatch::StackTrace() const { | 1900 v8::Local<Value> v8::TryCatch::StackTrace() const { |
1901 ASSERT(isolate_ == i::Isolate::Current()); | 1901 ASSERT(isolate_ == i::Isolate::Current()); |
1902 if (HasCaught()) { | 1902 if (HasCaught()) { |
1903 i::Object* raw_obj = reinterpret_cast<i::Object*>(exception_); | 1903 i::Object* raw_obj = reinterpret_cast<i::Object*>(exception_); |
1904 if (!raw_obj->IsJSObject()) return v8::Local<Value>(); | 1904 if (!raw_obj->IsJSObject()) return v8::Local<Value>(); |
1905 i::HandleScope scope(isolate_); | 1905 i::HandleScope scope(isolate_); |
1906 i::Handle<i::JSObject> obj(i::JSObject::cast(raw_obj), isolate_); | 1906 i::Handle<i::JSObject> obj(i::JSObject::cast(raw_obj), isolate_); |
1907 i::Handle<i::String> name = isolate_->factory()->stack_string(); | 1907 i::Handle<i::String> name = isolate_->factory()->stack_string(); |
1908 if (!i::JSReceiver::HasProperty(obj, name)) return v8::Local<Value>(); | 1908 EXCEPTION_PREAMBLE(isolate_); |
| 1909 Maybe<bool> maybe = i::JSReceiver::HasProperty(obj, name); |
| 1910 has_pending_exception = !maybe.has_value; |
| 1911 EXCEPTION_BAILOUT_CHECK(isolate_, v8::Local<Value>()); |
| 1912 if (!maybe.value) return v8::Local<Value>(); |
1909 i::Handle<i::Object> value; | 1913 i::Handle<i::Object> value; |
1910 if (!i::Object::GetProperty(obj, name).ToHandle(&value)) { | 1914 if (!i::Object::GetProperty(obj, name).ToHandle(&value)) { |
1911 return v8::Local<Value>(); | 1915 return v8::Local<Value>(); |
1912 } | 1916 } |
1913 return v8::Utils::ToLocal(scope.CloseAndEscape(value)); | 1917 return v8::Utils::ToLocal(scope.CloseAndEscape(value)); |
1914 } else { | 1918 } else { |
1915 return v8::Local<Value>(); | 1919 return v8::Local<Value>(); |
1916 } | 1920 } |
1917 } | 1921 } |
1918 | 1922 |
(...skipping 1213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3132 i::HandleScope scope(isolate); | 3136 i::HandleScope scope(isolate); |
3133 i::Handle<i::JSObject> self = Utils::OpenHandle(this); | 3137 i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
3134 i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); | 3138 i::Handle<i::Object> key_obj = Utils::OpenHandle(*key); |
3135 if (!key_obj->IsName()) { | 3139 if (!key_obj->IsName()) { |
3136 EXCEPTION_PREAMBLE(isolate); | 3140 EXCEPTION_PREAMBLE(isolate); |
3137 has_pending_exception = !i::Execution::ToString( | 3141 has_pending_exception = !i::Execution::ToString( |
3138 isolate, key_obj).ToHandle(&key_obj); | 3142 isolate, key_obj).ToHandle(&key_obj); |
3139 EXCEPTION_BAILOUT_CHECK(isolate, static_cast<PropertyAttribute>(NONE)); | 3143 EXCEPTION_BAILOUT_CHECK(isolate, static_cast<PropertyAttribute>(NONE)); |
3140 } | 3144 } |
3141 i::Handle<i::Name> key_name = i::Handle<i::Name>::cast(key_obj); | 3145 i::Handle<i::Name> key_name = i::Handle<i::Name>::cast(key_obj); |
3142 PropertyAttributes result = | 3146 EXCEPTION_PREAMBLE(isolate); |
| 3147 Maybe<PropertyAttributes> result = |
3143 i::JSReceiver::GetPropertyAttributes(self, key_name); | 3148 i::JSReceiver::GetPropertyAttributes(self, key_name); |
3144 if (result == ABSENT) return static_cast<PropertyAttribute>(NONE); | 3149 has_pending_exception = !result.has_value; |
3145 return static_cast<PropertyAttribute>(result); | 3150 EXCEPTION_BAILOUT_CHECK(isolate, static_cast<PropertyAttribute>(NONE)); |
| 3151 if (result.value == ABSENT) return static_cast<PropertyAttribute>(NONE); |
| 3152 return static_cast<PropertyAttribute>(result.value); |
3146 } | 3153 } |
3147 | 3154 |
3148 | 3155 |
3149 Local<Value> v8::Object::GetOwnPropertyDescriptor(Local<String> key) { | 3156 Local<Value> v8::Object::GetOwnPropertyDescriptor(Local<String> key) { |
3150 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3157 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
3151 ON_BAILOUT(isolate, "v8::Object::GetOwnPropertyDescriptor()", | 3158 ON_BAILOUT(isolate, "v8::Object::GetOwnPropertyDescriptor()", |
3152 return Local<Value>()); | 3159 return Local<Value>()); |
3153 ENTER_V8(isolate); | 3160 ENTER_V8(isolate); |
3154 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); | 3161 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); |
3155 i::Handle<i::Name> key_name = Utils::OpenHandle(*key); | 3162 i::Handle<i::Name> key_name = Utils::OpenHandle(*key); |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3392 !i::JSReceiver::DeleteElement(self, index).ToHandle(&obj); | 3399 !i::JSReceiver::DeleteElement(self, index).ToHandle(&obj); |
3393 EXCEPTION_BAILOUT_CHECK(isolate, false); | 3400 EXCEPTION_BAILOUT_CHECK(isolate, false); |
3394 return obj->IsTrue(); | 3401 return obj->IsTrue(); |
3395 } | 3402 } |
3396 | 3403 |
3397 | 3404 |
3398 bool v8::Object::Has(uint32_t index) { | 3405 bool v8::Object::Has(uint32_t index) { |
3399 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3406 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
3400 ON_BAILOUT(isolate, "v8::Object::HasProperty()", return false); | 3407 ON_BAILOUT(isolate, "v8::Object::HasProperty()", return false); |
3401 i::Handle<i::JSObject> self = Utils::OpenHandle(this); | 3408 i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
3402 return i::JSReceiver::HasElement(self, index); | 3409 EXCEPTION_PREAMBLE(isolate); |
| 3410 Maybe<bool> maybe = i::JSReceiver::HasElement(self, index); |
| 3411 has_pending_exception = !maybe.has_value; |
| 3412 EXCEPTION_BAILOUT_CHECK(isolate, false); |
| 3413 return maybe.value; |
3403 } | 3414 } |
3404 | 3415 |
3405 | 3416 |
3406 template<typename Setter, typename Getter, typename Data> | 3417 template<typename Setter, typename Getter, typename Data> |
3407 static inline bool ObjectSetAccessor(Object* obj, | 3418 static inline bool ObjectSetAccessor(Object* obj, |
3408 Handle<String> name, | 3419 Handle<String> name, |
3409 Setter getter, | 3420 Setter getter, |
3410 Getter setter, | 3421 Getter setter, |
3411 Data data, | 3422 Data data, |
3412 AccessControl settings, | 3423 AccessControl settings, |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3471 getter_i, | 3482 getter_i, |
3472 setter_i, | 3483 setter_i, |
3473 static_cast<PropertyAttributes>(attribute)); | 3484 static_cast<PropertyAttributes>(attribute)); |
3474 } | 3485 } |
3475 | 3486 |
3476 | 3487 |
3477 bool v8::Object::HasOwnProperty(Handle<String> key) { | 3488 bool v8::Object::HasOwnProperty(Handle<String> key) { |
3478 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3489 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
3479 ON_BAILOUT(isolate, "v8::Object::HasOwnProperty()", | 3490 ON_BAILOUT(isolate, "v8::Object::HasOwnProperty()", |
3480 return false); | 3491 return false); |
3481 return i::JSReceiver::HasOwnProperty( | 3492 EXCEPTION_PREAMBLE(isolate); |
3482 Utils::OpenHandle(this), Utils::OpenHandle(*key)); | 3493 Maybe<bool> maybe = i::JSReceiver::HasOwnProperty(Utils::OpenHandle(this), |
| 3494 Utils::OpenHandle(*key)); |
| 3495 has_pending_exception = !maybe.has_value; |
| 3496 EXCEPTION_BAILOUT_CHECK(isolate, false); |
| 3497 return maybe.value; |
3483 } | 3498 } |
3484 | 3499 |
3485 | 3500 |
3486 bool v8::Object::HasRealNamedProperty(Handle<String> key) { | 3501 bool v8::Object::HasRealNamedProperty(Handle<String> key) { |
3487 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3502 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
3488 ON_BAILOUT(isolate, "v8::Object::HasRealNamedProperty()", | 3503 ON_BAILOUT(isolate, "v8::Object::HasRealNamedProperty()", |
3489 return false); | 3504 return false); |
3490 return i::JSObject::HasRealNamedProperty(Utils::OpenHandle(this), | 3505 EXCEPTION_PREAMBLE(isolate); |
3491 Utils::OpenHandle(*key)); | 3506 Maybe<bool> maybe = i::JSObject::HasRealNamedProperty( |
| 3507 Utils::OpenHandle(this), Utils::OpenHandle(*key)); |
| 3508 has_pending_exception = !maybe.has_value; |
| 3509 EXCEPTION_BAILOUT_CHECK(isolate, false); |
| 3510 return maybe.value; |
3492 } | 3511 } |
3493 | 3512 |
3494 | 3513 |
3495 bool v8::Object::HasRealIndexedProperty(uint32_t index) { | 3514 bool v8::Object::HasRealIndexedProperty(uint32_t index) { |
3496 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3515 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
3497 ON_BAILOUT(isolate, "v8::Object::HasRealIndexedProperty()", | 3516 ON_BAILOUT(isolate, "v8::Object::HasRealIndexedProperty()", |
3498 return false); | 3517 return false); |
3499 return i::JSObject::HasRealElementProperty(Utils::OpenHandle(this), index); | 3518 EXCEPTION_PREAMBLE(isolate); |
| 3519 Maybe<bool> maybe = |
| 3520 i::JSObject::HasRealElementProperty(Utils::OpenHandle(this), index); |
| 3521 has_pending_exception = !maybe.has_value; |
| 3522 EXCEPTION_BAILOUT_CHECK(isolate, false); |
| 3523 return maybe.value; |
3500 } | 3524 } |
3501 | 3525 |
3502 | 3526 |
3503 bool v8::Object::HasRealNamedCallbackProperty(Handle<String> key) { | 3527 bool v8::Object::HasRealNamedCallbackProperty(Handle<String> key) { |
3504 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3528 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
3505 ON_BAILOUT(isolate, | 3529 ON_BAILOUT(isolate, |
3506 "v8::Object::HasRealNamedCallbackProperty()", | 3530 "v8::Object::HasRealNamedCallbackProperty()", |
3507 return false); | 3531 return false); |
3508 ENTER_V8(isolate); | 3532 ENTER_V8(isolate); |
3509 return i::JSObject::HasRealNamedCallbackProperty(Utils::OpenHandle(this), | 3533 EXCEPTION_PREAMBLE(isolate); |
3510 Utils::OpenHandle(*key)); | 3534 Maybe<bool> maybe = i::JSObject::HasRealNamedCallbackProperty( |
| 3535 Utils::OpenHandle(this), Utils::OpenHandle(*key)); |
| 3536 has_pending_exception = !maybe.has_value; |
| 3537 EXCEPTION_BAILOUT_CHECK(isolate, false); |
| 3538 return maybe.value; |
3511 } | 3539 } |
3512 | 3540 |
3513 | 3541 |
3514 bool v8::Object::HasNamedLookupInterceptor() { | 3542 bool v8::Object::HasNamedLookupInterceptor() { |
3515 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 3543 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
3516 ON_BAILOUT(isolate, "v8::Object::HasNamedLookupInterceptor()", | 3544 ON_BAILOUT(isolate, "v8::Object::HasNamedLookupInterceptor()", |
3517 return false); | 3545 return false); |
3518 return Utils::OpenHandle(this)->HasNamedInterceptor(); | 3546 return Utils::OpenHandle(this)->HasNamedInterceptor(); |
3519 } | 3547 } |
3520 | 3548 |
(...skipping 4113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7634 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7662 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
7635 Address callback_address = | 7663 Address callback_address = |
7636 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7664 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
7637 VMState<EXTERNAL> state(isolate); | 7665 VMState<EXTERNAL> state(isolate); |
7638 ExternalCallbackScope call_scope(isolate, callback_address); | 7666 ExternalCallbackScope call_scope(isolate, callback_address); |
7639 callback(info); | 7667 callback(info); |
7640 } | 7668 } |
7641 | 7669 |
7642 | 7670 |
7643 } } // namespace v8::internal | 7671 } } // namespace v8::internal |
OLD | NEW |