Remove stray file in C API (#1464)
Forgot to delete this from a previous PR!
This commit is contained in:
@@ -1,286 +0,0 @@
|
||||
//! This file defines the extern "C" API extension, which are specific
|
||||
//! to the wasmtime implementation.
|
||||
|
||||
use crate::*;
|
||||
use std::str;
|
||||
use wasmtime::{Extern, Linker, OptLevel, ProfilingStrategy, Strategy};
|
||||
|
||||
#[repr(u8)]
|
||||
#[derive(Clone)]
|
||||
pub enum wasmtime_strategy_t {
|
||||
WASMTIME_STRATEGY_AUTO,
|
||||
WASMTIME_STRATEGY_CRANELIFT,
|
||||
WASMTIME_STRATEGY_LIGHTBEAM,
|
||||
}
|
||||
|
||||
#[repr(u8)]
|
||||
#[derive(Clone)]
|
||||
pub enum wasmtime_opt_level_t {
|
||||
WASMTIME_OPT_LEVEL_NONE,
|
||||
WASMTIME_OPT_LEVEL_SPEED,
|
||||
WASMTIME_OPT_LEVEL_SPEED_AND_SIZE,
|
||||
}
|
||||
|
||||
#[repr(u8)]
|
||||
#[derive(Clone)]
|
||||
pub enum wasmtime_profiling_strategy_t {
|
||||
WASMTIME_PROFILING_STRATEGY_NONE,
|
||||
WASMTIME_PROFILING_STRATEGY_JITDUMP,
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_config_debug_info_set(c: *mut wasm_config_t, enable: bool) {
|
||||
(*c).config.debug_info(enable);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_config_wasm_threads_set(c: *mut wasm_config_t, enable: bool) {
|
||||
(*c).config.wasm_threads(enable);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_config_wasm_reference_types_set(
|
||||
c: *mut wasm_config_t,
|
||||
enable: bool,
|
||||
) {
|
||||
(*c).config.wasm_reference_types(enable);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_config_wasm_simd_set(c: *mut wasm_config_t, enable: bool) {
|
||||
(*c).config.wasm_simd(enable);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_config_wasm_bulk_memory_set(c: *mut wasm_config_t, enable: bool) {
|
||||
(*c).config.wasm_bulk_memory(enable);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_config_wasm_multi_value_set(c: *mut wasm_config_t, enable: bool) {
|
||||
(*c).config.wasm_multi_value(enable);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_config_strategy_set(
|
||||
c: *mut wasm_config_t,
|
||||
strategy: wasmtime_strategy_t,
|
||||
) {
|
||||
use wasmtime_strategy_t::*;
|
||||
drop((*c).config.strategy(match strategy {
|
||||
WASMTIME_STRATEGY_AUTO => Strategy::Auto,
|
||||
WASMTIME_STRATEGY_CRANELIFT => Strategy::Cranelift,
|
||||
WASMTIME_STRATEGY_LIGHTBEAM => Strategy::Lightbeam,
|
||||
}));
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_config_cranelift_debug_verifier_set(
|
||||
c: *mut wasm_config_t,
|
||||
enable: bool,
|
||||
) {
|
||||
(*c).config.cranelift_debug_verifier(enable);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_config_cranelift_opt_level_set(
|
||||
c: *mut wasm_config_t,
|
||||
opt_level: wasmtime_opt_level_t,
|
||||
) {
|
||||
use wasmtime_opt_level_t::*;
|
||||
(*c).config.cranelift_opt_level(match opt_level {
|
||||
WASMTIME_OPT_LEVEL_NONE => OptLevel::None,
|
||||
WASMTIME_OPT_LEVEL_SPEED => OptLevel::Speed,
|
||||
WASMTIME_OPT_LEVEL_SPEED_AND_SIZE => OptLevel::SpeedAndSize,
|
||||
});
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_config_profiler_set(
|
||||
c: *mut wasm_config_t,
|
||||
strategy: wasmtime_profiling_strategy_t,
|
||||
) {
|
||||
use wasmtime_profiling_strategy_t::*;
|
||||
drop((*c).config.profiler(match strategy {
|
||||
WASMTIME_PROFILING_STRATEGY_NONE => ProfilingStrategy::None,
|
||||
WASMTIME_PROFILING_STRATEGY_JITDUMP => ProfilingStrategy::JitDump,
|
||||
}));
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn wasmtime_wat2wasm(
|
||||
wat: &wasm_byte_vec_t,
|
||||
ret: &mut wasm_byte_vec_t,
|
||||
error: Option<&mut wasm_byte_vec_t>,
|
||||
) -> bool {
|
||||
let wat = match str::from_utf8(wat.as_slice()) {
|
||||
Ok(s) => s,
|
||||
Err(_) => {
|
||||
if let Some(error) = error {
|
||||
error.set_buffer(b"input was not valid utf-8".to_vec());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
match wat::parse_str(wat) {
|
||||
Ok(bytes) => {
|
||||
ret.set_buffer(bytes.into());
|
||||
true
|
||||
}
|
||||
Err(e) => {
|
||||
if let Some(error) = error {
|
||||
error.set_buffer(e.to_string().into_bytes());
|
||||
}
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
pub struct wasmtime_linker_t {
|
||||
linker: Linker,
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_linker_new(store: *mut wasm_store_t) -> *mut wasmtime_linker_t {
|
||||
Box::into_raw(Box::new(wasmtime_linker_t {
|
||||
linker: Linker::new(&(*store).store.borrow()),
|
||||
}))
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_linker_allow_shadowing(
|
||||
linker: *mut wasmtime_linker_t,
|
||||
allow_shadowing: bool,
|
||||
) {
|
||||
(*linker).linker.allow_shadowing(allow_shadowing);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_linker_delete(linker: *mut wasmtime_linker_t) {
|
||||
drop(Box::from_raw(linker));
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_linker_define(
|
||||
linker: *mut wasmtime_linker_t,
|
||||
module: *const wasm_name_t,
|
||||
name: *const wasm_name_t,
|
||||
item: *const wasm_extern_t,
|
||||
) -> bool {
|
||||
let linker = &mut (*linker).linker;
|
||||
let module = match str::from_utf8((*module).as_slice()) {
|
||||
Ok(s) => s,
|
||||
Err(_) => return false,
|
||||
};
|
||||
let name = match str::from_utf8((*name).as_slice()) {
|
||||
Ok(s) => s,
|
||||
Err(_) => return false,
|
||||
};
|
||||
let item = match &(*item).which {
|
||||
ExternHost::Func(e) => Extern::Func(e.borrow().clone()),
|
||||
ExternHost::Table(e) => Extern::Table(e.borrow().clone()),
|
||||
ExternHost::Global(e) => Extern::Global(e.borrow().clone()),
|
||||
ExternHost::Memory(e) => Extern::Memory(e.borrow().clone()),
|
||||
};
|
||||
linker.define(module, name, item).is_ok()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_linker_define_wasi(
|
||||
linker: *mut wasmtime_linker_t,
|
||||
instance: *const wasi_instance_t,
|
||||
) -> bool {
|
||||
let linker = &mut (*linker).linker;
|
||||
(*instance).add_to_linker(linker).is_ok()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_linker_define_instance(
|
||||
linker: *mut wasmtime_linker_t,
|
||||
name: *const wasm_name_t,
|
||||
instance: *const wasm_instance_t,
|
||||
) -> bool {
|
||||
let linker = &mut (*linker).linker;
|
||||
let name = match str::from_utf8((*name).as_slice()) {
|
||||
Ok(s) => s,
|
||||
Err(_) => return false,
|
||||
};
|
||||
linker
|
||||
.instance(name, &(*instance).instance.borrow())
|
||||
.is_ok()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_linker_instantiate(
|
||||
linker: *const wasmtime_linker_t,
|
||||
module: *const wasm_module_t,
|
||||
trap: *mut *mut wasm_trap_t,
|
||||
) -> *mut wasm_instance_t {
|
||||
let linker = &(*linker).linker;
|
||||
handle_instantiate(linker.instantiate(&(*module).module.borrow()), trap)
|
||||
}
|
||||
|
||||
pub type wasmtime_func_callback_t = unsafe extern "C" fn(
|
||||
caller: *const wasmtime_caller_t,
|
||||
args: *const wasm_val_t,
|
||||
results: *mut wasm_val_t,
|
||||
) -> *mut wasm_trap_t;
|
||||
|
||||
pub type wasmtime_func_callback_with_env_t = unsafe extern "C" fn(
|
||||
caller: *const wasmtime_caller_t,
|
||||
env: *mut std::ffi::c_void,
|
||||
args: *const wasm_val_t,
|
||||
results: *mut wasm_val_t,
|
||||
) -> *mut wasm_trap_t;
|
||||
|
||||
#[repr(C)]
|
||||
pub struct wasmtime_caller_t<'a> {
|
||||
pub inner: wasmtime::Caller<'a>,
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_func_new(
|
||||
store: *mut wasm_store_t,
|
||||
ty: *const wasm_functype_t,
|
||||
callback: wasmtime_func_callback_t,
|
||||
) -> *mut wasm_func_t {
|
||||
crate::create_function(store, ty, crate::Callback::Wasmtime(callback))
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_func_new_with_env(
|
||||
store: *mut wasm_store_t,
|
||||
ty: *const wasm_functype_t,
|
||||
callback: wasmtime_func_callback_with_env_t,
|
||||
env: *mut std::ffi::c_void,
|
||||
finalizer: Option<unsafe extern "C" fn(arg1: *mut std::ffi::c_void)>,
|
||||
) -> *mut wasm_func_t {
|
||||
crate::create_function_with_env(
|
||||
store,
|
||||
ty,
|
||||
crate::CallbackWithEnv::Wasmtime(callback),
|
||||
env,
|
||||
finalizer,
|
||||
)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wasmtime_caller_export_get(
|
||||
caller: *const wasmtime_caller_t,
|
||||
name: *const wasm_name_t,
|
||||
) -> *mut wasm_extern_t {
|
||||
let name = match str::from_utf8((*name).as_slice()) {
|
||||
Ok(s) => s,
|
||||
Err(_) => return std::ptr::null_mut(),
|
||||
};
|
||||
match (*caller).inner.get_export(name).map(|e| match e {
|
||||
Extern::Func(f) => ExternHost::Func(HostRef::new(f.clone())),
|
||||
Extern::Global(g) => ExternHost::Global(HostRef::new(g.clone())),
|
||||
Extern::Memory(m) => ExternHost::Memory(HostRef::new(m.clone())),
|
||||
Extern::Table(t) => ExternHost::Table(HostRef::new(t.clone())),
|
||||
}) {
|
||||
Some(export) => Box::into_raw(Box::new(wasm_extern_t { which: export })),
|
||||
None => std::ptr::null_mut(),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user