From b4e42953e1d243f2eda20e5be6b845d60b7bf688 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Mon, 14 Mar 2022 23:14:15 +0530 Subject: feat(core): codegen ops (#13861) Co-authored-by: Aaron O'Mullan --- ext/ffi/lib.rs | 61 ++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 23 deletions(-) (limited to 'ext/ffi') 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(unstable: bool) -> Extension { "00_ffi.js", )) .ops(vec![ - ("op_ffi_load", op_sync(op_ffi_load::

)), - ("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::

)), - ("op_ffi_buf_copy_into", op_sync(op_ffi_buf_copy_into::

)), - ("op_ffi_cstr_read", op_sync(op_ffi_cstr_read::

)), - ("op_ffi_read_u8", op_sync(op_ffi_read_u8::

)), - ("op_ffi_read_i8", op_sync(op_ffi_read_i8::

)), - ("op_ffi_read_u16", op_sync(op_ffi_read_u16::

)), - ("op_ffi_read_i16", op_sync(op_ffi_read_i16::

)), - ("op_ffi_read_u32", op_sync(op_ffi_read_u32::

)), - ("op_ffi_read_i32", op_sync(op_ffi_read_i32::

)), - ("op_ffi_read_u64", op_sync(op_ffi_read_u64::

)), - ("op_ffi_read_f32", op_sync(op_ffi_read_f32::

)), - ("op_ffi_read_f64", op_sync(op_ffi_read_f64::

)), + op_ffi_load::decl::

(), + 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::

(), + op_ffi_buf_copy_into::decl::

(), + op_ffi_cstr_read::decl::

(), + op_ffi_read_u8::decl::

(), + op_ffi_read_i8::decl::

(), + op_ffi_read_u16::decl::

(), + op_ffi_read_i16::decl::

(), + op_ffi_read_u32::decl::

(), + op_ffi_read_i32::decl::

(), + op_ffi_read_u64::decl::

(), + op_ffi_read_f32::decl::

(), + op_ffi_read_f64::decl::

(), ]) .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( state: &mut deno_core::OpState, args: FfiLoadArgs, @@ -650,6 +648,7 @@ fn ffi_call(args: FfiCallArgs, symbol: &Symbol) -> Result { }) } +#[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>, 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>, args: FfiCallArgs, @@ -773,6 +776,7 @@ async fn op_ffi_call_nonblocking( .unwrap() } +#[op] fn op_ffi_ptr_of( 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( state: &mut deno_core::OpState, (src, mut dst, len): (U32x2, ZeroCopyBuf, usize), @@ -809,6 +814,7 @@ where } } +#[op] fn op_ffi_cstr_read( 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( 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( 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( 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( 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( 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( 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( state: &mut deno_core::OpState, ptr: U32x2, @@ -924,6 +937,7 @@ where })) } +#[op] fn op_ffi_read_f32( 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( state: &mut deno_core::OpState, ptr: U32x2, -- cgit v1.2.3