diff options
Diffstat (limited to 'core/libdeno')
-rw-r--r-- | core/libdeno/api.cc | 8 | ||||
-rw-r--r-- | core/libdeno/deno.h | 8 | ||||
-rw-r--r-- | core/libdeno/libdeno.d.ts | 7 | ||||
-rw-r--r-- | core/libdeno/libdeno_test.cc | 2 |
4 files changed, 15 insertions, 10 deletions
diff --git a/core/libdeno/api.cc b/core/libdeno/api.cc index 8a3a56156..30f82b6cc 100644 --- a/core/libdeno/api.cc +++ b/core/libdeno/api.cc @@ -153,11 +153,15 @@ void deno_pinned_buf_delete(deno_pinned_buf* buf) { auto _ = deno::PinnedBuf(buf); } -void deno_respond(Deno* d_, void* user_data, deno_buf buf) { +void deno_respond(Deno* d_, void* user_data, deno_buf buf, int* promise_id) { auto* d = unwrap(d_); if (d->current_args_ != nullptr) { // Synchronous response. - if (buf.data_ptr != nullptr) { + if (promise_id != nullptr) { + auto number = v8::Number::New(d->isolate_, *promise_id); + d->current_args_->GetReturnValue().Set(number); + } else { + CHECK_NOT_NULL(buf.data_ptr); auto ab = deno::ImportBuf(d, buf); d->current_args_->GetReturnValue().Set(ab); } diff --git a/core/libdeno/deno.h b/core/libdeno/deno.h index 745285554..4f29f2c7a 100644 --- a/core/libdeno/deno.h +++ b/core/libdeno/deno.h @@ -81,8 +81,10 @@ void deno_execute(Deno* d, void* user_data, const char* js_filename, // deno_respond sends up to one message back for every deno_recv_cb made. // // If this is called during deno_recv_cb, the issuing libdeno.send() in -// javascript will synchronously return the specified buf as an ArrayBuffer (or -// null if buf is empty). +// javascript will synchronously return the specified promise_id(number) +// or buf(Uint8Array) (or null if buf and promise_id are both null/empty). +// Calling with non-null for both buf and promise_id will result in the +// promise_id being returned. // // If this is called after deno_recv_cb has returned, the deno_respond // will call into the JS callback specified by libdeno.recv(). @@ -92,7 +94,7 @@ void deno_execute(Deno* d, void* user_data, const char* js_filename, // releasing its memory.) // // If a JS exception was encountered, deno_last_exception() will be non-NULL. -void deno_respond(Deno* d, void* user_data, deno_buf buf); +void deno_respond(Deno* d, void* user_data, deno_buf buf, int* promise_id); // consumes zero_copy void deno_pinned_buf_delete(deno_pinned_buf* buf); diff --git a/core/libdeno/libdeno.d.ts b/core/libdeno/libdeno.d.ts index 1bc7367d9..093e846ab 100644 --- a/core/libdeno/libdeno.d.ts +++ b/core/libdeno/libdeno.d.ts @@ -12,14 +12,13 @@ interface EvalErrorInfo { thrown: any; } -declare interface MessageCallback { - (msg: Uint8Array): void; -} +declare type MessageCallbackInternal = (msg: Uint8Array) => void; declare interface DenoCore { - recv(cb: MessageCallback): void; + recv(cb: MessageCallbackInternal): void; send( + cmdId: number, control: null | ArrayBufferView, data?: ArrayBufferView ): null | Uint8Array; diff --git a/core/libdeno/libdeno_test.cc b/core/libdeno/libdeno_test.cc index 485c95bff..b72a8e098 100644 --- a/core/libdeno/libdeno_test.cc +++ b/core/libdeno/libdeno_test.cc @@ -75,7 +75,7 @@ TEST(LibDenoTest, RecvReturnBar) { EXPECT_EQ(buf.data_ptr[1], 'b'); EXPECT_EQ(buf.data_ptr[2], 'c'); uint8_t response[] = {'b', 'a', 'r'}; - deno_respond(d, user_data, {response, sizeof response}); + deno_respond(d, user_data, {response, sizeof response}, nullptr); }; Deno* d = deno_new(deno_config{0, snapshot, empty, recv_cb, nullptr}); deno_execute(d, d, "a.js", "RecvReturnBar()"); |