1use alloc::boxed::Box;
2use wasmi::{CompilationMode, Config};
3
4#[repr(C)]
8#[derive(Clone)]
9pub struct wasm_config_t {
10 pub(crate) inner: Config,
11}
12
13wasmi_c_api_macros::declare_own!(wasm_config_t);
14
15#[cfg_attr(not(feature = "prefix-symbols"), unsafe(no_mangle))]
24#[cfg_attr(feature = "prefix-symbols", wasmi_c_api_macros::prefix_symbol)]
25pub extern "C" fn wasm_config_new() -> Box<wasm_config_t> {
26 Box::new(wasm_config_t {
27 inner: Config::default(),
28 })
29}
30
31#[unsafe(no_mangle)]
37pub extern "C" fn wasmi_config_wasm_mutable_globals_set(c: &mut wasm_config_t, enable: bool) {
38 c.inner.wasm_mutable_global(enable);
39}
40
41#[unsafe(no_mangle)]
47pub extern "C" fn wasmi_config_wasm_multi_value_set(c: &mut wasm_config_t, enable: bool) {
48 c.inner.wasm_multi_value(enable);
49}
50
51#[unsafe(no_mangle)]
57pub extern "C" fn wasmi_config_wasm_sign_extension_set(c: &mut wasm_config_t, enable: bool) {
58 c.inner.wasm_sign_extension(enable);
59}
60
61#[unsafe(no_mangle)]
67pub extern "C" fn wasmi_config_wasm_saturating_float_to_int_set(
68 c: &mut wasm_config_t,
69 enable: bool,
70) {
71 c.inner.wasm_saturating_float_to_int(enable);
72}
73
74#[unsafe(no_mangle)]
80pub extern "C" fn wasmi_config_wasm_bulk_memory_set(c: &mut wasm_config_t, enable: bool) {
81 c.inner.wasm_bulk_memory(enable);
82}
83
84#[unsafe(no_mangle)]
90pub extern "C" fn wasmi_config_wasm_reference_types_set(c: &mut wasm_config_t, enable: bool) {
91 c.inner.wasm_reference_types(enable);
92}
93
94#[unsafe(no_mangle)]
100pub extern "C" fn wasmi_config_wasm_tail_call_set(c: &mut wasm_config_t, enable: bool) {
101 c.inner.wasm_tail_call(enable);
102}
103
104#[unsafe(no_mangle)]
110pub extern "C" fn wasmi_config_wasm_extended_const_set(c: &mut wasm_config_t, enable: bool) {
111 c.inner.wasm_extended_const(enable);
112}
113
114#[unsafe(no_mangle)]
118pub extern "C" fn wasmi_config_floats_set(config: &mut wasm_config_t, enable: bool) {
119 config.inner.floats(enable);
120}
121
122#[unsafe(no_mangle)]
126pub extern "C" fn wasmi_config_consume_fuel_set(config: &mut wasm_config_t, enable: bool) {
127 config.inner.consume_fuel(enable);
128}
129
130#[repr(u8)]
134#[derive(Clone)]
135pub enum wasmi_compilation_mode_t {
136 WASMI_COMPILATION_MODE_EAGER,
137 WASMI_COMPILATION_MODE_LAZY_TRANSLATION,
138 WASMI_COMPILATION_MODE_LAZY,
139}
140
141#[unsafe(no_mangle)]
145pub extern "C" fn wasmi_config_compilation_mode_set(
146 config: &mut wasm_config_t,
147 mode: wasmi_compilation_mode_t,
148) {
149 use wasmi_compilation_mode_t::*;
150 config.inner.compilation_mode(match mode {
151 WASMI_COMPILATION_MODE_EAGER => CompilationMode::Eager,
152 WASMI_COMPILATION_MODE_LAZY_TRANSLATION => CompilationMode::LazyTranslation,
153 WASMI_COMPILATION_MODE_LAZY => CompilationMode::Lazy,
154 });
155}
156
157#[unsafe(no_mangle)]
161pub extern "C" fn wasmi_config_ignore_custom_sections_set(
162 config: &mut wasm_config_t,
163 enable: bool,
164) {
165 config.inner.ignore_custom_sections(enable);
166}