summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/01_core.js41
-rw-r--r--core/examples/http_bench_json_ops/http_bench_json_ops.js5
-rw-r--r--core/runtime.rs4
-rw-r--r--ext/fs/30_fs.js8
-rw-r--r--ext/http/00_serve.js20
-rw-r--r--ext/http/01_http.js2
-rw-r--r--ext/node/polyfills/internal/crypto/random.ts6
-rw-r--r--ext/web/02_timers.js5
-rw-r--r--ext/websocket/01_websocket.js9
-rw-r--r--ext/websocket/02_websocketstream.js8
10 files changed, 26 insertions, 82 deletions
diff --git a/core/01_core.js b/core/01_core.js
index c3033fcf9..13aa17c7e 100644
--- a/core/01_core.js
+++ b/core/01_core.js
@@ -22,6 +22,7 @@
PromiseReject,
PromiseResolve,
PromisePrototypeThen,
+ Proxy,
RangeError,
ReferenceError,
ReflectHas,
@@ -762,19 +763,19 @@ for (let i = 0; i < 10; i++) {
setUpAsyncStub(opName);
}
- function generateAsyncOpHandler(/* opNames... */) {
- const fastOps = {};
- for (const opName of new SafeArrayIterator(arguments)) {
- if (ops[opName] === undefined) {
- throw new Error(`Unknown or disabled op '${opName}'`);
- }
- if (asyncOps[opName] !== undefined) {
- fastOps[opName] = setUpAsyncStub(opName);
- } else {
- fastOps[opName] = ops[opName];
- }
- }
- return fastOps;
+ function ensureFastOps() {
+ return new Proxy({}, {
+ get(_target, opName) {
+ if (ops[opName] === undefined) {
+ throw new Error(`Unknown or disabled op '${opName}'`);
+ }
+ if (asyncOps[opName] !== undefined) {
+ return setUpAsyncStub(opName);
+ } else {
+ return ops[opName];
+ }
+ },
+ });
}
const {
@@ -787,22 +788,12 @@ for (let i = 0; i < 10; i++) {
op_read_sync: readSync,
op_write_sync: writeSync,
op_shutdown: shutdown,
- } = generateAsyncOpHandler(
- "op_close",
- "op_try_close",
- "op_read",
- "op_read_all",
- "op_write",
- "op_write_all",
- "op_read_sync",
- "op_write_sync",
- "op_shutdown",
- );
+ } = ensureFastOps();
// Extra Deno.core.* exports
const core = ObjectAssign(globalThis.Deno.core, {
asyncStub,
- generateAsyncOpHandler,
+ ensureFastOps,
opAsync,
resources,
metrics,
diff --git a/core/examples/http_bench_json_ops/http_bench_json_ops.js b/core/examples/http_bench_json_ops/http_bench_json_ops.js
index 6cf2a8be2..a840e4e9f 100644
--- a/core/examples/http_bench_json_ops/http_bench_json_ops.js
+++ b/core/examples/http_bench_json_ops/http_bench_json_ops.js
@@ -9,10 +9,7 @@ const { op_listen } = Deno.core.ops;
const {
op_accept,
op_read_socket,
-} = Deno.core.generateAsyncOpHandler(
- "op_accept",
- "op_read_socket",
-);
+} = Deno.core.ensureFastOps();
const requestBuf = new Uint8Array(64 * 1024);
const responseBuf = new Uint8Array(
diff --git a/core/runtime.rs b/core/runtime.rs
index fdcb81e9e..a27717a8b 100644
--- a/core/runtime.rs
+++ b/core/runtime.rs
@@ -2852,7 +2852,7 @@ pub mod tests {
.execute_script_static(
"filename.js",
r#"
- const { op_test } = Deno.core.generateAsyncOpHandler("op_test");
+ const { op_test } = Deno.core.ensureFastOps();
let zero_copy_a = new Uint8Array([0]);
op_test(null, zero_copy_a);
"#,
@@ -4942,7 +4942,7 @@ Deno.core.opAsync("op_async_serialize_object_with_numbers_as_keys", {
throw new Error();
}
- const { op_test_async } = Deno.core.generateAsyncOpHandler("op_test_async");
+ const { op_test_async } = Deno.core.ensureFastOps();
if (op_test_async.name !== "op_test_async") {
throw new Error();
}
diff --git a/ext/fs/30_fs.js b/ext/fs/30_fs.js
index f14fcd5d1..f7c07f26a 100644
--- a/ext/fs/30_fs.js
+++ b/ext/fs/30_fs.js
@@ -10,13 +10,7 @@ const {
op_fs_truncate_async,
op_fs_link_async,
op_fs_flock_async,
-} = Deno.core.generateAsyncOpHandler(
- "op_fs_chmod_async",
- "op_fs_ftruncate_async",
- "op_fs_truncate_async",
- "op_fs_link_async",
- "op_fs_flock_async",
-);
+} = Deno.core.ensureFastOps();
const primordials = globalThis.__bootstrap.primordials;
const {
ArrayPrototypeFilter,
diff --git a/ext/http/00_serve.js b/ext/http/00_serve.js
index ba8080e27..fa55079e7 100644
--- a/ext/http/00_serve.js
+++ b/ext/http/00_serve.js
@@ -70,25 +70,7 @@ const {
op_http_upgrade_websocket_next,
op_http_try_wait,
op_http_wait,
-} = core.generateAsyncOpHandler(
- "op_http_get_request_headers",
- "op_http_get_request_method_and_url",
- "op_http_read_request_body",
- "op_http_serve",
- "op_http_serve_on",
- "op_http_set_promise_complete",
- "op_http_set_response_body_bytes",
- "op_http_set_response_body_resource",
- "op_http_set_response_body_stream",
- "op_http_set_response_body_text",
- "op_http_set_response_header",
- "op_http_set_response_headers",
- "op_http_set_response_trailers",
- "op_http_upgrade_raw",
- "op_http_upgrade_websocket_next",
- "op_http_try_wait",
- "op_http_wait",
-);
+} = core.ensureFastOps();
const _upgraded = Symbol("_upgraded");
function internalServerError() {
diff --git a/ext/http/01_http.js b/ext/http/01_http.js
index 92fd8e285..f9a8d2cdb 100644
--- a/ext/http/01_http.js
+++ b/ext/http/01_http.js
@@ -6,7 +6,7 @@ const core = globalThis.Deno.core;
const internals = globalThis.__bootstrap.internals;
const primordials = globalThis.__bootstrap.primordials;
const { BadResourcePrototype, InterruptedPrototype, ops } = core;
-const { op_http_write } = Deno.core.generateAsyncOpHandler("op_http_write");
+const { op_http_write } = Deno.core.ensureFastOps();
import * as webidl from "ext:deno_webidl/00_webidl.js";
import { InnerBody } from "ext:deno_fetch/22_body.js";
import { Event, setEventTargetData } from "ext:deno_web/02_event.js";
diff --git a/ext/node/polyfills/internal/crypto/random.ts b/ext/node/polyfills/internal/crypto/random.ts
index 4890e158a..9156ab4e1 100644
--- a/ext/node/polyfills/internal/crypto/random.ts
+++ b/ext/node/polyfills/internal/crypto/random.ts
@@ -37,11 +37,7 @@ const {
op_node_gen_prime_async,
op_node_check_prime_bytes_async,
op_node_check_prime_async,
-} = Deno.core.generateAsyncOpHandler(
- "op_node_gen_prime_async",
- "op_node_check_prime_bytes_async",
- "op_node_check_prime_async",
-);
+} = Deno.core.ensureFastOps();
export type LargeNumberLike =
| ArrayBufferView
diff --git a/ext/web/02_timers.js b/ext/web/02_timers.js
index 7603f6766..19ebfaa0e 100644
--- a/ext/web/02_timers.js
+++ b/ext/web/02_timers.js
@@ -27,10 +27,7 @@ const {
import * as webidl from "ext:deno_webidl/00_webidl.js";
import { reportException } from "ext:deno_web/02_event.js";
import { assert } from "ext:deno_web/00_infra.js";
-const { op_sleep, op_void_async_deferred } = core.generateAsyncOpHandler(
- "op_sleep",
- "op_void_async_deferred",
-);
+const { op_sleep, op_void_async_deferred } = core.ensureFastOps();
const hrU8 = new Uint8Array(8);
const hr = new Uint32Array(TypedArrayPrototypeGetBuffer(hrU8));
diff --git a/ext/websocket/01_websocket.js b/ext/websocket/01_websocket.js
index e71cae44a..01dd26579 100644
--- a/ext/websocket/01_websocket.js
+++ b/ext/websocket/01_websocket.js
@@ -57,14 +57,7 @@ const {
op_ws_send_text,
op_ws_next_event,
op_ws_send_ping,
-} = core.generateAsyncOpHandler(
- "op_ws_create",
- "op_ws_close",
- "op_ws_send_binary",
- "op_ws_send_text",
- "op_ws_next_event",
- "op_ws_send_ping",
-);
+} = core.ensureFastOps();
webidl.converters["sequence<DOMString> or DOMString"] = (
V,
diff --git a/ext/websocket/02_websocketstream.js b/ext/websocket/02_websocketstream.js
index 2c5df262a..00d5bdaec 100644
--- a/ext/websocket/02_websocketstream.js
+++ b/ext/websocket/02_websocketstream.js
@@ -39,13 +39,7 @@ const {
op_ws_next_event,
op_ws_create,
op_ws_close,
-} = core.generateAsyncOpHandler(
- "op_ws_send_text",
- "op_ws_send_binary",
- "op_ws_next_event",
- "op_ws_create",
- "op_ws_close",
-);
+} = core.ensureFastOps();
webidl.converters.WebSocketStreamOptions = webidl.createDictionaryConverter(
"WebSocketStreamOptions",