wasmerio / wai

A language binding generator for `wai` (a precursor to WebAssembly interface types)
Apache License 2.0
112 stars 13 forks source link

`wai_bindgen_wasmer::export!` error #44

Open xxshady opened 1 year ago

xxshady commented 1 year ago

изображение

log.wai

log: func(message: string)
xxshady commented 1 year ago

Inlined macro:

изображение

viniciusfonseca commented 1 year ago

+1. Managed to work around this issue refactoring the generated code from the macro to this:

let span = wai_bindgen_wasmer::tracing::span!(wai_bindgen_wasmer::tracing::Level::TRACE,"wai-bindgen abi",module = "imports",function = "set-header",);
      let _enter = span.enter();
      let _memory:wasmer::Memory = store.data().lazy.get().unwrap().memory.clone();
      let (env, store_mut) = store.data_and_store_mut(); // use store.data_and_store_mut()
      let _memory_view = _memory.view(&store_mut);
      let mut _bc = wai_bindgen_wasmer::BorrowChecker::new(unsafe {
        _memory_view.data_unchecked_mut()
      });
      let ptr0 = arg0;
      let len0 = arg1;
      let ptr1 = arg2;
      let len1 = arg3;
      let param0 = _bc.slice_str(ptr0,len0)?;
      let param1 = _bc.slice_str(ptr1,len1)?;
      wai_bindgen_wasmer::tracing::event!(wai_bindgen_wasmer::tracing::Level::TRACE,key = wai_bindgen_wasmer::tracing::field::debug(&param0),value = wai_bindgen_wasmer::tracing::field::debug(&param1),);
      let host = &mut env.data; // remove data_mut and use env returned from data_and_store_mut 
      let result = host.set_header(param0,param1,);
      let() = result;
      Ok(())

Changes are explained in the comments.

xxshady commented 1 year ago

@viniciusfonseca thank you, does it only happen for strings?