summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2023-06-06 03:01:28 -0600
committerGitHub <noreply@github.com>2023-06-06 11:01:28 +0200
commit0bbdbace02d8b17a02bd3c631b82f508d0effa4a (patch)
tree836c1faac1dd7e1afc358255554f88e934f282be /core
parent5c55f2b4fb9f386d5589e4cbd4c513ecb1bae50b (diff)
refactor(core): ensureFastOps is an op-generating proxy (#19377)
Startup benchmark shows no changes (within 1ms, identical system/user times).
Diffstat (limited to 'core')
-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
3 files changed, 19 insertions, 31 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();
}