Implement RFC 11: Redesigning Wasmtime's APIs (#2897)
Implement Wasmtime's new API as designed by RFC 11. This is quite a large commit which has had lots of discussion externally, so for more information it's best to read the RFC thread and the PR thread.
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
use crate::vmcontext::{
|
||||
VMCallerCheckedAnyfunc, VMContext, VMGlobalDefinition, VMMemoryDefinition, VMTableDefinition,
|
||||
};
|
||||
use crate::RuntimeInstance;
|
||||
use std::any::Any;
|
||||
use std::ptr::NonNull;
|
||||
use wasmtime_environ::wasm::Global;
|
||||
use wasmtime_environ::{MemoryPlan, TablePlan};
|
||||
@@ -20,16 +18,10 @@ pub enum Export {
|
||||
|
||||
/// A global export value.
|
||||
Global(ExportGlobal),
|
||||
|
||||
/// An instance
|
||||
Instance(RuntimeInstance),
|
||||
|
||||
/// A module
|
||||
Module(Box<dyn Any>),
|
||||
}
|
||||
|
||||
/// A function export value.
|
||||
#[derive(Debug, Clone)]
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct ExportFunction {
|
||||
/// The `VMCallerCheckedAnyfunc` for this exported function.
|
||||
///
|
||||
@@ -38,6 +30,12 @@ pub struct ExportFunction {
|
||||
pub anyfunc: NonNull<VMCallerCheckedAnyfunc>,
|
||||
}
|
||||
|
||||
// It's part of the contract of using `ExportFunction` that synchronization
|
||||
// properties are upheld, so declare that despite the raw pointers inside this
|
||||
// is send/sync.
|
||||
unsafe impl Send for ExportFunction {}
|
||||
unsafe impl Sync for ExportFunction {}
|
||||
|
||||
impl From<ExportFunction> for Export {
|
||||
fn from(func: ExportFunction) -> Export {
|
||||
Export::Function(func)
|
||||
@@ -55,6 +53,10 @@ pub struct ExportTable {
|
||||
pub table: TablePlan,
|
||||
}
|
||||
|
||||
// See docs on send/sync for `ExportFunction` above.
|
||||
unsafe impl Send for ExportTable {}
|
||||
unsafe impl Sync for ExportTable {}
|
||||
|
||||
impl From<ExportTable> for Export {
|
||||
fn from(func: ExportTable) -> Export {
|
||||
Export::Table(func)
|
||||
@@ -72,6 +74,10 @@ pub struct ExportMemory {
|
||||
pub memory: MemoryPlan,
|
||||
}
|
||||
|
||||
// See docs on send/sync for `ExportFunction` above.
|
||||
unsafe impl Send for ExportMemory {}
|
||||
unsafe impl Sync for ExportMemory {}
|
||||
|
||||
impl From<ExportMemory> for Export {
|
||||
fn from(func: ExportMemory) -> Export {
|
||||
Export::Memory(func)
|
||||
@@ -89,6 +95,10 @@ pub struct ExportGlobal {
|
||||
pub global: Global,
|
||||
}
|
||||
|
||||
// See docs on send/sync for `ExportFunction` above.
|
||||
unsafe impl Send for ExportGlobal {}
|
||||
unsafe impl Sync for ExportGlobal {}
|
||||
|
||||
impl From<ExportGlobal> for Export {
|
||||
fn from(func: ExportGlobal) -> Export {
|
||||
Export::Global(func)
|
||||
|
||||
Reference in New Issue
Block a user