Support function names in IT (#41)

This commit is contained in:
vms
2020-11-07 00:08:09 +03:00
committed by GitHub
parent ddd3448af7
commit 2ef43ee778
16 changed files with 99 additions and 74 deletions

87
Cargo.lock generated
View File

@ -189,9 +189,9 @@ dependencies = [
[[package]]
name = "cc"
version = "1.0.61"
version = "1.0.62"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed67cbde08356238e75fc4656be4749481eeffb09e19f320a25237d5221c985d"
checksum = "f1770ced377336a88a67c473594ccc14eca6f4559217c34f64aac8f83d641b40"
[[package]]
name = "cfg-if"
@ -262,9 +262,9 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
[[package]]
name = "core-foundation"
version = "0.7.0"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171"
checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62"
dependencies = [
"core-foundation-sys",
"libc",
@ -272,9 +272,9 @@ dependencies = [
[[package]]
name = "core-foundation-sys"
version = "0.7.0"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac"
checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b"
[[package]]
name = "cranelift-bforest"
@ -732,20 +732,20 @@ dependencies = [
[[package]]
name = "fluence"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12efe44782ef6842b824dd281f79f808597a2c280d1facc06bb62b9cf8fbc2ef"
source = "git+https://github.com/fluencelabs/rust-sdk#a6c587db0b6f22c3d3af81f10b187f148f8e9d30"
dependencies = [
"fluence-sdk-macro 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"fluence-sdk-main 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"fluence-sdk-macro 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)",
"fluence-sdk-main 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)",
]
[[package]]
name = "fluence"
version = "0.2.8"
source = "git+https://github.com/fluencelabs/rust-sdk#a6c587db0b6f22c3d3af81f10b187f148f8e9d30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12efe44782ef6842b824dd281f79f808597a2c280d1facc06bb62b9cf8fbc2ef"
dependencies = [
"fluence-sdk-macro 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)",
"fluence-sdk-main 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)",
"fluence-sdk-macro 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"fluence-sdk-main 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -786,6 +786,14 @@ dependencies = [
"wasmer-wasi-fl",
]
[[package]]
name = "fluence-sdk-macro"
version = "0.2.8"
source = "git+https://github.com/fluencelabs/rust-sdk#a6c587db0b6f22c3d3af81f10b187f148f8e9d30"
dependencies = [
"fluence-sdk-wit 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)",
]
[[package]]
name = "fluence-sdk-macro"
version = "0.2.8"
@ -796,11 +804,13 @@ dependencies = [
]
[[package]]
name = "fluence-sdk-macro"
name = "fluence-sdk-main"
version = "0.2.8"
source = "git+https://github.com/fluencelabs/rust-sdk#a6c587db0b6f22c3d3af81f10b187f148f8e9d30"
dependencies = [
"fluence-sdk-wit 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)",
"fluence-sdk-macro 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)",
"log",
"serde",
]
[[package]]
@ -814,21 +824,10 @@ dependencies = [
"serde",
]
[[package]]
name = "fluence-sdk-main"
version = "0.2.8"
source = "git+https://github.com/fluencelabs/rust-sdk#a6c587db0b6f22c3d3af81f10b187f148f8e9d30"
dependencies = [
"fluence-sdk-macro 0.2.8 (git+https://github.com/fluencelabs/rust-sdk)",
"log",
"serde",
]
[[package]]
name = "fluence-sdk-wit"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "560baf91197ded38a99a5c94ff366a3dd971ebf33f5d987ecce31d3dedf86d17"
source = "git+https://github.com/fluencelabs/rust-sdk#a6c587db0b6f22c3d3af81f10b187f148f8e9d30"
dependencies = [
"proc-macro2",
"quote",
@ -841,7 +840,8 @@ dependencies = [
[[package]]
name = "fluence-sdk-wit"
version = "0.2.8"
source = "git+https://github.com/fluencelabs/rust-sdk#a6c587db0b6f22c3d3af81f10b187f148f8e9d30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "560baf91197ded38a99a5c94ff366a3dd971ebf33f5d987ecce31d3dedf86d17"
dependencies = [
"proc-macro2",
"quote",
@ -872,6 +872,16 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
[[package]]
name = "form_urlencoded"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00"
dependencies = [
"matches",
"percent-encoding",
]
[[package]]
name = "frepl"
version = "0.1.14"
@ -1452,9 +1462,9 @@ dependencies = [
[[package]]
name = "native-tls"
version = "0.2.4"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d"
checksum = "1a1cda389c26d6b88f3d2dc38aa1b750fe87d298cc5d795ec9e975f402f00372"
dependencies = [
"lazy_static",
"libc",
@ -2033,9 +2043,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "security-framework"
version = "0.4.4"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64808902d7d99f78eaddd2b4e2509713babc3dc3c85ad6f4c447680f3c01e535"
checksum = "c1759c2e3c8580017a484a7ac56d3abc5a6c1feadf88db2f3633f12ae4268c69"
dependencies = [
"bitflags",
"core-foundation",
@ -2046,9 +2056,9 @@ dependencies = [
[[package]]
name = "security-framework-sys"
version = "0.4.3"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405"
checksum = "f99b9d5e26d2a71633cc4f2ebae7cc9f874044e0c351a27e17892d76dce5678b"
dependencies = [
"core-foundation-sys",
"libc",
@ -2549,10 +2559,11 @@ checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
[[package]]
name = "url"
version = "2.1.1"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb"
checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e"
dependencies = [
"form_urlencoded",
"idna",
"matches",
"percent-encoding",
@ -2797,9 +2808,9 @@ dependencies = [
[[package]]
name = "wasmer-interface-types-fl"
version = "0.17.12"
version = "0.17.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e916b92f2d315ea27d5ff1d3d6410fe852c51d21bb91a8d1ba7adbf701de7f53"
checksum = "88cf928132b7cc391adc52c47ae48aaebff01a85649b815b3e0142f8111c5529"
dependencies = [
"log",
"nom",

View File

@ -15,7 +15,7 @@ fce-wit-parser = { path = "../wit-parser", version = "0.1.9"}
fluence-sdk-wit = "0.2.8"
walrus = "0.17.0"
wasmer-wit = { package = "wasmer-interface-types-fl", version = "=0.17.12" }
wasmer-wit = { package = "wasmer-interface-types-fl", version = "=0.17.15" }
once_cell = "1.4.0"
serde = { version = "1.0.110", features = ["derive"] }
serde_json = "1.0.56"

View File

@ -11,5 +11,5 @@ name = "fce_wit_interfaces"
path = "src/lib.rs"
[dependencies]
wasmer-wit = { package = "wasmer-interface-types-fl", version = "=0.17.12" }
wasmer-wit = { package = "wasmer-interface-types-fl", version = "=0.17.15" }
multimap = "0.8.1"

View File

@ -16,4 +16,4 @@ fce-wit-interfaces = { path = "../wit-interfaces", version = "0.1.7" }
anyhow = "1.0.31"
walrus = "0.17.0"
wasmer-core = { package = "wasmer-runtime-core-fl", version = "0.17.0"}
wasmer-wit = { package = "wasmer-interface-types-fl", version = "=0.17.12" }
wasmer-wit = { package = "wasmer-interface-types-fl", version = "=0.17.15" }

View File

@ -18,7 +18,7 @@ fce-utils = { path = "../crates/utils", version = "0.1.0" }
wasmer-runtime = { package = "wasmer-runtime-fl", version = "0.17.0" }
# dynamicfunc-fat-closures allows using state inside DynamicFunc
wasmer-core = { package = "wasmer-runtime-core-fl", version = "0.17.0", features = ["dynamicfunc-fat-closures"] }
wasmer-wit = { package = "wasmer-interface-types-fl", version = "=0.17.12" }
wasmer-wit = { package = "wasmer-interface-types-fl", version = "=0.17.15" }
wasmer-wasi = { package = "wasmer-wasi-fl", version = "0.17.0" }
multimap = "0.8.1"

View File

@ -24,6 +24,7 @@ use wasmer_wit::interpreter::wasm;
// but explicit Exports is still required by wasmer-interface-types::Interpreter.
#[derive(Clone)]
pub(crate) struct WITExport {
name: String,
arguments: Vec<IFunctionArg>,
outputs: Vec<IType>,
function: fn(arguments: &[IValue]) -> Result<Vec<IValue>, ()>,
@ -33,6 +34,7 @@ impl WITExport {
#[allow(unused)]
pub(crate) fn new() -> Self {
Self {
name: String::new(),
arguments: vec![],
outputs: vec![],
function: |_| -> _ { Ok(vec![]) },
@ -41,6 +43,10 @@ impl WITExport {
}
impl wasm::structures::Export for WITExport {
fn name(&self) -> &str {
self.name.as_str()
}
fn inputs_cardinality(&self) -> usize {
self.arguments.len()
}

View File

@ -29,26 +29,25 @@ use std::rc::Rc;
enum WITFunctionInner {
Export {
func: Rc<DynFunc<'static>>,
arguments: Rc<Vec<IFunctionArg>>,
outputs: Rc<Vec<IType>>,
},
Import {
// TODO: use dyn Callable here
callable: Rc<Callable>,
arguments: Rc<Vec<IFunctionArg>>,
outputs: Rc<Vec<IType>>,
},
}
/// Represents all import and export functions that could be called from WIT context by call-core.
#[derive(Clone)]
pub(super) struct WITFunction {
name: String,
arguments: Rc<Vec<IFunctionArg>>,
outputs: Rc<Vec<IType>>,
inner: WITFunctionInner,
}
impl WITFunction {
/// Creates functions from a "usual" (not WIT) module export.
pub(super) fn from_export(dyn_func: DynFunc<'static>) -> Result<Self> {
pub(super) fn from_export(dyn_func: DynFunc<'static>, name: String) -> Result<Self> {
use super::type_converters::wtype_to_itype;
let signature = dyn_func.signature();
@ -69,11 +68,17 @@ impl WITFunction {
let inner = WITFunctionInner::Export {
func: Rc::new(dyn_func),
arguments: Rc::new(arguments),
outputs: Rc::new(outputs),
};
Ok(Self { inner })
let arguments = Rc::new(arguments);
let outputs = Rc::new(outputs);
Ok(Self {
name,
arguments,
outputs,
inner,
})
}
/// Creates function from a module import.
@ -85,43 +90,38 @@ impl WITFunction {
) -> Result<Self> {
let callable = wit_module.get_callable(function_name)?;
let inner = WITFunctionInner::Import {
callable,
let inner = WITFunctionInner::Import { callable };
let name = function_name.to_string();
Ok(Self {
name,
arguments,
outputs,
};
Ok(Self { inner })
inner,
})
}
}
impl wasm::structures::LocalImport for WITFunction {
fn inputs_cardinality(&self) -> usize {
match &self.inner {
WITFunctionInner::Export { arguments, .. } => arguments.len(),
WITFunctionInner::Import { arguments, .. } => arguments.len(),
fn name(&self) -> &str {
self.name.as_str()
}
fn inputs_cardinality(&self) -> usize {
self.arguments.len()
}
fn outputs_cardinality(&self) -> usize {
match &self.inner {
WITFunctionInner::Export { outputs, .. } => outputs.len(),
WITFunctionInner::Import { outputs, .. } => outputs.len(),
}
self.outputs.len()
}
fn arguments(&self) -> &[IFunctionArg] {
match &self.inner {
WITFunctionInner::Export { arguments, .. } => arguments,
WITFunctionInner::Import { arguments, .. } => arguments,
}
&self.arguments
}
fn outputs(&self) -> &[IType] {
match &self.inner {
WITFunctionInner::Export { outputs, .. } => outputs,
WITFunctionInner::Import { outputs, .. } => outputs,
}
&self.outputs
}
fn call(&self, arguments: &[IValue]) -> std::result::Result<Vec<IValue>, ()> {

View File

@ -82,7 +82,10 @@ impl WITInstance {
// here it is safe because dyn func is never lives WITInstance
let export_func =
std::mem::transmute::<DynFunc<'_>, DynFunc<'static>>(export_func);
Ok((export_id, WITFunction::from_export(export_func)?))
Ok((
export_id,
WITFunction::from_export(export_func, export.name.to_string())?,
))
}
})
.collect()

BIN
examples/records/artifacts/records_effector.wasm Normal file → Executable file

Binary file not shown.

BIN
examples/records/artifacts/records_pure.wasm Normal file → Executable file

Binary file not shown.

View File

@ -15,7 +15,7 @@ wasmer-runtime = { package = "wasmer-runtime-fl", version = "0.17.0" }
# dynamicfunc-fat-closures allows using state inside DynamicFunc
wasmer-core = { package = "wasmer-runtime-core-fl", version = "0.17.0", features = ["dynamicfunc-fat-closures"] }
wasmer-wasi = { package = "wasmer-wasi-fl", version = "0.17.0" }
wasmer-wit = { package = "wasmer-interface-types-fl", version = "=0.17.12" }
wasmer-wit = { package = "wasmer-interface-types-fl", version = "=0.17.15" }
toml = "0.5.6"
serde = { version = "1.0.111", features = ["derive"] }

View File

@ -47,7 +47,12 @@ const HISTORY_FILE_PATH: &str = ".repl_history";
pub(crate) type Result<T> = std::result::Result<T, anyhow::Error>;
fn main() -> Result<()> {
env_logger::init();
use std::io::Write;
env_logger::builder()
// this filter is only for host logs (mainly from the IT side)
.format(|buf, record| writeln!(buf, "[host] {}", record.args()))
.init();
let (args, _) = rustop::opts! {
synopsis "Fluence Application service REPL";