diff options
Diffstat (limited to 'ext/ffi/lib.rs')
-rw-r--r-- | ext/ffi/lib.rs | 61 |
1 files changed, 38 insertions, 23 deletions
diff --git a/ext/ffi/lib.rs b/ext/ffi/lib.rs index f2e7bb175..b4d8712f4 100644 --- a/ext/ffi/lib.rs +++ b/ext/ffi/lib.rs @@ -6,8 +6,8 @@ use deno_core::error::range_error; use deno_core::error::type_error; use deno_core::error::AnyError; use deno_core::include_js_files; -use deno_core::op_async; -use deno_core::op_sync; +use deno_core::op; + use deno_core::serde_json; use deno_core::serde_json::json; use deno_core::serde_json::Value; @@ -140,27 +140,24 @@ pub fn init<P: FfiPermissions + 'static>(unstable: bool) -> Extension { "00_ffi.js", )) .ops(vec![ - ("op_ffi_load", op_sync(op_ffi_load::<P>)), - ("op_ffi_get_static", op_sync(op_ffi_get_static)), - ("op_ffi_call", op_sync(op_ffi_call)), - ("op_ffi_call_nonblocking", op_async(op_ffi_call_nonblocking)), - ("op_ffi_call_ptr", op_sync(op_ffi_call_ptr)), - ( - "op_ffi_call_ptr_nonblocking", - op_async(op_ffi_call_ptr_nonblocking), - ), - ("op_ffi_ptr_of", op_sync(op_ffi_ptr_of::<P>)), - ("op_ffi_buf_copy_into", op_sync(op_ffi_buf_copy_into::<P>)), - ("op_ffi_cstr_read", op_sync(op_ffi_cstr_read::<P>)), - ("op_ffi_read_u8", op_sync(op_ffi_read_u8::<P>)), - ("op_ffi_read_i8", op_sync(op_ffi_read_i8::<P>)), - ("op_ffi_read_u16", op_sync(op_ffi_read_u16::<P>)), - ("op_ffi_read_i16", op_sync(op_ffi_read_i16::<P>)), - ("op_ffi_read_u32", op_sync(op_ffi_read_u32::<P>)), - ("op_ffi_read_i32", op_sync(op_ffi_read_i32::<P>)), - ("op_ffi_read_u64", op_sync(op_ffi_read_u64::<P>)), - ("op_ffi_read_f32", op_sync(op_ffi_read_f32::<P>)), - ("op_ffi_read_f64", op_sync(op_ffi_read_f64::<P>)), + op_ffi_load::decl::<P>(), + op_ffi_get_static::decl(), + op_ffi_call::decl(), + op_ffi_call_nonblocking::decl(), + op_ffi_call_ptr::decl(), + op_ffi_call_ptr_nonblocking::decl(), + op_ffi_ptr_of::decl::<P>(), + op_ffi_buf_copy_into::decl::<P>(), + op_ffi_cstr_read::decl::<P>(), + op_ffi_read_u8::decl::<P>(), + op_ffi_read_i8::decl::<P>(), + op_ffi_read_u16::decl::<P>(), + op_ffi_read_i16::decl::<P>(), + op_ffi_read_u32::decl::<P>(), + op_ffi_read_i32::decl::<P>(), + op_ffi_read_u64::decl::<P>(), + op_ffi_read_f32::decl::<P>(), + op_ffi_read_f64::decl::<P>(), ]) .state(move |state| { // Stolen from deno_webgpu, is there a better option? @@ -464,6 +461,7 @@ pub(crate) fn format_error(e: dlopen::Error, path: String) -> String { } } +#[op] fn op_ffi_load<FP>( state: &mut deno_core::OpState, args: FfiLoadArgs, @@ -650,6 +648,7 @@ fn ffi_call(args: FfiCallArgs, symbol: &Symbol) -> Result<Value, AnyError> { }) } +#[op] fn op_ffi_call_ptr( _state: &mut deno_core::OpState, args: FfiCallPtrArgs, @@ -659,6 +658,7 @@ fn op_ffi_call_ptr( ffi_call(args.into(), &symbol) } +#[op] async fn op_ffi_call_ptr_nonblocking( _state: Rc<RefCell<deno_core::OpState>>, args: FfiCallPtrArgs, @@ -678,6 +678,7 @@ struct FfiGetArgs { r#type: NativeType, } +#[op] fn op_ffi_get_static( state: &mut deno_core::OpState, args: FfiGetArgs, @@ -735,6 +736,7 @@ fn op_ffi_get_static( }) } +#[op] fn op_ffi_call( state: &mut deno_core::OpState, args: FfiCallArgs, @@ -753,6 +755,7 @@ fn op_ffi_call( } /// A non-blocking FFI call. +#[op] async fn op_ffi_call_nonblocking( state: Rc<RefCell<deno_core::OpState>>, args: FfiCallArgs, @@ -773,6 +776,7 @@ async fn op_ffi_call_nonblocking( .unwrap() } +#[op] fn op_ffi_ptr_of<FP>( state: &mut deno_core::OpState, buf: ZeroCopyBuf, @@ -787,6 +791,7 @@ where Ok(U32x2::from(buf.as_ptr() as u64)) } +#[op] fn op_ffi_buf_copy_into<FP>( state: &mut deno_core::OpState, (src, mut dst, len): (U32x2, ZeroCopyBuf, usize), @@ -809,6 +814,7 @@ where } } +#[op] fn op_ffi_cstr_read<FP>( state: &mut deno_core::OpState, ptr: U32x2, @@ -824,6 +830,7 @@ where Ok(unsafe { CStr::from_ptr(ptr) }.to_str()?.to_string()) } +#[op] fn op_ffi_read_u8<FP>( state: &mut deno_core::OpState, ptr: U32x2, @@ -838,6 +845,7 @@ where Ok(unsafe { ptr::read_unaligned(u64::from(ptr) as *const u8) }) } +#[op] fn op_ffi_read_i8<FP>( state: &mut deno_core::OpState, ptr: U32x2, @@ -852,6 +860,7 @@ where Ok(unsafe { ptr::read_unaligned(u64::from(ptr) as *const i8) }) } +#[op] fn op_ffi_read_u16<FP>( state: &mut deno_core::OpState, ptr: U32x2, @@ -866,6 +875,7 @@ where Ok(unsafe { ptr::read_unaligned(u64::from(ptr) as *const u16) }) } +#[op] fn op_ffi_read_i16<FP>( state: &mut deno_core::OpState, ptr: U32x2, @@ -880,6 +890,7 @@ where Ok(unsafe { ptr::read_unaligned(u64::from(ptr) as *const i16) }) } +#[op] fn op_ffi_read_u32<FP>( state: &mut deno_core::OpState, ptr: U32x2, @@ -894,6 +905,7 @@ where Ok(unsafe { ptr::read_unaligned(u64::from(ptr) as *const u32) }) } +#[op] fn op_ffi_read_i32<FP>( state: &mut deno_core::OpState, ptr: U32x2, @@ -908,6 +920,7 @@ where Ok(unsafe { ptr::read_unaligned(u64::from(ptr) as *const i32) }) } +#[op] fn op_ffi_read_u64<FP>( state: &mut deno_core::OpState, ptr: U32x2, @@ -924,6 +937,7 @@ where })) } +#[op] fn op_ffi_read_f32<FP>( state: &mut deno_core::OpState, ptr: U32x2, @@ -938,6 +952,7 @@ where Ok(unsafe { ptr::read_unaligned(u64::from(ptr) as *const f32) }) } +#[op] fn op_ffi_read_f64<FP>( state: &mut deno_core::OpState, ptr: U32x2, |