proc_macro for generating highly optimized V8 functions from Deno ops.
```rust // Declare an op.
pub fn opadd(: &mut OpState, a: i32, b: i32) -> i32 { a + b }
// Register with an extension. Extension::builder() .ops(vec![op_add::decl()]) .build(); ```
The macro can optimize away code, short circuit fast paths and generate a Fast API impl.
Cases where code is optimized away:
-> () skips serde_v8 and rv.set calls.-> Result<(), E> skips serde_v8 and rv.set calls for Ok() branch.-> ResourceId or -> [int] types will use specialized method like
v8::ReturnValue::set_uint32. A fast path for SMI.-> Result<ResourceId, E> or -> Result<[int], E> types will be optimized
like above for the Ok() branch.The macro will infer and try to auto generate V8 fast API call trait impl for
sync ops with:
&mut OpState, &[u8], &mut [u8], &[u32],
&mut [u32]The #[op(fast)] attribute should be used to enforce fast call generation at
compile time.
Trait gen for async ops & a ZeroCopyBuf equivalent type is planned and will be
added soon.
The #[op(wasm)] attribute should be used for calls expected to be called from
Wasm. This enables the fast call generation and allows seamless WasmMemory
integration for generic and fast calls.
```rust
pub fn opargsget( offset: i32, buffer_offset: i32, memory: Option<&[u8]>, // Must be last parameter. Some(..) when entered from Wasm. ) { // ... } ```