diff options
| author | Matt Mastracci <matthew@mastracci.com> | 2023-06-29 10:23:14 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-29 10:23:14 -0600 |
| commit | fbb69329343c9985c26181e6297e6556c46d381d (patch) | |
| tree | ee428c94727bdfdf9040a4944bd66981b4cd07fb /ops/optimizer_tests/param_mut_binding_warning.out | |
| parent | 98df69fd4cbe3687e2ff3519fbd6bff4e5f3101f (diff) | |
refactor(ops): op2 support for generics (#19636)
Implementation of generics for `#[op2]`, along with some refactoring to
improve the ergonomics of ops with generics parameters:
- The ops have generics on the struct rather than the associated
methods, which allows us to trait-ify ops (impossible when they are on
the methods)
- The decl() method can become a trait-associated const field which
unlocks future optimizations
Callers of ops need to switch from:
`op_net_connect_tcp::call::<TestPermission>(conn_state, ip_addr)` to
`op_net_connect_tcp::<TestPermission>::call(conn_state, ip_addr)`.
Diffstat (limited to 'ops/optimizer_tests/param_mut_binding_warning.out')
| -rw-r--r-- | ops/optimizer_tests/param_mut_binding_warning.out | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/ops/optimizer_tests/param_mut_binding_warning.out b/ops/optimizer_tests/param_mut_binding_warning.out index 5435b21db..43a33d6e3 100644 --- a/ops/optimizer_tests/param_mut_binding_warning.out +++ b/ops/optimizer_tests/param_mut_binding_warning.out @@ -3,16 +3,29 @@ /// ///Use `op_read_sync::decl()` to get an op-declaration ///you can include in a `deno_core::Extension`. -pub struct op_read_sync; +pub struct op_read_sync { + _phantom_data: ::std::marker::PhantomData<()>, +} +impl deno_core::_ops::Op for op_read_sync { + const NAME: &'static str = stringify!(op_read_sync); + const DECL: deno_core::OpDecl = deno_core::OpDecl { + name: Self::name(), + v8_fn_ptr: Self::v8_fn_ptr as _, + enabled: true, + fast_fn: None, + is_async: false, + is_unstable: false, + is_v8: false, + arg_count: 0, + }; +} #[doc(hidden)] impl op_read_sync { pub const fn name() -> &'static str { stringify!(op_read_sync) } #[allow(clippy::not_unsafe_ptr_arg_deref)] - pub extern "C" fn v8_fn_ptr<'scope>( - info: *const deno_core::v8::FunctionCallbackInfo, - ) { + pub extern "C" fn v8_fn_ptr(info: *const deno_core::v8::FunctionCallbackInfo) { let info = unsafe { &*info }; let scope = &mut unsafe { deno_core::v8::CallbackScope::new(info) }; let args = deno_core::v8::FunctionCallbackArguments::from_function_callback_info( @@ -21,7 +34,7 @@ impl op_read_sync { let rv = deno_core::v8::ReturnValue::from_function_callback_info(info); Self::v8_func(scope, args, rv); } - pub const fn decl<'scope>() -> deno_core::OpDecl { + pub const fn decl() -> deno_core::OpDecl { deno_core::OpDecl { name: Self::name(), v8_fn_ptr: Self::v8_fn_ptr as _, @@ -35,7 +48,8 @@ impl op_read_sync { } #[inline] #[allow(clippy::too_many_arguments)] - fn call( + #[allow(clippy::extra_unused_lifetimes)] + fn call<'scope>( state: &mut OpState, rid: ResourceId, mut buf: ZeroCopyBuf, |
