summaryrefslogtreecommitdiff
path: root/ext/ffi/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/ffi/lib.rs')
-rw-r--r--ext/ffi/lib.rs61
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,