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.
This commit is contained in:
Jakub Konka
2019-11-18 17:39:40 +01:00
committed by Alex Crichton
parent a2479df329
commit 9182971697
2 changed files with 10 additions and 1 deletions

View File

@@ -66,7 +66,7 @@ fn generate_load(item: &syn::ItemTrait) -> syn::Result<TokenStream> {
let mut imports: Vec<Extern> = Vec::new(); let mut imports: Vec<Extern> = Vec::new();
if let Some(module_name) = data.find_wasi_module_name() { 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))?; .map_err(|e| format_err!("wasm instantiation error: {:?}", e))?;
for i in module.borrow().imports().iter() { for i in module.borrow().imports().iter() {
if i.module().as_str() != module_name { if i.module().as_str() != module_name {
@@ -112,6 +112,14 @@ fn generate_methods(item: &syn::ItemTrait) -> syn::Result<TokenStream> {
if let Some(t) = &method.sig.asyncness { if let Some(t) = &method.sig.asyncness {
bail!(t, "cannot be `async`"); 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(); let mut args = Vec::new();
for arg in method.sig.inputs.iter() { for arg in method.sig.inputs.iter() {

View File

@@ -7,6 +7,7 @@ pub mod __rt {
pub use wasmtime_api; pub use wasmtime_api;
pub use wasmtime_interface_types; pub use wasmtime_interface_types;
pub use wasmtime_jit; pub use wasmtime_jit;
pub use wasmtime_wasi;
use std::convert::{TryFrom, TryInto}; use std::convert::{TryFrom, TryInto};
use wasmtime_interface_types::Value; use wasmtime_interface_types::Value;