mirror of
https://github.com/fluencelabs/wasmer
synced 2025-04-22 00:42:13 +00:00
Change order of Map type params and globalinit to Initializer
This commit is contained in:
parent
696bc9a0a9
commit
a5b4cc21f6
@ -4,7 +4,7 @@ use crate::runtime::{
|
|||||||
module::{ImportName, Module},
|
module::{ImportName, Module},
|
||||||
sig_registry::SigRegistry,
|
sig_registry::SigRegistry,
|
||||||
table::{TableBacking, TableElements},
|
table::{TableBacking, TableElements},
|
||||||
types::{GlobalInit, MapIndex, Val},
|
types::{Initializer, MapIndex, Val},
|
||||||
vm,
|
vm,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -149,11 +149,11 @@ impl LocalBacking {
|
|||||||
) -> Box<[vm::LocalGlobal]> {
|
) -> Box<[vm::LocalGlobal]> {
|
||||||
for (to, (_, from)) in globals.iter_mut().zip(module.globals.into_iter()) {
|
for (to, (_, from)) in globals.iter_mut().zip(module.globals.into_iter()) {
|
||||||
to.data = match from.init {
|
to.data = match from.init {
|
||||||
GlobalInit::Val(Val::I32(x)) => x as u64,
|
Initializer::Const(Val::I32(x)) => x as u64,
|
||||||
GlobalInit::Val(Val::I64(x)) => x as u64,
|
Initializer::Const(Val::I64(x)) => x as u64,
|
||||||
GlobalInit::Val(Val::F32(x)) => x as u64,
|
Initializer::Const(Val::F32(x)) => x as u64,
|
||||||
GlobalInit::Val(Val::F64(x)) => x,
|
Initializer::Const(Val::F64(x)) => x,
|
||||||
GlobalInit::GetGlobal(index) => (imports.globals[index.index()].global).data,
|
Initializer::GetGlobal(index) => (imports.globals[index.index()].global).data,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,14 +11,14 @@ use std::ptr::NonNull;
|
|||||||
/// This is used to instantiate a new webassembly module.
|
/// This is used to instantiate a new webassembly module.
|
||||||
pub struct Module {
|
pub struct Module {
|
||||||
pub function_resolver: Box<dyn Fn(&Module, FuncIndex) -> Option<NonNull<vm::Func>>>,
|
pub function_resolver: Box<dyn Fn(&Module, FuncIndex) -> Option<NonNull<vm::Func>>>,
|
||||||
pub memories: Map<Memory, MemoryIndex>,
|
pub memories: Map<MemoryIndex, Memory>,
|
||||||
pub globals: Map<Global, GlobalIndex>,
|
pub globals: Map<GlobalIndex, Global>,
|
||||||
pub tables: Map<Table, TableIndex>,
|
pub tables: Map<TableIndex, Table>,
|
||||||
|
|
||||||
pub imported_functions: Map<ImportName, FuncIndex>,
|
pub imported_functions: Map<FuncIndex, ImportName>,
|
||||||
pub imported_memories: Map<(ImportName, Memory), MemoryIndex>,
|
pub imported_memories: Map<MemoryIndex, (ImportName, Memory)>,
|
||||||
pub imported_tables: Map<(ImportName, Table), TableIndex>,
|
pub imported_tables: Map<TableIndex, (ImportName, Table)>,
|
||||||
pub imported_globals: Map<(ImportName, GlobalDesc), GlobalIndex>,
|
pub imported_globals: Map<GlobalIndex, (ImportName, GlobalDesc)>,
|
||||||
|
|
||||||
pub exports: HashMap<String, Export>,
|
pub exports: HashMap<String, Export>,
|
||||||
|
|
||||||
@ -26,8 +26,8 @@ pub struct Module {
|
|||||||
pub table_initializers: Vec<TableInitializer>,
|
pub table_initializers: Vec<TableInitializer>,
|
||||||
pub start_func: Option<FuncIndex>,
|
pub start_func: Option<FuncIndex>,
|
||||||
|
|
||||||
pub signature_assoc: Map<SigIndex, FuncIndex>,
|
pub signature_assoc: Map<FuncIndex, SigIndex>,
|
||||||
pub signatures: Map<FuncSig, SigIndex>,
|
pub signatures: Map<SigIndex, FuncSig>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Module {
|
impl Module {
|
||||||
|
@ -7,7 +7,7 @@ use hashbrown::HashMap;
|
|||||||
|
|
||||||
pub struct SigRegistry {
|
pub struct SigRegistry {
|
||||||
sig_set: HashMap<FuncSig, vm::SigId>,
|
sig_set: HashMap<FuncSig, vm::SigId>,
|
||||||
signatures: Map<vm::SigId, SigIndex>,
|
signatures: Map<SigIndex, vm::SigId>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SigRegistry {
|
impl SigRegistry {
|
||||||
@ -19,7 +19,8 @@ impl SigRegistry {
|
|||||||
|
|
||||||
for (_, &sig_index) in &module.signature_assoc {
|
for (_, &sig_index) in &module.signature_assoc {
|
||||||
let func_sig = module.signatures[sig_index].clone();
|
let func_sig = module.signatures[sig_index].clone();
|
||||||
registry.register(func_sig);
|
let new_sig_index = registry.register(func_sig);
|
||||||
|
assert_eq!(sig_index, new_sig_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
registry
|
registry
|
||||||
@ -33,12 +34,12 @@ impl SigRegistry {
|
|||||||
self.signatures[sig_index]
|
self.signatures[sig_index]
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register(&mut self, signature: FuncSig) {
|
fn register(&mut self, signature: FuncSig) -> SigIndex {
|
||||||
let index = self.sig_set.len();
|
let index = self.sig_set.len();
|
||||||
let vm_sig_id = *self
|
let vm_sig_id = *self
|
||||||
.sig_set
|
.sig_set
|
||||||
.entry(signature)
|
.entry(signature)
|
||||||
.or_insert_with(|| vm::SigId(index as u32));
|
.or_insert_with(|| vm::SigId(index as u32));
|
||||||
self.signatures.push(vm_sig_id);
|
self.signatures.push(vm_sig_id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,8 +84,10 @@ pub struct Table {
|
|||||||
/// Overtime, this will be able to represent more and more
|
/// Overtime, this will be able to represent more and more
|
||||||
/// complex expressions.
|
/// complex expressions.
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
pub enum GlobalInit {
|
pub enum Initializer {
|
||||||
Val(Val),
|
/// Corresponds to a `const.*` instruction.
|
||||||
|
Const(Val),
|
||||||
|
/// Corresponds to a `get_global` instruction.
|
||||||
GetGlobal(GlobalIndex),
|
GetGlobal(GlobalIndex),
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +101,7 @@ pub struct GlobalDesc {
|
|||||||
#[derive(Debug, Clone, Copy)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
pub struct Global {
|
pub struct Global {
|
||||||
pub desc: GlobalDesc,
|
pub desc: GlobalDesc,
|
||||||
pub init: GlobalInit,
|
pub init: Initializer,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A wasm memory.
|
/// A wasm memory.
|
||||||
@ -144,7 +146,7 @@ pub trait MapIndex {
|
|||||||
|
|
||||||
/// Dense item map
|
/// Dense item map
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct Map<T, I>
|
pub struct Map<I, T>
|
||||||
where
|
where
|
||||||
I: MapIndex,
|
I: MapIndex,
|
||||||
{
|
{
|
||||||
@ -152,7 +154,7 @@ where
|
|||||||
_marker: PhantomData<I>,
|
_marker: PhantomData<I>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T, I> Map<T, I>
|
impl<I, T> Map<I, T>
|
||||||
where
|
where
|
||||||
I: MapIndex,
|
I: MapIndex,
|
||||||
{
|
{
|
||||||
@ -189,7 +191,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T, I> Index<I> for Map<T, I>
|
impl<I, T> Index<I> for Map<I, T>
|
||||||
where
|
where
|
||||||
I: MapIndex,
|
I: MapIndex,
|
||||||
{
|
{
|
||||||
@ -199,7 +201,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T, I> IndexMut<I> for Map<T, I>
|
impl<I, T> IndexMut<I> for Map<I, T>
|
||||||
where
|
where
|
||||||
I: MapIndex,
|
I: MapIndex,
|
||||||
{
|
{
|
||||||
@ -208,7 +210,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, T, I> IntoIterator for &'a Map<T, I>
|
impl<'a, I, T> IntoIterator for &'a Map<I, T>
|
||||||
where
|
where
|
||||||
I: MapIndex,
|
I: MapIndex,
|
||||||
{
|
{
|
||||||
@ -220,7 +222,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, T, I> IntoIterator for &'a mut Map<T, I>
|
impl<'a, I, T> IntoIterator for &'a mut Map<I, T>
|
||||||
where
|
where
|
||||||
I: MapIndex,
|
I: MapIndex,
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user