From a1ea2d689f8c240ed34c413fbe6c397988809c37 Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Tue, 25 Jun 2019 12:51:57 +0200 Subject: [PATCH] Implement Clone for ModuleInstance ...because of the contained Rc it's otherwise just a shallow clone, not a deep. --- src/module.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/module.rs b/src/module.rs index 8258111..19939ab 100644 --- a/src/module.rs +++ b/src/module.rs @@ -169,6 +169,31 @@ pub struct ModuleInstance { exports: RefCell>, } +impl Clone for ModuleInstance { + fn clone(&self) -> Self { + let signatures = self.signatures.borrow(); + let vec = &(*signatures); + let signatures = vec + .iter() + .map(|inner_rc| { + let signature = &**inner_rc; + let signature_clone = signature.clone(); + Rc::new(signature_clone) + }) + .collect(); + let signatures = RefCell::new(signatures); + + ModuleInstance { + signatures, + tables: self.tables.clone(), + funcs: self.funcs.clone(), + memories: self.memories.clone(), + globals: self.globals.clone(), + exports: self.exports.clone(), + } + } +} + impl ModuleInstance { fn default() -> Self { ModuleInstance {