diff --git a/spec/src/fixtures.rs b/spec/src/fixtures.rs index c7539c3..ad663f1 100644 --- a/spec/src/fixtures.rs +++ b/spec/src/fixtures.rs @@ -16,6 +16,7 @@ macro_rules! run_test { run_test!("address", wasm_address); run_test!("address-offset-range.fail", wasm_address_offset_range_fail, fail); run_test!("binary", wasm_binary); +run_test!("call", wasm_call); run_test!("endianness", wasm_endianness); run_test!("f32", wasm_f32); run_test!("f32_bitwise", wasm_f32_bitwise); diff --git a/src/builder/global.rs b/src/builder/global.rs index 2cae4ba..9c666f3 100644 --- a/src/builder/global.rs +++ b/src/builder/global.rs @@ -56,7 +56,6 @@ impl GlobalBuilder where F: Invoke { } } - impl Invoke for GlobalBuilder { type Result = Self; fn invoke(self, the_type: elements::ValueType) -> Self { diff --git a/src/builder/mod.rs b/src/builder/mod.rs index 7d7437e..d590a75 100644 --- a/src/builder/mod.rs +++ b/src/builder/mod.rs @@ -9,6 +9,7 @@ mod memory; mod table; mod export; mod global; +mod data; pub use self::module::{module, from_module, ModuleBuilder}; pub use self::code::{signatures, signature, function}; diff --git a/src/builder/module.rs b/src/builder/module.rs index 8086a96..372acfa 100644 --- a/src/builder/module.rs +++ b/src/builder/module.rs @@ -2,7 +2,7 @@ use super::invoke::{Invoke, Identity}; use super::code::{self, SignaturesBuilder, FunctionBuilder}; use super::memory::{self, MemoryBuilder}; use super::table::{self, TableBuilder}; -use super::{import, export, global}; +use super::{import, export, global, data}; use elements; /// Module builder @@ -321,6 +321,17 @@ impl ModuleBuilder where F: Invoke { global::GlobalBuilder::with_callback(self) } + /// Add data segment to the builder + pub fn with_data_segment(mut self, segment: elements::DataSegment) -> Self { + self.module.data.entries_mut().push(segment); + self + } + + /// Data entry builder + pub fn data(self) -> data::DataSegmentBuilder { + data::DataSegmentBuilder::with_callback(self) + } + /// Build module (final step) pub fn build(self) -> F::Result { self.callback.invoke(self.module.into()) @@ -414,6 +425,16 @@ impl Invoke for ModuleBuilder } } +impl Invoke for ModuleBuilder + where F: Invoke +{ + type Result = Self; + + fn invoke(self, segment: elements::DataSegment) -> Self { + self.with_data_segment(segment) + } +} + /// Start new module builder pub fn module() -> ModuleBuilder { ModuleBuilder::new()