move ctx into wiggle-tests crate

This commit is contained in:
Pat Hickey
2020-02-21 13:58:28 -08:00
parent 2feab2ee2b
commit f77000ad8f
4 changed files with 37 additions and 42 deletions

View File

@@ -90,3 +90,38 @@ mod test {
assert_eq!(h.buffer.as_mut_ptr() as usize % 4096, 0); assert_eq!(h.buffer.as_mut_ptr() as usize % 4096, 0);
} }
} }
use wiggle_runtime::GuestError;
pub struct WasiCtx {
pub guest_errors: Vec<GuestError>,
}
impl WasiCtx {
pub fn new() -> Self {
Self {
guest_errors: vec![],
}
}
}
// Errno is used as a first return value in the functions above, therefore
// it must implement GuestErrorType with type Context = WasiCtx.
// The context type should let you do logging or debugging or whatever you need
// with these errors. We just push them to vecs.
#[macro_export]
macro_rules! impl_errno {
( $errno:ty ) => {
impl wiggle_runtime::GuestErrorType for $errno {
type Context = WasiCtx;
fn success() -> $errno {
<$errno>::Ok
}
fn from_error(e: GuestError, ctx: &mut WasiCtx) -> $errno {
eprintln!("GUEST ERROR: {:?}", e);
ctx.guest_errors.push(e);
types::Errno::InvalidArg
}
}
};
}

View File

@@ -1,34 +0,0 @@
use wiggle_runtime::GuestError;
pub struct WasiCtx {
pub guest_errors: Vec<GuestError>,
}
impl WasiCtx {
pub fn new() -> Self {
Self {
guest_errors: vec![],
}
}
}
// Errno is used as a first return value in the functions above, therefore
// it must implement GuestErrorType with type Context = WasiCtx.
// The context type should let you do logging or debugging or whatever you need
// with these errors. We just push them to vecs.
#[macro_export]
macro_rules! impl_errno {
( $errno:ty ) => {
impl wiggle_runtime::GuestErrorType for $errno {
type Context = WasiCtx;
fn success() -> $errno {
<$errno>::Ok
}
fn from_error(e: GuestError, ctx: &mut WasiCtx) -> $errno {
eprintln!("GUEST ERROR: {:?}", e);
ctx.guest_errors.push(e);
types::Errno::InvalidArg
}
}
};
}

View File

@@ -3,16 +3,13 @@ use std::convert::TryFrom;
use wiggle_runtime::{ use wiggle_runtime::{
GuestArray, GuestError, GuestPtr, GuestPtrMut, GuestRef, GuestRefMut, GuestString, GuestArray, GuestError, GuestPtr, GuestPtrMut, GuestRef, GuestRefMut, GuestString,
}; };
use wiggle_test::{HostMemory, MemArea}; use wiggle_test::{impl_errno, HostMemory, MemArea, WasiCtx};
wiggle_generate::from_witx!({ wiggle_generate::from_witx!({
witx: ["tests/test.witx"], witx: ["tests/test.witx"],
ctx: WasiCtx, ctx: WasiCtx,
}); });
mod ctx;
use ctx::WasiCtx;
impl_errno!(types::Errno); impl_errno!(types::Errno);
impl foo::Foo for WasiCtx { impl foo::Foo for WasiCtx {

View File

@@ -1,9 +1,6 @@
use proptest::prelude::*; use proptest::prelude::*;
use wiggle_runtime::GuestError; use wiggle_runtime::GuestError;
use wiggle_test::HostMemory; use wiggle_test::{impl_errno, HostMemory, WasiCtx};
mod ctx;
use ctx::WasiCtx;
wiggle_generate::from_witx!({ wiggle_generate::from_witx!({
witx: ["tests/trivial.witx"], witx: ["tests/trivial.witx"],