make ResourceLimiter operate on Store data; add hooks for entering and exiting native code (#2952)
* wasmtime_runtime: move ResourceLimiter defaults into this crate In preparation of changing wasmtime::ResourceLimiter to be a re-export of this definition, because translating between two traits was causing problems elsewhere. * wasmtime: make ResourceLimiter a re-export of wasmtime_runtime::ResourceLimiter * refactor Store internals to support ResourceLimiter as part of store's data * add hooks for entering and exiting native code to Store * wasmtime-wast, fuzz: changes to adapt ResourceLimiter API * fix tests * wrap calls into wasm with entering/exiting exit hooks as well * the most trivial test found a bug, lets write some more * store: mark some methods as #[inline] on Store, StoreInner, StoreInnerMost Co-authored-By: Alex Crichton <alex@alexcrichton.com> * improve tests for the entering/exiting native hooks Co-authored-by: Alex Crichton <alex@alexcrichton.com>
This commit is contained in:
@@ -3,7 +3,7 @@ use wasmtime::*;
|
||||
|
||||
/// Return an instance implementing the "spectest" interface used in the
|
||||
/// spec testsuite.
|
||||
pub fn link_spectest(linker: &mut Linker<()>, store: &mut Store<()>) -> Result<()> {
|
||||
pub fn link_spectest<T>(linker: &mut Linker<T>, store: &mut Store<T>) -> Result<()> {
|
||||
linker.func_wrap("spectest", "print", || {})?;
|
||||
linker.func_wrap("spectest", "print_i32", |val: i32| println!("{}: i32", val))?;
|
||||
linker.func_wrap("spectest", "print_i64", |val: i64| println!("{}: i64", val))?;
|
||||
|
||||
@@ -32,12 +32,12 @@ fn runtime_value(v: &wast::Expression<'_>) -> Result<Val> {
|
||||
|
||||
/// The wast test script language allows modules to be defined and actions
|
||||
/// to be performed on them.
|
||||
pub struct WastContext {
|
||||
pub struct WastContext<T> {
|
||||
/// Wast files have a concept of a "current" module, which is the most
|
||||
/// recently defined.
|
||||
current: Option<Instance>,
|
||||
linker: Linker<()>,
|
||||
store: Store<()>,
|
||||
linker: Linker<T>,
|
||||
store: Store<T>,
|
||||
}
|
||||
|
||||
enum Outcome<T = Vec<Val>> {
|
||||
@@ -54,9 +54,9 @@ impl<T> Outcome<T> {
|
||||
}
|
||||
}
|
||||
|
||||
impl WastContext {
|
||||
impl<T> WastContext<T> {
|
||||
/// Construct a new instance of `WastContext`.
|
||||
pub fn new(store: Store<()>) -> Self {
|
||||
pub fn new(store: Store<T>) -> Self {
|
||||
// Spec tests will redefine the same module/name sometimes, so we need
|
||||
// to allow shadowing in the linker which picks the most recent
|
||||
// definition as what to link when linking.
|
||||
|
||||
Reference in New Issue
Block a user