summaryrefslogtreecommitdiff
path: root/ops/optimizer_tests
diff options
context:
space:
mode:
Diffstat (limited to 'ops/optimizer_tests')
-rw-r--r--ops/optimizer_tests/async_nop.expected1
-rw-r--r--ops/optimizer_tests/async_result.expected3
-rw-r--r--ops/optimizer_tests/callback_options.expected3
-rw-r--r--ops/optimizer_tests/callback_options.out7
-rw-r--r--ops/optimizer_tests/op_blob_revoke_object_url.expected1
-rw-r--r--ops/optimizer_tests/op_blob_revoke_object_url.out71
-rw-r--r--ops/optimizer_tests/op_blob_revoke_object_url.rs9
-rw-r--r--ops/optimizer_tests/op_state.expected1
-rw-r--r--ops/optimizer_tests/op_state_basic1.expected1
-rw-r--r--ops/optimizer_tests/op_state_generics.expected1
-rw-r--r--ops/optimizer_tests/op_state_result.expected1
-rw-r--r--ops/optimizer_tests/op_state_warning.expected1
-rw-r--r--ops/optimizer_tests/op_state_with_transforms.expected3
-rw-r--r--ops/optimizer_tests/opstate_with_arity.expected1
-rw-r--r--ops/optimizer_tests/option_arg.expected1
-rw-r--r--ops/optimizer_tests/option_arg.out66
-rw-r--r--ops/optimizer_tests/option_arg.rs6
-rw-r--r--ops/optimizer_tests/raw_ptr.expected3
-rw-r--r--ops/optimizer_tests/serde_v8_value.expected1
-rw-r--r--ops/optimizer_tests/uint8array.expected11
-rw-r--r--ops/optimizer_tests/uint8array.out191
-rw-r--r--ops/optimizer_tests/uint8array.rs3
-rw-r--r--ops/optimizer_tests/unit_result.expected11
-rw-r--r--ops/optimizer_tests/unit_result.out113
-rw-r--r--ops/optimizer_tests/unit_result.rs3
-rw-r--r--ops/optimizer_tests/unit_result2.expected11
-rw-r--r--ops/optimizer_tests/unit_result2.out149
-rw-r--r--ops/optimizer_tests/unit_result2.rs10
-rw-r--r--ops/optimizer_tests/unit_ret.expected11
-rw-r--r--ops/optimizer_tests/unit_ret.out84
-rw-r--r--ops/optimizer_tests/unit_ret.rs3
31 files changed, 775 insertions, 6 deletions
diff --git a/ops/optimizer_tests/async_nop.expected b/ops/optimizer_tests/async_nop.expected
index 78c161e8c..42a1180bd 100644
--- a/ops/optimizer_tests/async_nop.expected
+++ b/ops/optimizer_tests/async_nop.expected
@@ -3,6 +3,7 @@ returns_result: false
has_ref_opstate: false
has_rc_opstate: false
has_fast_callback_option: false
+needs_fast_callback_option: false
fast_result: Some(Void)
fast_parameters: [V8Value, I32]
transforms: {}
diff --git a/ops/optimizer_tests/async_result.expected b/ops/optimizer_tests/async_result.expected
index dcd9cd1e3..be2e79ac0 100644
--- a/ops/optimizer_tests/async_result.expected
+++ b/ops/optimizer_tests/async_result.expected
@@ -2,7 +2,8 @@
returns_result: true
has_ref_opstate: false
has_rc_opstate: true
-has_fast_callback_option: true
+has_fast_callback_option: false
+needs_fast_callback_option: true
fast_result: None
fast_parameters: [V8Value, I32, U32, Uint8Array]
transforms: {2: Transform { kind: SliceU8(true), index: 2 }}
diff --git a/ops/optimizer_tests/callback_options.expected b/ops/optimizer_tests/callback_options.expected
index b309ab987..245fdfd55 100644
--- a/ops/optimizer_tests/callback_options.expected
+++ b/ops/optimizer_tests/callback_options.expected
@@ -2,7 +2,8 @@
returns_result: false
has_ref_opstate: false
has_rc_opstate: false
-has_fast_callback_option: false
+has_fast_callback_option: true
+needs_fast_callback_option: false
fast_result: Some(Void)
fast_parameters: [V8Value]
transforms: {}
diff --git a/ops/optimizer_tests/callback_options.out b/ops/optimizer_tests/callback_options.out
index 020cc4a3e..81745375d 100644
--- a/ops/optimizer_tests/callback_options.out
+++ b/ops/optimizer_tests/callback_options.out
@@ -61,7 +61,7 @@ impl<'scope> deno_core::v8::fast_api::FastFunction for op_fallback_fast {
fn args(&self) -> &'static [deno_core::v8::fast_api::Type] {
use deno_core::v8::fast_api::Type::*;
use deno_core::v8::fast_api::CType;
- &[V8Value]
+ &[V8Value, CallbackOptions]
}
fn return_type(&self) -> deno_core::v8::fast_api::CType {
deno_core::v8::fast_api::CType::Void
@@ -69,10 +69,13 @@ impl<'scope> deno_core::v8::fast_api::FastFunction for op_fallback_fast {
}
fn op_fallback_fast_fn<'scope>(
_: deno_core::v8::Local<deno_core::v8::Object>,
- options: Option<&mut FastApiCallbackOptions>,
+ fast_api_callback_options: *mut deno_core::v8::fast_api::FastApiCallbackOptions,
) -> () {
use deno_core::v8;
use deno_core::_ops;
+ let __opts: &mut v8::fast_api::FastApiCallbackOptions = unsafe {
+ &mut *fast_api_callback_options
+ };
let result = op_fallback::call(options);
result
}
diff --git a/ops/optimizer_tests/op_blob_revoke_object_url.expected b/ops/optimizer_tests/op_blob_revoke_object_url.expected
new file mode 100644
index 000000000..0fae25e86
--- /dev/null
+++ b/ops/optimizer_tests/op_blob_revoke_object_url.expected
@@ -0,0 +1 @@
+MustBeSingleSegment \ No newline at end of file
diff --git a/ops/optimizer_tests/op_blob_revoke_object_url.out b/ops/optimizer_tests/op_blob_revoke_object_url.out
new file mode 100644
index 000000000..72bc75e05
--- /dev/null
+++ b/ops/optimizer_tests/op_blob_revoke_object_url.out
@@ -0,0 +1,71 @@
+#[allow(non_camel_case_types)]
+///Auto-generated by `deno_ops`, i.e: `#[op]`
+///
+///Use `op_blob_revoke_object_url::decl()` to get an op-declaration
+///you can include in a `deno_core::Extension`.
+pub struct op_blob_revoke_object_url;
+#[doc(hidden)]
+impl op_blob_revoke_object_url {
+ pub fn name() -> &'static str {
+ stringify!(op_blob_revoke_object_url)
+ }
+ pub fn v8_fn_ptr<'scope>() -> deno_core::v8::FunctionCallback {
+ use deno_core::v8::MapFnTo;
+ Self::v8_func.map_fn_to()
+ }
+ pub fn decl<'scope>() -> deno_core::OpDecl {
+ deno_core::OpDecl {
+ name: Self::name(),
+ v8_fn_ptr: Self::v8_fn_ptr(),
+ enabled: true,
+ fast_fn: None,
+ is_async: false,
+ is_unstable: false,
+ is_v8: false,
+ argc: 1usize,
+ }
+ }
+ #[inline]
+ #[allow(clippy::too_many_arguments)]
+ pub fn call(state: &mut deno_core::OpState, url: String) -> Result<(), AnyError> {
+ let url = Url::parse(&url)?;
+ let blob_store = state.borrow::<BlobStore>();
+ blob_store.remove_object_url(&url);
+ Ok(())
+ }
+ pub fn v8_func<'scope>(
+ scope: &mut deno_core::v8::HandleScope<'scope>,
+ args: deno_core::v8::FunctionCallbackArguments,
+ mut rv: deno_core::v8::ReturnValue,
+ ) {
+ let ctx = unsafe {
+ &*(deno_core::v8::Local::<deno_core::v8::External>::cast(args.data()).value()
+ as *const deno_core::_ops::OpCtx)
+ };
+ let arg_0 = match deno_core::v8::Local::<
+ deno_core::v8::String,
+ >::try_from(args.get(0usize as i32)) {
+ Ok(v8_string) => deno_core::serde_v8::to_utf8(v8_string, scope),
+ Err(_) => {
+ return deno_core::_ops::throw_type_error(
+ scope,
+ format!("Expected string at position {}", 0usize),
+ );
+ }
+ };
+ let result = Self::call(&mut std::cell::RefCell::borrow_mut(&ctx.state), arg_0);
+ let op_state = ::std::cell::RefCell::borrow(&*ctx.state);
+ op_state.tracker.track_sync(ctx.id);
+ match result {
+ Ok(result) => {}
+ Err(err) => {
+ let exception = deno_core::error::to_v8_error(
+ scope,
+ op_state.get_error_class_fn,
+ &err,
+ );
+ scope.throw_exception(exception);
+ }
+ };
+ }
+}
diff --git a/ops/optimizer_tests/op_blob_revoke_object_url.rs b/ops/optimizer_tests/op_blob_revoke_object_url.rs
new file mode 100644
index 000000000..8e139da06
--- /dev/null
+++ b/ops/optimizer_tests/op_blob_revoke_object_url.rs
@@ -0,0 +1,9 @@
+pub fn op_blob_revoke_object_url(
+ state: &mut deno_core::OpState,
+ url: String,
+) -> Result<(), AnyError> {
+ let url = Url::parse(&url)?;
+ let blob_store = state.borrow::<BlobStore>();
+ blob_store.remove_object_url(&url);
+ Ok(())
+}
diff --git a/ops/optimizer_tests/op_state.expected b/ops/optimizer_tests/op_state.expected
index d8d680455..241ea7693 100644
--- a/ops/optimizer_tests/op_state.expected
+++ b/ops/optimizer_tests/op_state.expected
@@ -3,6 +3,7 @@ returns_result: false
has_ref_opstate: true
has_rc_opstate: false
has_fast_callback_option: false
+needs_fast_callback_option: false
fast_result: Some(Void)
fast_parameters: [V8Value, I32]
transforms: {}
diff --git a/ops/optimizer_tests/op_state_basic1.expected b/ops/optimizer_tests/op_state_basic1.expected
index 6e7b15493..e325dd2f7 100644
--- a/ops/optimizer_tests/op_state_basic1.expected
+++ b/ops/optimizer_tests/op_state_basic1.expected
@@ -3,6 +3,7 @@ returns_result: false
has_ref_opstate: true
has_rc_opstate: false
has_fast_callback_option: false
+needs_fast_callback_option: false
fast_result: Some(U32)
fast_parameters: [V8Value, U32, U32]
transforms: {}
diff --git a/ops/optimizer_tests/op_state_generics.expected b/ops/optimizer_tests/op_state_generics.expected
index b78c81c5f..c29258d75 100644
--- a/ops/optimizer_tests/op_state_generics.expected
+++ b/ops/optimizer_tests/op_state_generics.expected
@@ -3,6 +3,7 @@ returns_result: false
has_ref_opstate: true
has_rc_opstate: false
has_fast_callback_option: false
+needs_fast_callback_option: false
fast_result: Some(Void)
fast_parameters: [V8Value]
transforms: {}
diff --git a/ops/optimizer_tests/op_state_result.expected b/ops/optimizer_tests/op_state_result.expected
index e13390052..15ac033f3 100644
--- a/ops/optimizer_tests/op_state_result.expected
+++ b/ops/optimizer_tests/op_state_result.expected
@@ -3,6 +3,7 @@ returns_result: true
has_ref_opstate: true
has_rc_opstate: false
has_fast_callback_option: false
+needs_fast_callback_option: false
fast_result: Some(U32)
fast_parameters: [V8Value, U32, U32]
transforms: {}
diff --git a/ops/optimizer_tests/op_state_warning.expected b/ops/optimizer_tests/op_state_warning.expected
index 94580fd6d..7b33ad1ef 100644
--- a/ops/optimizer_tests/op_state_warning.expected
+++ b/ops/optimizer_tests/op_state_warning.expected
@@ -3,6 +3,7 @@ returns_result: true
has_ref_opstate: true
has_rc_opstate: false
has_fast_callback_option: false
+needs_fast_callback_option: false
fast_result: Some(U32)
fast_parameters: [V8Value]
transforms: {}
diff --git a/ops/optimizer_tests/op_state_with_transforms.expected b/ops/optimizer_tests/op_state_with_transforms.expected
index 0fc9c9949..d6757801e 100644
--- a/ops/optimizer_tests/op_state_with_transforms.expected
+++ b/ops/optimizer_tests/op_state_with_transforms.expected
@@ -2,7 +2,8 @@
returns_result: false
has_ref_opstate: true
has_rc_opstate: false
-has_fast_callback_option: true
+has_fast_callback_option: false
+needs_fast_callback_option: true
fast_result: Some(Void)
fast_parameters: [V8Value, Uint8Array]
transforms: {1: Transform { kind: SliceU8(true), index: 1 }}
diff --git a/ops/optimizer_tests/opstate_with_arity.expected b/ops/optimizer_tests/opstate_with_arity.expected
index 4be888c33..b38455d0d 100644
--- a/ops/optimizer_tests/opstate_with_arity.expected
+++ b/ops/optimizer_tests/opstate_with_arity.expected
@@ -3,6 +3,7 @@ returns_result: true
has_ref_opstate: false
has_rc_opstate: false
has_fast_callback_option: false
+needs_fast_callback_option: false
fast_result: Some(U32)
fast_parameters: [V8Value, U32, U32, U32, U32]
transforms: {}
diff --git a/ops/optimizer_tests/option_arg.expected b/ops/optimizer_tests/option_arg.expected
new file mode 100644
index 000000000..250ff1022
--- /dev/null
+++ b/ops/optimizer_tests/option_arg.expected
@@ -0,0 +1 @@
+FastUnsupportedParamType \ No newline at end of file
diff --git a/ops/optimizer_tests/option_arg.out b/ops/optimizer_tests/option_arg.out
new file mode 100644
index 000000000..9f647765f
--- /dev/null
+++ b/ops/optimizer_tests/option_arg.out
@@ -0,0 +1,66 @@
+#[allow(non_camel_case_types)]
+///Auto-generated by `deno_ops`, i.e: `#[op]`
+///
+///Use `op_try_close::decl()` to get an op-declaration
+///you can include in a `deno_core::Extension`.
+pub struct op_try_close;
+#[doc(hidden)]
+impl op_try_close {
+ pub fn name() -> &'static str {
+ stringify!(op_try_close)
+ }
+ pub fn v8_fn_ptr<'scope>() -> deno_core::v8::FunctionCallback {
+ use deno_core::v8::MapFnTo;
+ Self::v8_func.map_fn_to()
+ }
+ pub fn decl<'scope>() -> deno_core::OpDecl {
+ deno_core::OpDecl {
+ name: Self::name(),
+ v8_fn_ptr: Self::v8_fn_ptr(),
+ enabled: true,
+ fast_fn: None,
+ is_async: false,
+ is_unstable: false,
+ is_v8: false,
+ argc: 1usize,
+ }
+ }
+ #[inline]
+ #[allow(clippy::too_many_arguments)]
+ pub fn call(state: &mut OpState, rid: Option<ResourceId>) -> Result<(), Error> {}
+ pub fn v8_func<'scope>(
+ scope: &mut deno_core::v8::HandleScope<'scope>,
+ args: deno_core::v8::FunctionCallbackArguments,
+ mut rv: deno_core::v8::ReturnValue,
+ ) {
+ let ctx = unsafe {
+ &*(deno_core::v8::Local::<deno_core::v8::External>::cast(args.data()).value()
+ as *const deno_core::_ops::OpCtx)
+ };
+ let arg_0 = args.get(0usize as i32);
+ let arg_0 = match deno_core::serde_v8::from_v8(scope, arg_0) {
+ Ok(v) => v,
+ Err(err) => {
+ let msg = format!(
+ "Error parsing args at position {}: {}", 0usize,
+ deno_core::anyhow::Error::from(err)
+ );
+ return deno_core::_ops::throw_type_error(scope, msg);
+ }
+ };
+ let result = Self::call(&mut std::cell::RefCell::borrow_mut(&ctx.state), arg_0);
+ let op_state = ::std::cell::RefCell::borrow(&*ctx.state);
+ op_state.tracker.track_sync(ctx.id);
+ match result {
+ Ok(result) => {}
+ Err(err) => {
+ let exception = deno_core::error::to_v8_error(
+ scope,
+ op_state.get_error_class_fn,
+ &err,
+ );
+ scope.throw_exception(exception);
+ }
+ };
+ }
+}
diff --git a/ops/optimizer_tests/option_arg.rs b/ops/optimizer_tests/option_arg.rs
new file mode 100644
index 000000000..47a02974d
--- /dev/null
+++ b/ops/optimizer_tests/option_arg.rs
@@ -0,0 +1,6 @@
+pub fn op_try_close(
+ state: &mut OpState,
+ rid: Option<ResourceId>,
+) -> Result<(), Error> {
+ // ...
+}
diff --git a/ops/optimizer_tests/raw_ptr.expected b/ops/optimizer_tests/raw_ptr.expected
index 12577eb77..badd6e3f4 100644
--- a/ops/optimizer_tests/raw_ptr.expected
+++ b/ops/optimizer_tests/raw_ptr.expected
@@ -2,7 +2,8 @@
returns_result: false
has_ref_opstate: true
has_rc_opstate: false
-has_fast_callback_option: true
+has_fast_callback_option: false
+needs_fast_callback_option: true
fast_result: Some(Void)
fast_parameters: [V8Value, Uint8Array, Uint32Array]
transforms: {1: Transform { kind: PtrU8, index: 1 }, 2: Transform { kind: SliceU32(true), index: 2 }}
diff --git a/ops/optimizer_tests/serde_v8_value.expected b/ops/optimizer_tests/serde_v8_value.expected
index 058b17b1c..411fbec0b 100644
--- a/ops/optimizer_tests/serde_v8_value.expected
+++ b/ops/optimizer_tests/serde_v8_value.expected
@@ -3,6 +3,7 @@ returns_result: false
has_ref_opstate: false
has_rc_opstate: false
has_fast_callback_option: false
+needs_fast_callback_option: false
fast_result: Some(Bool)
fast_parameters: [V8Value, V8Value]
transforms: {0: Transform { kind: V8Value, index: 0 }}
diff --git a/ops/optimizer_tests/uint8array.expected b/ops/optimizer_tests/uint8array.expected
new file mode 100644
index 000000000..0e5667a63
--- /dev/null
+++ b/ops/optimizer_tests/uint8array.expected
@@ -0,0 +1,11 @@
+=== Optimizer Dump ===
+returns_result: false
+has_ref_opstate: false
+has_rc_opstate: false
+has_fast_callback_option: false
+needs_fast_callback_option: true
+fast_result: Some(Bool)
+fast_parameters: [V8Value, Uint8Array, Uint8Array]
+transforms: {0: Transform { kind: SliceU8(false), index: 0 }, 1: Transform { kind: SliceU8(true), index: 1 }}
+is_async: false
+fast_compatible: true
diff --git a/ops/optimizer_tests/uint8array.out b/ops/optimizer_tests/uint8array.out
new file mode 100644
index 000000000..90d420fa0
--- /dev/null
+++ b/ops/optimizer_tests/uint8array.out
@@ -0,0 +1,191 @@
+#[allow(non_camel_case_types)]
+///Auto-generated by `deno_ops`, i.e: `#[op]`
+///
+///Use `op_import_spki_x25519::decl()` to get an op-declaration
+///you can include in a `deno_core::Extension`.
+pub struct op_import_spki_x25519;
+#[doc(hidden)]
+impl op_import_spki_x25519 {
+ pub fn name() -> &'static str {
+ stringify!(op_import_spki_x25519)
+ }
+ pub fn v8_fn_ptr<'scope>() -> deno_core::v8::FunctionCallback {
+ use deno_core::v8::MapFnTo;
+ Self::v8_func.map_fn_to()
+ }
+ pub fn decl<'scope>() -> deno_core::OpDecl {
+ deno_core::OpDecl {
+ name: Self::name(),
+ v8_fn_ptr: Self::v8_fn_ptr(),
+ enabled: true,
+ fast_fn: Some(
+ Box::new(op_import_spki_x25519_fast {
+ _phantom: ::std::marker::PhantomData,
+ }),
+ ),
+ is_async: false,
+ is_unstable: false,
+ is_v8: false,
+ argc: 2usize,
+ }
+ }
+ #[inline]
+ #[allow(clippy::too_many_arguments)]
+ pub fn call(key_data: &[u8], out: &mut [u8]) -> bool {}
+ pub fn v8_func<'scope>(
+ scope: &mut deno_core::v8::HandleScope<'scope>,
+ args: deno_core::v8::FunctionCallbackArguments,
+ mut rv: deno_core::v8::ReturnValue,
+ ) {
+ let ctx = unsafe {
+ &*(deno_core::v8::Local::<deno_core::v8::External>::cast(args.data()).value()
+ as *const deno_core::_ops::OpCtx)
+ };
+ let arg_0 = {
+ let value = args.get(0usize as i32);
+ match deno_core::v8::Local::<deno_core::v8::ArrayBuffer>::try_from(value) {
+ Ok(b) => {
+ let byte_length = b.byte_length();
+ if let Some(data) = b.data() {
+ let store = data.cast::<u8>().as_ptr();
+ unsafe { ::std::slice::from_raw_parts_mut(store, byte_length) }
+ } else {
+ &mut []
+ }
+ }
+ Err(_) => {
+ if let Ok(view)
+ = deno_core::v8::Local::<
+ deno_core::v8::ArrayBufferView,
+ >::try_from(value) {
+ let len = view.byte_length();
+ let offset = view.byte_offset();
+ let buffer = match view.buffer(scope) {
+ Some(v) => v,
+ None => {
+ return deno_core::_ops::throw_type_error(
+ scope,
+ format!("Expected ArrayBufferView at position {}", 0usize),
+ );
+ }
+ };
+ if let Some(data) = buffer.data() {
+ let store = data.cast::<u8>().as_ptr();
+ unsafe {
+ ::std::slice::from_raw_parts_mut(store.add(offset), len)
+ }
+ } else {
+ &mut []
+ }
+ } else {
+ return deno_core::_ops::throw_type_error(
+ scope,
+ format!("Expected ArrayBufferView at position {}", 0usize),
+ );
+ }
+ }
+ }
+ };
+ let arg_1 = {
+ let value = args.get(1usize as i32);
+ match deno_core::v8::Local::<deno_core::v8::ArrayBuffer>::try_from(value) {
+ Ok(b) => {
+ let byte_length = b.byte_length();
+ if let Some(data) = b.data() {
+ let store = data.cast::<u8>().as_ptr();
+ unsafe { ::std::slice::from_raw_parts_mut(store, byte_length) }
+ } else {
+ &mut []
+ }
+ }
+ Err(_) => {
+ if let Ok(view)
+ = deno_core::v8::Local::<
+ deno_core::v8::ArrayBufferView,
+ >::try_from(value) {
+ let len = view.byte_length();
+ let offset = view.byte_offset();
+ let buffer = match view.buffer(scope) {
+ Some(v) => v,
+ None => {
+ return deno_core::_ops::throw_type_error(
+ scope,
+ format!("Expected ArrayBufferView at position {}", 1usize),
+ );
+ }
+ };
+ if let Some(data) = buffer.data() {
+ let store = data.cast::<u8>().as_ptr();
+ unsafe {
+ ::std::slice::from_raw_parts_mut(store.add(offset), len)
+ }
+ } else {
+ &mut []
+ }
+ } else {
+ return deno_core::_ops::throw_type_error(
+ scope,
+ format!("Expected ArrayBufferView at position {}", 1usize),
+ );
+ }
+ }
+ }
+ };
+ let result = Self::call(arg_0, arg_1);
+ let op_state = ::std::cell::RefCell::borrow(&*ctx.state);
+ op_state.tracker.track_sync(ctx.id);
+ match deno_core::serde_v8::to_v8(scope, result) {
+ Ok(ret) => rv.set(ret),
+ Err(err) => {
+ deno_core::_ops::throw_type_error(
+ scope,
+ format!(
+ "Error serializing return: {}",
+ deno_core::anyhow::Error::from(err)
+ ),
+ )
+ }
+ };
+ }
+}
+struct op_import_spki_x25519_fast {
+ _phantom: ::std::marker::PhantomData<()>,
+}
+impl<'scope> deno_core::v8::fast_api::FastFunction for op_import_spki_x25519_fast {
+ fn function(&self) -> *const ::std::ffi::c_void {
+ op_import_spki_x25519_fast_fn as *const ::std::ffi::c_void
+ }
+ fn args(&self) -> &'static [deno_core::v8::fast_api::Type] {
+ use deno_core::v8::fast_api::Type::*;
+ use deno_core::v8::fast_api::CType;
+ &[V8Value, TypedArray(CType::Uint8), TypedArray(CType::Uint8), CallbackOptions]
+ }
+ fn return_type(&self) -> deno_core::v8::fast_api::CType {
+ deno_core::v8::fast_api::CType::Bool
+ }
+}
+fn op_import_spki_x25519_fast_fn<'scope>(
+ _: deno_core::v8::Local<deno_core::v8::Object>,
+ key_data: *const deno_core::v8::fast_api::FastApiTypedArray<u8>,
+ out: *const deno_core::v8::fast_api::FastApiTypedArray<u8>,
+ fast_api_callback_options: *mut deno_core::v8::fast_api::FastApiCallbackOptions,
+) -> bool {
+ use deno_core::v8;
+ use deno_core::_ops;
+ let key_data = match unsafe { &*key_data }.get_storage_if_aligned() {
+ Some(v) => v,
+ None => {
+ unsafe { &mut *fast_api_callback_options }.fallback = true;
+ return Default::default();
+ }
+ };
+ let out = match unsafe { &*out }.get_storage_if_aligned() {
+ Some(v) => v,
+ None => {
+ unsafe { &mut *fast_api_callback_options }.fallback = true;
+ return Default::default();
+ }
+ };
+ let result = op_import_spki_x25519::call(key_data, out);
+ result
+}
diff --git a/ops/optimizer_tests/uint8array.rs b/ops/optimizer_tests/uint8array.rs
new file mode 100644
index 000000000..f4507b21f
--- /dev/null
+++ b/ops/optimizer_tests/uint8array.rs
@@ -0,0 +1,3 @@
+pub fn op_import_spki_x25519(key_data: &[u8], out: &mut [u8]) -> bool {
+ // ...
+}
diff --git a/ops/optimizer_tests/unit_result.expected b/ops/optimizer_tests/unit_result.expected
new file mode 100644
index 000000000..693a771e9
--- /dev/null
+++ b/ops/optimizer_tests/unit_result.expected
@@ -0,0 +1,11 @@
+=== Optimizer Dump ===
+returns_result: true
+has_ref_opstate: false
+has_rc_opstate: false
+has_fast_callback_option: false
+needs_fast_callback_option: false
+fast_result: Some(Void)
+fast_parameters: [V8Value]
+transforms: {}
+is_async: false
+fast_compatible: true
diff --git a/ops/optimizer_tests/unit_result.out b/ops/optimizer_tests/unit_result.out
new file mode 100644
index 000000000..f9d1e0c34
--- /dev/null
+++ b/ops/optimizer_tests/unit_result.out
@@ -0,0 +1,113 @@
+#[allow(non_camel_case_types)]
+///Auto-generated by `deno_ops`, i.e: `#[op]`
+///
+///Use `op_unit_result::decl()` to get an op-declaration
+///you can include in a `deno_core::Extension`.
+pub struct op_unit_result;
+#[doc(hidden)]
+impl op_unit_result {
+ pub fn name() -> &'static str {
+ stringify!(op_unit_result)
+ }
+ pub fn v8_fn_ptr<'scope>() -> deno_core::v8::FunctionCallback {
+ use deno_core::v8::MapFnTo;
+ Self::v8_func.map_fn_to()
+ }
+ pub fn decl<'scope>() -> deno_core::OpDecl {
+ deno_core::OpDecl {
+ name: Self::name(),
+ v8_fn_ptr: Self::v8_fn_ptr(),
+ enabled: true,
+ fast_fn: Some(
+ Box::new(op_unit_result_fast {
+ _phantom: ::std::marker::PhantomData,
+ }),
+ ),
+ is_async: false,
+ is_unstable: false,
+ is_v8: false,
+ argc: 0usize,
+ }
+ }
+ #[inline]
+ #[allow(clippy::too_many_arguments)]
+ fn call() -> Result<(), AnyError> {
+ Ok(())
+ }
+ pub fn v8_func<'scope>(
+ scope: &mut deno_core::v8::HandleScope<'scope>,
+ args: deno_core::v8::FunctionCallbackArguments,
+ mut rv: deno_core::v8::ReturnValue,
+ ) {
+ let ctx = unsafe {
+ &*(deno_core::v8::Local::<deno_core::v8::External>::cast(args.data()).value()
+ as *const deno_core::_ops::OpCtx)
+ };
+ {
+ let op_state = &mut std::cell::RefCell::borrow_mut(&ctx.state);
+ if let Some(err) = op_state.last_fast_op_error.take() {
+ let exception = deno_core::error::to_v8_error(
+ scope,
+ op_state.get_error_class_fn,
+ &err,
+ );
+ scope.throw_exception(exception);
+ return;
+ }
+ }
+ let result = Self::call();
+ let op_state = ::std::cell::RefCell::borrow(&*ctx.state);
+ op_state.tracker.track_sync(ctx.id);
+ match result {
+ Ok(result) => {}
+ Err(err) => {
+ let exception = deno_core::error::to_v8_error(
+ scope,
+ op_state.get_error_class_fn,
+ &err,
+ );
+ scope.throw_exception(exception);
+ }
+ };
+ }
+}
+struct op_unit_result_fast {
+ _phantom: ::std::marker::PhantomData<()>,
+}
+impl<'scope> deno_core::v8::fast_api::FastFunction for op_unit_result_fast {
+ fn function(&self) -> *const ::std::ffi::c_void {
+ op_unit_result_fast_fn as *const ::std::ffi::c_void
+ }
+ fn args(&self) -> &'static [deno_core::v8::fast_api::Type] {
+ use deno_core::v8::fast_api::Type::*;
+ use deno_core::v8::fast_api::CType;
+ &[V8Value, CallbackOptions]
+ }
+ fn return_type(&self) -> deno_core::v8::fast_api::CType {
+ deno_core::v8::fast_api::CType::Void
+ }
+}
+fn op_unit_result_fast_fn<'scope>(
+ _: deno_core::v8::Local<deno_core::v8::Object>,
+ fast_api_callback_options: *mut deno_core::v8::fast_api::FastApiCallbackOptions,
+) -> () {
+ use deno_core::v8;
+ use deno_core::_ops;
+ let __opts: &mut v8::fast_api::FastApiCallbackOptions = unsafe {
+ &mut *fast_api_callback_options
+ };
+ let __ctx = unsafe {
+ &*(v8::Local::<v8::External>::cast(unsafe { __opts.data.data }).value()
+ as *const _ops::OpCtx)
+ };
+ let op_state = &mut ::std::cell::RefCell::borrow_mut(&__ctx.state);
+ let result = op_unit_result::call();
+ match result {
+ Ok(result) => result,
+ Err(err) => {
+ op_state.last_fast_op_error.replace(err);
+ __opts.fallback = true;
+ Default::default()
+ }
+ }
+}
diff --git a/ops/optimizer_tests/unit_result.rs b/ops/optimizer_tests/unit_result.rs
new file mode 100644
index 000000000..207896929
--- /dev/null
+++ b/ops/optimizer_tests/unit_result.rs
@@ -0,0 +1,3 @@
+fn op_unit_result() -> Result<(), AnyError> {
+ Ok(())
+}
diff --git a/ops/optimizer_tests/unit_result2.expected b/ops/optimizer_tests/unit_result2.expected
new file mode 100644
index 000000000..d799a77b2
--- /dev/null
+++ b/ops/optimizer_tests/unit_result2.expected
@@ -0,0 +1,11 @@
+=== Optimizer Dump ===
+returns_result: true
+has_ref_opstate: true
+has_rc_opstate: false
+has_fast_callback_option: false
+needs_fast_callback_option: false
+fast_result: Some(Void)
+fast_parameters: [V8Value, U32, Bool]
+transforms: {}
+is_async: false
+fast_compatible: true
diff --git a/ops/optimizer_tests/unit_result2.out b/ops/optimizer_tests/unit_result2.out
new file mode 100644
index 000000000..87e0ee0b5
--- /dev/null
+++ b/ops/optimizer_tests/unit_result2.out
@@ -0,0 +1,149 @@
+#[allow(non_camel_case_types)]
+///Auto-generated by `deno_ops`, i.e: `#[op]`
+///
+///Use `op_set_nodelay::decl()` to get an op-declaration
+///you can include in a `deno_core::Extension`.
+pub struct op_set_nodelay;
+#[doc(hidden)]
+impl op_set_nodelay {
+ pub fn name() -> &'static str {
+ stringify!(op_set_nodelay)
+ }
+ pub fn v8_fn_ptr<'scope>() -> deno_core::v8::FunctionCallback {
+ use deno_core::v8::MapFnTo;
+ Self::v8_func.map_fn_to()
+ }
+ pub fn decl<'scope>() -> deno_core::OpDecl {
+ deno_core::OpDecl {
+ name: Self::name(),
+ v8_fn_ptr: Self::v8_fn_ptr(),
+ enabled: true,
+ fast_fn: Some(
+ Box::new(op_set_nodelay_fast {
+ _phantom: ::std::marker::PhantomData,
+ }),
+ ),
+ is_async: false,
+ is_unstable: false,
+ is_v8: false,
+ argc: 2usize,
+ }
+ }
+ #[inline]
+ #[allow(clippy::too_many_arguments)]
+ pub fn call(
+ state: &mut OpState,
+ rid: ResourceId,
+ nodelay: bool,
+ ) -> Result<(), AnyError> {
+ super::check_unstable(state, "Deno.Conn#setNoDelay");
+ let resource: Rc<TcpStreamResource> = state
+ .resource_table
+ .get::<TcpStreamResource>(rid)?;
+ resource.set_nodelay(nodelay)
+ }
+ pub fn v8_func<'scope>(
+ scope: &mut deno_core::v8::HandleScope<'scope>,
+ args: deno_core::v8::FunctionCallbackArguments,
+ mut rv: deno_core::v8::ReturnValue,
+ ) {
+ let ctx = unsafe {
+ &*(deno_core::v8::Local::<deno_core::v8::External>::cast(args.data()).value()
+ as *const deno_core::_ops::OpCtx)
+ };
+ {
+ let op_state = &mut std::cell::RefCell::borrow_mut(&ctx.state);
+ if let Some(err) = op_state.last_fast_op_error.take() {
+ let exception = deno_core::error::to_v8_error(
+ scope,
+ op_state.get_error_class_fn,
+ &err,
+ );
+ scope.throw_exception(exception);
+ return;
+ }
+ }
+ let arg_0 = args.get(0usize as i32);
+ let arg_0 = match deno_core::serde_v8::from_v8(scope, arg_0) {
+ Ok(v) => v,
+ Err(err) => {
+ let msg = format!(
+ "Error parsing args at position {}: {}", 0usize,
+ deno_core::anyhow::Error::from(err)
+ );
+ return deno_core::_ops::throw_type_error(scope, msg);
+ }
+ };
+ let arg_1 = args.get(1usize as i32);
+ let arg_1 = match deno_core::serde_v8::from_v8(scope, arg_1) {
+ Ok(v) => v,
+ Err(err) => {
+ let msg = format!(
+ "Error parsing args at position {}: {}", 1usize,
+ deno_core::anyhow::Error::from(err)
+ );
+ return deno_core::_ops::throw_type_error(scope, msg);
+ }
+ };
+ let result = Self::call(
+ &mut std::cell::RefCell::borrow_mut(&ctx.state),
+ arg_0,
+ arg_1,
+ );
+ let op_state = ::std::cell::RefCell::borrow(&*ctx.state);
+ op_state.tracker.track_sync(ctx.id);
+ match result {
+ Ok(result) => {}
+ Err(err) => {
+ let exception = deno_core::error::to_v8_error(
+ scope,
+ op_state.get_error_class_fn,
+ &err,
+ );
+ scope.throw_exception(exception);
+ }
+ };
+ }
+}
+struct op_set_nodelay_fast {
+ _phantom: ::std::marker::PhantomData<()>,
+}
+impl<'scope> deno_core::v8::fast_api::FastFunction for op_set_nodelay_fast {
+ fn function(&self) -> *const ::std::ffi::c_void {
+ op_set_nodelay_fast_fn as *const ::std::ffi::c_void
+ }
+ fn args(&self) -> &'static [deno_core::v8::fast_api::Type] {
+ use deno_core::v8::fast_api::Type::*;
+ use deno_core::v8::fast_api::CType;
+ &[V8Value, Uint32, Bool, CallbackOptions]
+ }
+ fn return_type(&self) -> deno_core::v8::fast_api::CType {
+ deno_core::v8::fast_api::CType::Void
+ }
+}
+fn op_set_nodelay_fast_fn<'scope>(
+ _: deno_core::v8::Local<deno_core::v8::Object>,
+ rid: ResourceId,
+ nodelay: bool,
+ fast_api_callback_options: *mut deno_core::v8::fast_api::FastApiCallbackOptions,
+) -> () {
+ use deno_core::v8;
+ use deno_core::_ops;
+ let __opts: &mut v8::fast_api::FastApiCallbackOptions = unsafe {
+ &mut *fast_api_callback_options
+ };
+ let __ctx = unsafe {
+ &*(v8::Local::<v8::External>::cast(unsafe { __opts.data.data }).value()
+ as *const _ops::OpCtx)
+ };
+ let state = &mut ::std::cell::RefCell::borrow_mut(&__ctx.state);
+ let result = op_set_nodelay::call(state, rid, nodelay);
+ match result {
+ Ok(result) => result,
+ Err(err) => {
+ state.last_fast_op_error.replace(err);
+ __opts.fallback = true;
+ Default::default()
+ }
+ }
+}
diff --git a/ops/optimizer_tests/unit_result2.rs b/ops/optimizer_tests/unit_result2.rs
new file mode 100644
index 000000000..d3e8ced6a
--- /dev/null
+++ b/ops/optimizer_tests/unit_result2.rs
@@ -0,0 +1,10 @@
+pub fn op_set_nodelay(
+ state: &mut OpState,
+ rid: ResourceId,
+ nodelay: bool,
+) -> Result<(), AnyError> {
+ super::check_unstable(state, "Deno.Conn#setNoDelay");
+ let resource: Rc<TcpStreamResource> =
+ state.resource_table.get::<TcpStreamResource>(rid)?;
+ resource.set_nodelay(nodelay)
+}
diff --git a/ops/optimizer_tests/unit_ret.expected b/ops/optimizer_tests/unit_ret.expected
new file mode 100644
index 000000000..5d414e1e3
--- /dev/null
+++ b/ops/optimizer_tests/unit_ret.expected
@@ -0,0 +1,11 @@
+=== Optimizer Dump ===
+returns_result: false
+has_ref_opstate: false
+has_rc_opstate: false
+has_fast_callback_option: false
+needs_fast_callback_option: false
+fast_result: Some(Void)
+fast_parameters: [V8Value]
+transforms: {}
+is_async: false
+fast_compatible: true
diff --git a/ops/optimizer_tests/unit_ret.out b/ops/optimizer_tests/unit_ret.out
new file mode 100644
index 000000000..c18fa1915
--- /dev/null
+++ b/ops/optimizer_tests/unit_ret.out
@@ -0,0 +1,84 @@
+#[allow(non_camel_case_types)]
+///Auto-generated by `deno_ops`, i.e: `#[op]`
+///
+///Use `op_unit::decl()` to get an op-declaration
+///you can include in a `deno_core::Extension`.
+pub struct op_unit;
+#[doc(hidden)]
+impl op_unit {
+ pub fn name() -> &'static str {
+ stringify!(op_unit)
+ }
+ pub fn v8_fn_ptr<'scope>() -> deno_core::v8::FunctionCallback {
+ use deno_core::v8::MapFnTo;
+ Self::v8_func.map_fn_to()
+ }
+ pub fn decl<'scope>() -> deno_core::OpDecl {
+ deno_core::OpDecl {
+ name: Self::name(),
+ v8_fn_ptr: Self::v8_fn_ptr(),
+ enabled: true,
+ fast_fn: Some(
+ Box::new(op_unit_fast {
+ _phantom: ::std::marker::PhantomData,
+ }),
+ ),
+ is_async: false,
+ is_unstable: false,
+ is_v8: false,
+ argc: 0usize,
+ }
+ }
+ #[inline]
+ #[allow(clippy::too_many_arguments)]
+ fn call() -> () {
+ ()
+ }
+ pub fn v8_func<'scope>(
+ scope: &mut deno_core::v8::HandleScope<'scope>,
+ args: deno_core::v8::FunctionCallbackArguments,
+ mut rv: deno_core::v8::ReturnValue,
+ ) {
+ let ctx = unsafe {
+ &*(deno_core::v8::Local::<deno_core::v8::External>::cast(args.data()).value()
+ as *const deno_core::_ops::OpCtx)
+ };
+ let result = Self::call();
+ let op_state = ::std::cell::RefCell::borrow(&*ctx.state);
+ op_state.tracker.track_sync(ctx.id);
+ match deno_core::serde_v8::to_v8(scope, result) {
+ Ok(ret) => rv.set(ret),
+ Err(err) => {
+ deno_core::_ops::throw_type_error(
+ scope,
+ format!(
+ "Error serializing return: {}",
+ deno_core::anyhow::Error::from(err)
+ ),
+ )
+ }
+ };
+ }
+}
+struct op_unit_fast {
+ _phantom: ::std::marker::PhantomData<()>,
+}
+impl<'scope> deno_core::v8::fast_api::FastFunction for op_unit_fast {
+ fn function(&self) -> *const ::std::ffi::c_void {
+ op_unit_fast_fn as *const ::std::ffi::c_void
+ }
+ fn args(&self) -> &'static [deno_core::v8::fast_api::Type] {
+ use deno_core::v8::fast_api::Type::*;
+ use deno_core::v8::fast_api::CType;
+ &[V8Value]
+ }
+ fn return_type(&self) -> deno_core::v8::fast_api::CType {
+ deno_core::v8::fast_api::CType::Void
+ }
+}
+fn op_unit_fast_fn<'scope>(_: deno_core::v8::Local<deno_core::v8::Object>) -> () {
+ use deno_core::v8;
+ use deno_core::_ops;
+ let result = op_unit::call();
+ result
+}
diff --git a/ops/optimizer_tests/unit_ret.rs b/ops/optimizer_tests/unit_ret.rs
new file mode 100644
index 000000000..4cf3651db
--- /dev/null
+++ b/ops/optimizer_tests/unit_ret.rs
@@ -0,0 +1,3 @@
+fn op_unit() -> () {
+ ()
+}