From ecd9f92354cddadb5dd57fba79cb46ede0106302 Mon Sep 17 00:00:00 2001 From: Valery Antopol Date: Fri, 20 Jan 2023 15:59:14 +0300 Subject: [PATCH] fix marine-js build --- Cargo.lock | 10 +--------- Cargo.toml | 1 - marine-js/Cargo.toml | 2 +- marine-js/src/engine.rs | 4 ++-- marine-js/src/faas/faas.rs | 14 +++++++------- marine-js/src/marine_js.rs | 1 + marine-js/src/module/marine_module.rs | 11 ++++++----- marine-js/src/module/memory.rs | 21 +++++++++++---------- marine-js/src/module/mod.rs | 9 +++++---- marine-js/src/module/wit_function.rs | 5 +++-- marine-js/src/module/wit_instance.rs | 10 ++++++---- marine-js/src/module/wit_store.rs | 5 +++++ 12 files changed, 48 insertions(+), 45 deletions(-) create mode 100644 marine-js/src/module/wit_store.rs diff --git a/Cargo.lock b/Cargo.lock index dc64ace8..d2f2d289 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1935,14 +1935,6 @@ dependencies = [ "libc", ] -[[package]] -name = "js-backend" -version = "0.1.0" -dependencies = [ - "marine-wasm-backend-traits", - "wasmer-interface-types-fl 0.25.0", -] - [[package]] name = "js-sys" version = "0.3.60" @@ -2246,7 +2238,7 @@ dependencies = [ "marine-rs-sdk", "marine-utils 0.4.0", "multimap", - "nom 5.1.2", + "nom 7.1.1", "once_cell", "paste", "semver 1.0.14", diff --git a/Cargo.toml b/Cargo.toml index 71d62479..a5c3b6bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,6 @@ members = [ "crates/it-interfaces", "crates/it-parser", "crates/it-json-serde", - "crates/js-backend", "crates/min-it-version", "crates/module-info-parser", "crates/module-interface", diff --git a/marine-js/Cargo.toml b/marine-js/Cargo.toml index d1c93b6a..bfb611d0 100644 --- a/marine-js/Cargo.toml +++ b/marine-js/Cargo.toml @@ -23,7 +23,7 @@ fluence-it-types = { workspace = true } it-lilo = { workspace = true } wasm-bindgen = "0.2" -nom = "5.1" +nom = "7.1" itertools = "0.10.3" multimap = "0.8.3" boolinator = "2.4.0" diff --git a/marine-js/src/engine.rs b/marine-js/src/engine.rs index 1535e347..4973a290 100644 --- a/marine-js/src/engine.rs +++ b/marine-js/src/engine.rs @@ -25,7 +25,7 @@ use crate::IRecordType; use serde::Serialize; use std::collections::HashMap; use std::collections::hash_map::Entry; -use std::rc::Rc; +use std::sync::Arc; /// Represent Marine module interface. #[derive(PartialEq, Eq, Debug, Clone, Serialize)] @@ -116,7 +116,7 @@ impl Marine { &self, module_name: S, record_id: u64, - ) -> Option<&Rc> { + ) -> Option<&Arc> { self.modules .get(module_name.as_ref()) .and_then(|module| module.export_record_type_by_id(record_id)) diff --git a/marine-js/src/faas/faas.rs b/marine-js/src/faas/faas.rs index d2875668..99ebe418 100644 --- a/marine-js/src/faas/faas.rs +++ b/marine-js/src/faas/faas.rs @@ -30,14 +30,14 @@ use marine_rs_sdk::CallParameters; use serde_json::Value as JValue; use std::cell::RefCell; use std::collections::HashMap; -use std::rc::Rc; +use std::sync::Arc; -type MFunctionSignature = (Rc>, Rc>); -type MModuleInterface = (Rc>, Rc>, Rc); +type MFunctionSignature = (Arc>, Arc>); +type MModuleInterface = (Arc>, Arc>, Arc); struct ModuleInterface { function_signatures: HashMap, - record_types: Rc, + record_types: Arc, } // TODO: remove and use mutex instead @@ -49,7 +49,7 @@ pub struct FluenceFaaS { marine: Marine, /// Parameters of call accessible by Wasm modules. - call_parameters: Rc>, + call_parameters: Arc>, /// Cached module interfaces by names. module_interfaces_cache: HashMap, @@ -60,7 +60,7 @@ impl FluenceFaaS { /// Creates FaaS with given modules. pub fn with_modules(modules: HashMap>) -> Result { let mut marine = Marine::new(); - let call_parameters = Rc::new(RefCell::new(CallParameters::default())); + let call_parameters = Arc::new(RefCell::new(CallParameters::default())); for (name, wit_section_bytes) in modules { marine.load_module(name, &wit_section_bytes)?; @@ -171,7 +171,7 @@ impl FluenceFaaS { let arg_types = arg_types.clone(); let output_types = output_types.clone(); - let record_types = Rc::new(module_interface.record_types.clone()); + let record_types = Arc::new(module_interface.record_types.clone()); let module_interface = ModuleInterface { function_signatures, diff --git a/marine-js/src/marine_js.rs b/marine-js/src/marine_js.rs index 30e0c1d9..fd5bddd4 100644 --- a/marine-js/src/marine_js.rs +++ b/marine-js/src/marine_js.rs @@ -332,3 +332,4 @@ impl JsWasmMemoryProxy { }) } } + diff --git a/marine-js/src/module/marine_module.rs b/marine-js/src/module/marine_module.rs index 43e5fcfc..610645e3 100644 --- a/marine-js/src/module/marine_module.rs +++ b/marine-js/src/module/marine_module.rs @@ -31,16 +31,17 @@ use std::collections::HashMap; use std::convert::TryInto; use std::sync::Arc; use std::rc::Rc; +use crate::module::wit_store::WITStore; const INITIALIZE_FUNC: &str = "_initialize"; -type ITInterpreter = Interpreter; +type ITInterpreter = Interpreter; #[derive(Clone)] pub(super) struct ITModuleFunc { interpreter: Arc, - pub(super) arguments: Rc>, - pub(super) output_types: Rc>, + pub(super) arguments: Arc>, + pub(super) output_types: Arc>, } #[derive(Clone)] @@ -55,7 +56,7 @@ impl Callable { let result = self .it_module_func .interpreter - .run(args, Arc::make_mut(&mut self.it_instance))? + .run(args, Arc::make_mut(&mut self.it_instance), &mut ())? .as_slice() .to_owned(); Ok(result) @@ -141,7 +142,7 @@ impl MModule { &self.export_record_types } - pub(crate) fn export_record_type_by_id(&self, record_type: u64) -> Option<&Rc> { + pub(crate) fn export_record_type_by_id(&self, record_type: u64) -> Option<&Arc> { self.export_record_types.get(&record_type) } diff --git a/marine-js/src/module/memory.rs b/marine-js/src/module/memory.rs index 4ba631d6..749a953e 100644 --- a/marine-js/src/module/memory.rs +++ b/marine-js/src/module/memory.rs @@ -20,6 +20,7 @@ use it_memory_traits::{MemoryAccessError, MemoryView, MemoryWritable, MemoryRead use wasmer_it::interpreter::wasm; use std::rc::Rc; +use crate::module::wit_store::WITStore; pub(super) struct WITMemoryView { memory: JsWasmMemoryProxy, @@ -33,35 +34,35 @@ impl WITMemoryView { } } -impl MemoryWritable for WITMemoryView { - fn write_byte(&self, offset: u32, value: u8) { +impl MemoryWritable for WITMemoryView { + fn write_byte(&self, _store: &mut (), offset: u32, value: u8) { self.memory.set(offset, value); } - fn write_bytes(&self, offset: u32, bytes: &[u8]) { + fn write_bytes(&self, _store: &mut (), offset: u32, bytes: &[u8]) { self.memory.set_range(offset, bytes); } } -impl MemoryReadable for WITMemoryView { - fn read_byte(&self, offset: u32) -> u8 { +impl MemoryReadable for WITMemoryView { + fn read_byte(&self, _store: &mut (), offset: u32) -> u8 { self.memory.get(offset) } - fn read_array(&self, offset: u32) -> [u8; COUNT] { + fn read_array(&self, _store: &mut (), offset: u32) -> [u8; COUNT] { let mut result = [0u8; COUNT]; let data = self.memory.get_range(offset, COUNT as u32); result.copy_from_slice(&data[..COUNT]); result } - fn read_vec(&self, offset: u32, size: u32) -> Vec { + fn read_vec(&self, _store: &mut (), offset: u32, size: u32) -> Vec { self.memory.get_range(offset, size) } } -impl MemoryView for WITMemoryView { - fn check_bounds(&self, offset: u32, size: u32) -> Result<(), MemoryAccessError> { +impl MemoryView for WITMemoryView { + fn check_bounds(&self, _store: &mut (), offset: u32, size: u32) -> Result<(), MemoryAccessError> { let memory_size = self.memory.len(); if offset + size >= memory_size { Err(MemoryAccessError::OutOfBounds { @@ -86,7 +87,7 @@ impl WITMemory { } } -impl wasm::structures::Memory for WITMemory { +impl wasm::structures::Memory for WITMemory { fn view(&self) -> WITMemoryView { WITMemoryView::new(self.module_name.clone()) } diff --git a/marine-js/src/module/mod.rs b/marine-js/src/module/mod.rs index a0fc39d8..95e29322 100644 --- a/marine-js/src/module/mod.rs +++ b/marine-js/src/module/mod.rs @@ -19,6 +19,7 @@ mod marine_module; mod memory; mod wit_function; mod wit_instance; +mod wit_store; pub mod type_converters; pub use wit_instance::MRecordTypes; @@ -31,14 +32,14 @@ pub use wasmer_it::to_interface_value; use serde::Serialize; use serde::Deserialize; -use std::rc::Rc; +use std::sync::Arc; /// Represent a function type inside Marine module. #[derive(PartialEq, Eq, Debug, Clone, Hash, Serialize, Deserialize)] pub struct MFunctionSignature { - pub name: Rc, - pub arguments: Rc>, - pub outputs: Rc>, + pub name: Arc, + pub arguments: Arc>, + pub outputs: Arc>, } pub(crate) use marine_module::MModule; diff --git a/marine-js/src/module/wit_function.rs b/marine-js/src/module/wit_function.rs index f3fc2c8b..b3021694 100644 --- a/marine-js/src/module/wit_function.rs +++ b/marine-js/src/module/wit_function.rs @@ -21,6 +21,7 @@ use crate::marine_js::DynFunc; use wasmer_it::interpreter::wasm; use std::rc::Rc; +use crate::module::wit_store::WITStore; #[derive(Clone)] enum WITFunctionInner { @@ -73,7 +74,7 @@ impl WITFunction { } } -impl wasm::structures::LocalImport for WITFunction { +impl wasm::structures::LocalImport for WITFunction { fn name(&self) -> &str { self.name.as_str() } @@ -94,7 +95,7 @@ impl wasm::structures::LocalImport for WITFunction { &self.outputs } - fn call(&self, arguments: &[IValue]) -> std::result::Result, ()> { + fn call(&self, _store: &mut (), arguments: &[IValue]) -> std::result::Result, ()> { use super::type_converters::{ival_to_wval, wval_to_ival}; match &self.inner { diff --git a/marine-js/src/module/wit_instance.rs b/marine-js/src/module/wit_instance.rs index f77ec153..dd8cd2ce 100644 --- a/marine-js/src/module/wit_instance.rs +++ b/marine-js/src/module/wit_instance.rs @@ -25,9 +25,11 @@ use wasmer_it::interpreter::wasm; use wasmer_it::interpreter::wasm::structures::{LocalImportIndex, Memory, TypedIndex}; use std::collections::HashMap; -use std::rc::Rc; +use crate::module::wit_store::WITStore; -pub type MRecordTypes = HashMap>; +use std::sync::Arc; + +pub type MRecordTypes = HashMap>; /// Contains all import and export functions that could be called from IT context by call-core. #[derive(Clone)] @@ -109,7 +111,7 @@ impl ITInstance { } } -impl wasm::structures::Instance for ITInstance { +impl wasm::structures::Instance for ITInstance { fn export(&self, _export_name: &str) -> Option<&ITExport> { // exports aren't used in this version of IT None @@ -137,7 +139,7 @@ impl wasm::structures::Instance Some(memory.view()) } - fn wit_record_by_id(&self, index: u64) -> Option<&Rc> { + fn wit_record_by_id(&self, index: u64) -> Option<&Arc> { self.record_types_by_id.get(&index) } } diff --git a/marine-js/src/module/wit_store.rs b/marine-js/src/module/wit_store.rs new file mode 100644 index 00000000..94b76320 --- /dev/null +++ b/marine-js/src/module/wit_store.rs @@ -0,0 +1,5 @@ +pub(crate) struct WITStore {} + +impl it_memory_traits::Store for WITStore { + type ActualStore<'c> = (); +} \ No newline at end of file