simien_ops 0.1.1

Proc macros for writing simien_core ops. Forked from Deno's deno_ops 0.288.0.
Documentation
#[allow(non_camel_case_types)]
const fn op_make_cppgc_object() -> ::simien_core::_ops::OpDecl {
    #[allow(non_camel_case_types)]
    struct op_make_cppgc_object {
        _unconstructable: ::std::marker::PhantomData<()>,
    }
    impl ::simien_core::_ops::Op for op_make_cppgc_object {
        const NAME: &'static str = stringify!(op_make_cppgc_object);
        const DECL: ::simien_core::_ops::OpDecl = ::simien_core::_ops::OpDecl::new_internal_op2(
            ::simien_core::__op_name_fast!(op_make_cppgc_object),
            true,
            false,
            false,
            1usize as u8,
            false,
            false,
            Self::v8_fn_ptr as _,
            Self::slow_function_impl,
            ::simien_core::AccessorType::None,
            None,
            None,
            ::simien_core::OpMetadata {
                ..::simien_core::OpMetadata::default()
            },
        );
    }
    impl op_make_cppgc_object {
        pub const fn name() -> &'static str {
            <Self as simien_core::_ops::Op>::NAME
        }
        fn slow_function_impl<'s>(
            info: *const simien_core::v8::FunctionCallbackInfo,
        ) -> usize {
            let info: &'s _ = unsafe { &*info };
            #[cfg(debug_assertions)]
            let _reentrancy_check_guard = simien_core::_ops::reentrancy_check(
                &<Self as simien_core::_ops::Op>::DECL,
            );
            let parts: simien_core::v8::FunctionCallbackInfoParts<'s> = info.get_parts();
            let scope = ::std::pin::pin!(
                unsafe { simien_core::v8::CallbackScope::new(info) }
            );
            let mut scope = scope.init();
            let mut rv = parts.return_value;
            let args = simien_core::v8::FunctionCallbackArguments::from_function_callback_info_parts(
                info,
                &parts,
            );
            let opctx: &'s _ = unsafe {
                &*(simien_core::v8::Local::<
                    simien_core::v8::External,
                >::cast_unchecked(args.data())
                    .value() as *const simien_core::_ops::OpCtx)
            };
            let result = { Self::call() };
            let promise_id = simien_core::_ops::to_i32_option(&args.get(0))
                .unwrap_or_default();
            if let Some(result) = simien_core::_ops::map_async_op_infallible(
                opctx,
                false,
                false,
                promise_id,
                result,
                |scope, result| {
                    Ok(
                        simien_core::_ops::RustToV8::to_v8(
                            simien_core::_ops::RustToV8Marker::<
                                simien_core::_ops::CppGcMarker,
                                _,
                            >::from(result),
                            scope,
                        ),
                    )
                },
            ) {
                rv.set(
                    simien_core::_ops::RustToV8::to_v8(
                        simien_core::_ops::RustToV8Marker::<
                            simien_core::_ops::CppGcMarker,
                            _,
                        >::from(result),
                        &mut scope,
                    ),
                );
                return 0;
            }
            return 2;
        }
        extern "C" fn v8_fn_ptr(info: *const simien_core::v8::FunctionCallbackInfo) {
            Self::slow_function_impl(info);
        }
    }
    impl op_make_cppgc_object {
        #[allow(clippy::too_many_arguments)]
        async fn call() -> Wrap {
            Wrap
        }
    }
    <op_make_cppgc_object as ::simien_core::_ops::Op>::DECL
}

#[allow(non_camel_case_types)]
const fn op_use_cppgc_object() -> ::simien_core::_ops::OpDecl {
    #[allow(non_camel_case_types)]
    struct op_use_cppgc_object {
        _unconstructable: ::std::marker::PhantomData<()>,
    }
    impl ::simien_core::_ops::Op for op_use_cppgc_object {
        const NAME: &'static str = stringify!(op_use_cppgc_object);
        const DECL: ::simien_core::_ops::OpDecl = ::simien_core::_ops::OpDecl::new_internal_op2(
            ::simien_core::__op_name_fast!(op_use_cppgc_object),
            true,
            false,
            false,
            2usize as u8,
            false,
            false,
            Self::v8_fn_ptr as _,
            Self::slow_function_impl,
            ::simien_core::AccessorType::None,
            None,
            None,
            ::simien_core::OpMetadata {
                ..::simien_core::OpMetadata::default()
            },
        );
    }
    impl op_use_cppgc_object {
        pub const fn name() -> &'static str {
            <Self as simien_core::_ops::Op>::NAME
        }
        fn slow_function_impl<'s>(
            info: *const simien_core::v8::FunctionCallbackInfo,
        ) -> usize {
            let info: &'s _ = unsafe { &*info };
            #[cfg(debug_assertions)]
            let _reentrancy_check_guard = simien_core::_ops::reentrancy_check(
                &<Self as simien_core::_ops::Op>::DECL,
            );
            let parts: simien_core::v8::FunctionCallbackInfoParts<'s> = info.get_parts();
            let scope = ::std::pin::pin!(
                unsafe { simien_core::v8::CallbackScope::new(info) }
            );
            let mut scope = scope.init();
            let mut rv = parts.return_value;
            let args = simien_core::v8::FunctionCallbackArguments::from_function_callback_info_parts(
                info,
                &parts,
            );
            let opctx: &'s _ = unsafe {
                &*(simien_core::v8::Local::<
                    simien_core::v8::External,
                >::cast_unchecked(args.data())
                    .value() as *const simien_core::_ops::OpCtx)
            };
            let result = {
                let arg0 = args.get(1usize as i32);
                let Some(mut arg0) = simien_core::_ops::try_unwrap_cppgc_object::<
                    Wrap,
                >(&mut scope, arg0) else {
                    simien_core::_ops::throw_error_one_byte_info(&info, "expected Wrap");
                    return 1;
                };
                arg0.root();
                async move {
                    let arg0 = unsafe { arg0.as_ref() };
                    Self::call(arg0).await
                }
            };
            let promise_id = simien_core::_ops::to_i32_option(&args.get(0))
                .unwrap_or_default();
            if let Some(result) = simien_core::_ops::map_async_op_infallible(
                opctx,
                false,
                false,
                promise_id,
                result,
                |scope, result| { Ok(simien_core::_ops::RustToV8::to_v8(result, scope)) },
            ) {
                simien_core::_ops::RustToV8RetVal::to_v8_rv(result, &mut rv);
                return 0;
            }
            return 2;
        }
        extern "C" fn v8_fn_ptr(info: *const simien_core::v8::FunctionCallbackInfo) {
            Self::slow_function_impl(info);
        }
    }
    impl op_use_cppgc_object {
        #[allow(clippy::too_many_arguments)]
        async fn call(_wrap: &Wrap) {}
    }
    <op_use_cppgc_object as ::simien_core::_ops::Op>::DECL
}

#[allow(non_camel_case_types)]
const fn op_use_optional_cppgc_object() -> ::simien_core::_ops::OpDecl {
    #[allow(non_camel_case_types)]
    struct op_use_optional_cppgc_object {
        _unconstructable: ::std::marker::PhantomData<()>,
    }
    impl ::simien_core::_ops::Op for op_use_optional_cppgc_object {
        const NAME: &'static str = stringify!(op_use_optional_cppgc_object);
        const DECL: ::simien_core::_ops::OpDecl = ::simien_core::_ops::OpDecl::new_internal_op2(
            ::simien_core::__op_name_fast!(op_use_optional_cppgc_object),
            true,
            false,
            false,
            2usize as u8,
            false,
            false,
            Self::v8_fn_ptr as _,
            Self::slow_function_impl,
            ::simien_core::AccessorType::None,
            None,
            None,
            ::simien_core::OpMetadata {
                ..::simien_core::OpMetadata::default()
            },
        );
    }
    impl op_use_optional_cppgc_object {
        pub const fn name() -> &'static str {
            <Self as simien_core::_ops::Op>::NAME
        }
        fn slow_function_impl<'s>(
            info: *const simien_core::v8::FunctionCallbackInfo,
        ) -> usize {
            let info: &'s _ = unsafe { &*info };
            #[cfg(debug_assertions)]
            let _reentrancy_check_guard = simien_core::_ops::reentrancy_check(
                &<Self as simien_core::_ops::Op>::DECL,
            );
            let parts: simien_core::v8::FunctionCallbackInfoParts<'s> = info.get_parts();
            let scope = ::std::pin::pin!(
                unsafe { simien_core::v8::CallbackScope::new(info) }
            );
            let mut scope = scope.init();
            let mut rv = parts.return_value;
            let args = simien_core::v8::FunctionCallbackArguments::from_function_callback_info_parts(
                info,
                &parts,
            );
            let opctx: &'s _ = unsafe {
                &*(simien_core::v8::Local::<
                    simien_core::v8::External,
                >::cast_unchecked(args.data())
                    .value() as *const simien_core::_ops::OpCtx)
            };
            let result = {
                let arg0 = args.get(1usize as i32);
                let arg0 = if arg0.is_null_or_undefined() {
                    None
                } else if let Some(mut arg0) = simien_core::_ops::try_unwrap_cppgc_object::<
                    Wrap,
                >(&mut scope, arg0) {
                    arg0.root();
                    Some(arg0)
                } else {
                    simien_core::_ops::throw_error_one_byte_info(&info, "expected Wrap");
                    return 1;
                };
                async move {
                    let arg0 = unsafe { arg0.as_ref().map(|a| a.as_ref()) };
                    Self::call(arg0).await
                }
            };
            let promise_id = simien_core::_ops::to_i32_option(&args.get(0))
                .unwrap_or_default();
            if let Some(result) = simien_core::_ops::map_async_op_infallible(
                opctx,
                false,
                false,
                promise_id,
                result,
                |scope, result| { Ok(simien_core::_ops::RustToV8::to_v8(result, scope)) },
            ) {
                simien_core::_ops::RustToV8RetVal::to_v8_rv(result, &mut rv);
                return 0;
            }
            return 2;
        }
        extern "C" fn v8_fn_ptr(info: *const simien_core::v8::FunctionCallbackInfo) {
            Self::slow_function_impl(info);
        }
    }
    impl op_use_optional_cppgc_object {
        #[allow(clippy::too_many_arguments)]
        async fn call(_wrap: Option<&Wrap>) {}
    }
    <op_use_optional_cppgc_object as ::simien_core::_ops::Op>::DECL
}