From 9182971697bc9fee51d5b5f4556d157466fbd5a0 Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Mon, 18 Nov 2019 17:39:40 +0100 Subject: [PATCH] Add missing import to wasmtime-rust macro (#589) This commit does two things: 1) it fixes `wasmtime_rust::wasmtime` proc macro by adding the missing import to the `__rt` module, and fixing the scoping inside the macro itself; and 2) it augments the `wasmtime_rust::wasmtime` proc macro with custom error messages in case the implementor forgets the `self` argument in the trait methods. --- crates/misc/rust/macro/src/lib.rs | 10 +++++++++- crates/misc/rust/src/lib.rs | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/crates/misc/rust/macro/src/lib.rs b/crates/misc/rust/macro/src/lib.rs index be1c1b4783..76e9c1d0bc 100644 --- a/crates/misc/rust/macro/src/lib.rs +++ b/crates/misc/rust/macro/src/lib.rs @@ -66,7 +66,7 @@ fn generate_load(item: &syn::ItemTrait) -> syn::Result { let mut imports: Vec = Vec::new(); if let Some(module_name) = data.find_wasi_module_name() { - let wasi_instance = wasmtime_wasi::create_wasi_instance(&store, &[], &[], &[]) + let wasi_instance = #root::wasmtime_wasi::create_wasi_instance(&store, &[], &[], &[]) .map_err(|e| format_err!("wasm instantiation error: {:?}", e))?; for i in module.borrow().imports().iter() { if i.module().as_str() != module_name { @@ -112,6 +112,14 @@ fn generate_methods(item: &syn::ItemTrait) -> syn::Result { if let Some(t) = &method.sig.asyncness { bail!(t, "cannot be `async`"); } + match &method.sig.inputs.first() { + Some(syn::FnArg::Receiver(_)) => {} + Some(t) => bail!(t, "first arugment needs to be \"self\""), + None => bail!( + method.sig, + "trait method requires at least one argument which needs to be \"self\"" + ), + } let mut args = Vec::new(); for arg in method.sig.inputs.iter() { diff --git a/crates/misc/rust/src/lib.rs b/crates/misc/rust/src/lib.rs index 4e3ce43098..027076958e 100644 --- a/crates/misc/rust/src/lib.rs +++ b/crates/misc/rust/src/lib.rs @@ -7,6 +7,7 @@ pub mod __rt { pub use wasmtime_api; pub use wasmtime_interface_types; pub use wasmtime_jit; + pub use wasmtime_wasi; use std::convert::{TryFrom, TryInto}; use wasmtime_interface_types::Value;