summaryrefslogtreecommitdiff
path: root/core/runtime.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/runtime.rs')
-rw-r--r--core/runtime.rs56
1 files changed, 26 insertions, 30 deletions
diff --git a/core/runtime.rs b/core/runtime.rs
index 294982b7c..e574bf9d3 100644
--- a/core/runtime.rs
+++ b/core/runtime.rs
@@ -384,8 +384,7 @@ impl JsRuntime {
isolate_ptr.read()
};
let scope = &mut v8::HandleScope::new(&mut isolate);
- let context =
- bindings::initialize_context(scope, &op_ctxs, false, true);
+ let context = bindings::initialize_context(scope, &op_ctxs, false);
global_context = v8::Global::new(scope, context);
scope.set_default_context(context);
}
@@ -423,7 +422,7 @@ impl JsRuntime {
};
let scope = &mut v8::HandleScope::new(&mut isolate);
let context =
- bindings::initialize_context(scope, &op_ctxs, snapshot_loaded, false);
+ bindings::initialize_context(scope, &op_ctxs, snapshot_loaded);
global_context = v8::Global::new(scope, context);
}
@@ -551,7 +550,6 @@ impl JsRuntime {
scope,
&self.state.borrow().op_ctxs,
self.built_from_snapshot,
- false,
);
JsRealm::new(v8::Global::new(scope, context))
};
@@ -2245,7 +2243,6 @@ pub mod tests {
#[derive(Copy, Clone)]
enum Mode {
Async,
- AsyncDeferred,
AsyncZeroCopy(bool),
}
@@ -2254,28 +2251,20 @@ pub mod tests {
dispatch_count: Arc<AtomicUsize>,
}
- #[op]
+ #[op(deferred)]
async fn op_test(
rc_op_state: Rc<RefCell<OpState>>,
control: u8,
buf: Option<ZeroCopyBuf>,
) -> Result<u8, AnyError> {
- #![allow(clippy::await_holding_refcell_ref)] // False positive.
let op_state_ = rc_op_state.borrow();
let test_state = op_state_.borrow::<TestState>();
test_state.dispatch_count.fetch_add(1, Ordering::Relaxed);
- let mode = test_state.mode;
- drop(op_state_);
- match mode {
+ match test_state.mode {
Mode::Async => {
assert_eq!(control, 42);
Ok(43)
}
- Mode::AsyncDeferred => {
- tokio::task::yield_now().await;
- assert_eq!(control, 42);
- Ok(43)
- }
Mode::AsyncZeroCopy(has_buffer) => {
assert_eq!(buf.is_some(), has_buffer);
if let Some(buf) = buf {
@@ -2325,15 +2314,14 @@ pub mod tests {
#[test]
fn test_ref_unref_ops() {
- let (mut runtime, _dispatch_count) = setup(Mode::AsyncDeferred);
+ let (mut runtime, _dispatch_count) = setup(Mode::Async);
runtime
.execute_script(
"filename.js",
r#"
- Deno.core.initializeAsyncOps();
var promiseIdSymbol = Symbol.for("Deno.core.internalPromiseId");
- var p1 = Deno.core.ops.op_test(42);
- var p2 = Deno.core.ops.op_test(42);
+ var p1 = Deno.core.opAsync("op_test", 42);
+ var p2 = Deno.core.opAsync("op_test", 42);
"#,
)
.unwrap();
@@ -2386,7 +2374,6 @@ pub mod tests {
"filename.js",
r#"
let control = 42;
- Deno.core.initializeAsyncOps();
Deno.core.opAsync("op_test", control);
async function main() {
Deno.core.opAsync("op_test", control);
@@ -2405,7 +2392,6 @@ pub mod tests {
.execute_script(
"filename.js",
r#"
- Deno.core.initializeAsyncOps();
const p = Deno.core.opAsync("op_test", 42);
if (p[Symbol.for("Deno.core.internalPromiseId")] == undefined) {
throw new Error("missing id on returned promise");
@@ -2422,7 +2408,6 @@ pub mod tests {
.execute_script(
"filename.js",
r#"
- Deno.core.initializeAsyncOps();
Deno.core.opAsync("op_test");
"#,
)
@@ -2437,7 +2422,6 @@ pub mod tests {
.execute_script(
"filename.js",
r#"
- Deno.core.initializeAsyncOps();
let zero_copy_a = new Uint8Array([0]);
Deno.core.opAsync("op_test", null, zero_copy_a);
"#,
@@ -3037,6 +3021,7 @@ pub mod tests {
function main() {
console.log("asdf);
}
+
main();
"#,
);
@@ -3056,16 +3041,18 @@ function assert(cond) {
throw Error("assert");
}
}
+
function main() {
assert(false);
}
+
main();
"#,
);
let expected_error = r#"Error: assert
at assert (error_stack.js:4:11)
- at main (error_stack.js:8:3)
- at error_stack.js:10:1"#;
+ at main (error_stack.js:9:3)
+ at error_stack.js:12:1"#;
assert_eq!(result.unwrap_err().to_string(), expected_error);
}
@@ -3083,6 +3070,7 @@ main();
throw new Error("async");
});
})();
+
try {
await p;
} catch (error) {
@@ -3095,7 +3083,7 @@ main();
let expected_error = r#"Error: async
at error_async_stack.js:5:13
at async error_async_stack.js:4:5
- at async error_async_stack.js:9:5"#;
+ at async error_async_stack.js:10:5"#;
match runtime.poll_event_loop(cx, false) {
Poll::Ready(Err(e)) => {
@@ -3188,6 +3176,7 @@ function assertEquals(a, b) {
const sab = new SharedArrayBuffer(16);
const i32a = new Int32Array(sab);
globalThis.resolved = false;
+
(function() {
const result = Atomics.waitAsync(i32a, 0, 0);
result.value.then(
@@ -3195,6 +3184,7 @@ globalThis.resolved = false;
() => { assertUnreachable();
});
})();
+
const notify_return_value = Atomics.notify(i32a, 0, 1);
assertEquals(1, notify_return_value);
"#,
@@ -3304,7 +3294,7 @@ assertEquals(1, notify_return_value);
runtime
.execute_script(
"op_async_borrow.js",
- "Deno.core.initializeAsyncOps(); Deno.core.ops.op_async_borrow()",
+ "Deno.core.opAsync('op_async_borrow')",
)
.unwrap();
runtime.run_event_loop(false).await.unwrap();
@@ -3378,8 +3368,7 @@ Deno.core.ops.op_sync_serialize_object_with_numbers_as_keys({
.execute_script(
"op_async_serialize_object_with_numbers_as_keys.js",
r#"
-Deno.core.initializeAsyncOps();
-Deno.core.ops.op_async_serialize_object_with_numbers_as_keys({
+Deno.core.opAsync('op_async_serialize_object_with_numbers_as_keys', {
lines: {
100: {
unit: "m"
@@ -3417,7 +3406,6 @@ Deno.core.ops.op_async_serialize_object_with_numbers_as_keys({
.execute_script(
"macrotasks_and_nextticks.js",
r#"
- Deno.core.initializeAsyncOps();
(async function () {
const results = [];
Deno.core.ops.op_set_macrotask_callback(() => {
@@ -3428,6 +3416,7 @@ Deno.core.ops.op_async_serialize_object_with_numbers_as_keys({
results.push("nextTick");
Deno.core.ops.op_set_has_tick_scheduled(false);
});
+
Deno.core.ops.op_set_has_tick_scheduled(true);
await Deno.core.opAsync('op_async_sleep');
if (results[0] != "nextTick") {
@@ -3638,6 +3627,7 @@ Deno.core.ops.op_async_serialize_object_with_numbers_as_keys({
Deno.core.ops.op_store_pending_promise_exception(promise);
Deno.core.ops.op_promise_reject();
});
+
new Promise((_, reject) => reject(Error("reject")));
"#,
)
@@ -3655,6 +3645,7 @@ Deno.core.ops.op_async_serialize_object_with_numbers_as_keys({
prev(...args);
});
}
+
new Promise((_, reject) => reject(Error("reject")));
"#,
)
@@ -3704,6 +3695,7 @@ Deno.core.ops.op_async_serialize_object_with_numbers_as_keys({
Deno.core.ops.op_set_promise_reject_callback((type, promise, reason) => {
Deno.core.ops.op_promise_reject();
});
+
throw new Error('top level throw');
"#;
@@ -3834,6 +3826,8 @@ Deno.core.ops.op_async_serialize_object_with_numbers_as_keys({
const a1b = a1.subarray(0, 3);
const a2 = new Uint8Array([5,10,15]);
const a2b = a2.subarray(0, 3);
+
+
if (!(a1.length > 0 && a1b.length > 0)) {
throw new Error("a1 & a1b should have a length");
}
@@ -3844,6 +3838,7 @@ Deno.core.ops.op_async_serialize_object_with_numbers_as_keys({
if (a1.length > 0 || a1b.length > 0) {
throw new Error("expecting a1 & a1b to be detached");
}
+
const a3 = Deno.core.ops.op_boomerang(a2b);
if (a3.byteLength != 3) {
throw new Error(`Expected a3.byteLength === 3, got ${a3.byteLength}`);
@@ -3854,6 +3849,7 @@ Deno.core.ops.op_async_serialize_object_with_numbers_as_keys({
if (a2.byteLength > 0 || a2b.byteLength > 0) {
throw new Error("expecting a2 & a2b to be detached, a3 re-attached");
}
+
const wmem = new WebAssembly.Memory({ initial: 1, maximum: 2 });
const w32 = new Uint32Array(wmem.buffer);
w32[0] = 1; w32[1] = 2; w32[2] = 3;