diff options
Diffstat (limited to 'core/runtime.rs')
-rw-r--r-- | core/runtime.rs | 56 |
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; |