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 7271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7282 i::Isolate* isolate = promise->GetIsolate(); | 7282 i::Isolate* isolate = promise->GetIsolate(); |
7283 LOG_API(isolate, Promise, HasRejectHandler); | 7283 LOG_API(isolate, Promise, HasRejectHandler); |
7284 ENTER_V8(isolate); | 7284 ENTER_V8(isolate); |
7285 if (promise->IsJSPromise()) { | 7285 if (promise->IsJSPromise()) { |
7286 i::Handle<i::JSPromise> js_promise = i::Handle<i::JSPromise>::cast(promise); | 7286 i::Handle<i::JSPromise> js_promise = i::Handle<i::JSPromise>::cast(promise); |
7287 return js_promise->has_handler(); | 7287 return js_promise->has_handler(); |
7288 } | 7288 } |
7289 return false; | 7289 return false; |
7290 } | 7290 } |
7291 | 7291 |
7292 MaybeLocal<Value> Promise::Result() { | |
7293 i::Handle<i::JSReceiver> promise = Utils::OpenHandle(this); | |
7294 i::Isolate* isolate = promise->GetIsolate(); | |
7295 LOG_API(isolate, Promise, Result); | |
7296 ENTER_V8(isolate); | |
jochen (gone - plz use gerrit)
2016/12/20 07:49:52
this method (and Status) don't execute script, so
Yang
2016/12/20 11:38:27
Done.
| |
7297 Utils::ApiCheck(promise->IsJSPromise(), "v8_Promise_Result", "Not a Promise"); | |
jochen (gone - plz use gerrit)
2016/12/20 07:49:52
that check should never trigger, so I'd suggest to
Yang
2016/12/20 11:38:27
Done.
| |
7298 i::Handle<i::JSPromise> js_promise = i::Handle<i::JSPromise>::cast(promise); | |
7299 if (js_promise->status() != i::kPromisePending) { | |
7300 i::Handle<i::Object> result(js_promise->result(), isolate); | |
7301 return Utils::ToLocal(result); | |
7302 } | |
7303 return MaybeLocal<Value>(); | |
jochen (gone - plz use gerrit)
2016/12/20 07:49:52
APIs should return empty handles iff an exception
Yang
2016/12/20 11:38:27
Done. Now requiring status not to be pending guard
| |
7304 } | |
7305 | |
7306 Promise::PromiseStatus Promise::Status() { | |
7307 i::Handle<i::JSReceiver> promise = Utils::OpenHandle(this); | |
7308 i::Isolate* isolate = promise->GetIsolate(); | |
7309 LOG_API(isolate, Promise, Status); | |
7310 ENTER_V8(isolate); | |
7311 Utils::ApiCheck(promise->IsJSPromise(), "v8_Promise_Status", "Not a Promise"); | |
7312 i::Handle<i::JSPromise> js_promise = i::Handle<i::JSPromise>::cast(promise); | |
7313 STATIC_ASSERT(static_cast<int>(i::kPromisePending) == kPending); | |
jochen (gone - plz use gerrit)
2016/12/20 07:49:52
an alternative approach was to use the external en
Yang
2016/12/20 11:38:27
Done.
| |
7314 STATIC_ASSERT(static_cast<int>(i::kPromiseFulfilled) == kFulfilled); | |
7315 STATIC_ASSERT(static_cast<int>(i::kPromiseRejected) == kRejected); | |
7316 return static_cast<PromiseStatus>(js_promise->status()); | |
7317 } | |
7292 | 7318 |
7293 Local<Object> Proxy::GetTarget() { | 7319 Local<Object> Proxy::GetTarget() { |
7294 i::Handle<i::JSProxy> self = Utils::OpenHandle(this); | 7320 i::Handle<i::JSProxy> self = Utils::OpenHandle(this); |
7295 i::Handle<i::JSReceiver> target(self->target()); | 7321 i::Handle<i::JSReceiver> target(self->target()); |
7296 return Utils::ToLocal(target); | 7322 return Utils::ToLocal(target); |
7297 } | 7323 } |
7298 | 7324 |
7299 | 7325 |
7300 Local<Value> Proxy::GetHandler() { | 7326 Local<Value> Proxy::GetHandler() { |
7301 i::Handle<i::JSProxy> self = Utils::OpenHandle(this); | 7327 i::Handle<i::JSProxy> self = Utils::OpenHandle(this); |
(...skipping 2602 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
9904 Address callback_address = | 9930 Address callback_address = |
9905 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 9931 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
9906 VMState<EXTERNAL> state(isolate); | 9932 VMState<EXTERNAL> state(isolate); |
9907 ExternalCallbackScope call_scope(isolate, callback_address); | 9933 ExternalCallbackScope call_scope(isolate, callback_address); |
9908 callback(info); | 9934 callback(info); |
9909 } | 9935 } |
9910 | 9936 |
9911 | 9937 |
9912 } // namespace internal | 9938 } // namespace internal |
9913 } // namespace v8 | 9939 } // namespace v8 |
OLD | NEW |