summaryrefslogtreecommitdiff
path: root/deno2/deno.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deno2/deno.cc')
-rw-r--r--deno2/deno.cc22
1 files changed, 13 insertions, 9 deletions
diff --git a/deno2/deno.cc b/deno2/deno.cc
index 27dfefb8e..d59f49065 100644
--- a/deno2/deno.cc
+++ b/deno2/deno.cc
@@ -154,15 +154,12 @@ void Pub(const v8::FunctionCallbackInfo<v8::Value>& args) {
const_cast<const char*>(reinterpret_cast<char*>(contents.Data()));
deno_buf buf{data, contents.ByteLength()};
- auto retbuf = d->cb(d, channel, buf);
- if (retbuf.data) {
- // TODO(ry) Support zero-copy.
- auto ab = v8::ArrayBuffer::New(d->isolate, retbuf.len);
- memcpy(ab->GetContents().Data(), retbuf.data, retbuf.len);
- args.GetReturnValue().Set(handle_scope.Escape(ab));
- } else {
- args.GetReturnValue().Set(v8::Null(d->isolate));
- }
+ assert(d->currentArgs == nullptr);
+ d->currentArgs = &args;
+
+ d->cb(d, channel, buf);
+
+ d->currentArgs = nullptr;
}
bool Execute(v8::Local<v8::Context> context, const char* js_filename,
@@ -334,6 +331,13 @@ bool deno_pub(Deno* d, const char* channel, deno_buf buf) {
return true;
}
+void deno_set_response(Deno* d, deno_buf buf) {
+ // TODO(ry) Support zero-copy.
+ auto ab = v8::ArrayBuffer::New(d->isolate, buf.len);
+ memcpy(ab->GetContents().Data(), buf.data, buf.len);
+ d->currentArgs->GetReturnValue().Set(ab);
+}
+
void deno_delete(Deno* d) {
d->isolate->Dispose();
delete d;