From 5f98122fbc90600bb5c4be435261aab0cedcd298 Mon Sep 17 00:00:00 2001 From: NikVolf Date: Tue, 9 May 2017 17:38:51 +0300 Subject: [PATCH] global builder to module --- src/builder/module.rs | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/builder/module.rs b/src/builder/module.rs index cccb521..4557d56 100644 --- a/src/builder/module.rs +++ b/src/builder/module.rs @@ -1,6 +1,6 @@ use super::invoke::{Invoke, Identity}; use super::code::{self, SignaturesBuilder, FunctionBuilder}; -use super::{import, export}; +use super::{import, export, global}; use elements; /// Module builder @@ -248,12 +248,18 @@ impl ModuleBuilder where F: Invoke { self } - /// With inserted import entry + /// With inserted export entry pub fn with_export(mut self, entry: elements::ExportEntry) -> Self { self.module.export.entries_mut().push(entry); self } + /// With inserted global entry + pub fn with_global(mut self, entry: elements::GlobalEntry) -> Self { + self.module.global.entries_mut().push(entry); + self + } + /// Import entry builder pub fn import(self) -> import::ImportBuilder { import::ImportBuilder::with_callback(self) @@ -264,6 +270,11 @@ impl ModuleBuilder where F: Invoke { export::ExportBuilder::with_callback(self) } + /// Glboal entry builder + pub fn global(self) -> global::GlobalBuilder { + global::GlobalBuilder::with_callback(self) + } + /// Build module (final step) pub fn build(self) -> F::Result { self.callback.invoke(self.module.into()) @@ -323,6 +334,16 @@ impl Invoke for ModuleBuilder } } +impl Invoke for ModuleBuilder + where F: Invoke +{ + type Result = Self; + + fn invoke(self, entry: elements::GlobalEntry) -> Self::Result { + self.with_global(entry) + } +} + /// Start new module builder pub fn module() -> ModuleBuilder { ModuleBuilder::new() @@ -366,4 +387,13 @@ mod tests { assert_eq!(module.export_section().expect("export section to exist").entries().len(), 1); } -} + + #[test] + fn global() { + let module = module() + .global().value_type().i64().mutable().init_expr(::elements::Opcode::I64Const(5)).build() + .build(); + + assert_eq!(module.global_section().expect("global section to exist").entries().len(), 1); + } + }