Allow specifying a shared memory import

This commit is contained in:
Alex Crichton 2018-10-04 14:56:20 -07:00
parent a411a15b0c
commit a056b41b56
3 changed files with 9 additions and 4 deletions

View File

@ -95,7 +95,7 @@ impl<F> ImportExternalBuilder<F> where F: Invoke<elements::External> {
/// Memory mapping with specified limits /// Memory mapping with specified limits
pub fn memory(mut self, min: u32, max: Option<u32>) -> F::Result { pub fn memory(mut self, min: u32, max: Option<u32>) -> F::Result {
self.binding = elements::External::Memory(elements::MemoryType::new(min, max)); self.binding = elements::External::Memory(elements::MemoryType::new(min, max, false));
self.callback.invoke(self.binding) self.callback.invoke(self.binding)
} }

View File

@ -206,7 +206,7 @@ impl<F> ModuleBuilder<F> where F: Invoke<elements::Module> {
/// Push linear memory region /// Push linear memory region
pub fn push_memory(&mut self, mut memory: memory::MemoryDefinition) -> u32 { pub fn push_memory(&mut self, mut memory: memory::MemoryDefinition) -> u32 {
let entries = self.module.memory.entries_mut(); let entries = self.module.memory.entries_mut();
entries.push(elements::MemoryType::new(memory.min, memory.max)); entries.push(elements::MemoryType::new(memory.min, memory.max, false));
let memory_index = (entries.len() - 1) as u32; let memory_index = (entries.len() - 1) as u32;
for data in memory.data.drain(..) { for data in memory.data.drain(..) {
self.module.data.entries_mut() self.module.data.entries_mut()

View File

@ -162,9 +162,14 @@ pub struct MemoryType(ResizableLimits);
impl MemoryType { impl MemoryType {
/// New memory definition /// New memory definition
pub fn new(min: u32, max: Option<u32>) -> Self { pub fn new(min: u32, max: Option<u32>, shared: bool) -> Self {
MemoryType(ResizableLimits::new(min, max)) let mut r = ResizableLimits::new(min, max);
if shared {
r.flags |= 0x2;
} }
MemoryType(r)
}
/// Limits of the memory entry. /// Limits of the memory entry.
pub fn limits(&self) -> &ResizableLimits { pub fn limits(&self) -> &ResizableLimits {
&self.0 &self.0