Refactor the TypeTables type (#3971)
* Remove duplicate `TypeTables` type This was once needed historically but it is no longer needed. * Make the internals of `TypeTables` private Instead of reaching internally for the `wasm_signatures` map an `Index` implementation now exists to indirect accesses through the type of the index being accessed. For the component model this table of types will grow a number of other tables and this'll assist in consuming sites not having to worry so much about which map they're reaching into.
This commit is contained in:
@@ -7,7 +7,7 @@ use serde::{Deserialize, Serialize};
|
||||
use std::collections::BTreeMap;
|
||||
use std::convert::TryFrom;
|
||||
use std::mem;
|
||||
use std::ops::Range;
|
||||
use std::ops::{Index, Range};
|
||||
use wasmtime_types::*;
|
||||
|
||||
/// Implemenation styles for WebAssembly linear memory.
|
||||
@@ -1089,7 +1089,23 @@ impl Module {
|
||||
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
|
||||
#[allow(missing_docs)]
|
||||
pub struct TypeTables {
|
||||
pub wasm_signatures: PrimaryMap<SignatureIndex, WasmFuncType>,
|
||||
pub(crate) wasm_signatures: PrimaryMap<SignatureIndex, WasmFuncType>,
|
||||
}
|
||||
|
||||
impl TypeTables {
|
||||
/// Returns an iterator of all of the core wasm function signatures
|
||||
/// registered in this instance.
|
||||
pub fn wasm_signatures(&self) -> impl Iterator<Item = (SignatureIndex, &WasmFuncType)> {
|
||||
self.wasm_signatures.iter()
|
||||
}
|
||||
}
|
||||
|
||||
impl Index<SignatureIndex> for TypeTables {
|
||||
type Output = WasmFuncType;
|
||||
|
||||
fn index(&self, idx: SignatureIndex) -> &WasmFuncType {
|
||||
&self.wasm_signatures[idx]
|
||||
}
|
||||
}
|
||||
|
||||
/// Type information about functions in a wasm module.
|
||||
|
||||
@@ -509,7 +509,7 @@ impl<'data> ModuleEnvironment<'data> {
|
||||
|
||||
if self.tunables.generate_native_debuginfo {
|
||||
let sig_index = self.result.module.functions[func_index].signature;
|
||||
let sig = &self.types.wasm_signatures[sig_index];
|
||||
let sig = &self.types[sig_index];
|
||||
let mut locals = Vec::new();
|
||||
for pair in body.get_locals_reader()? {
|
||||
locals.push(pair?);
|
||||
|
||||
Reference in New Issue
Block a user