diff options
| author | Henry <mail@henrygressmann.de> | 2026-07-15 16:23:02 +0200 |
|---|---|---|
| committer | Henry <mail@henrygressmann.de> | 2026-07-15 16:23:02 +0200 |
| commit | 957b62bf1d6205409bac94a4ced790dfb8007e3d (patch) | |
| tree | 4e7e580c4bb187c57e4e2dfb3ffe7fef5a1771bf /crates/parser/src/conversion.rs | |
| parent | f99b3a90827406b48657d63d7c1f0188ddd68c8f (diff) | |
fix: 64 bit table addressing
Signed-off-by: Henry <mail@henrygressmann.de>
Diffstat (limited to 'crates/parser/src/conversion.rs')
| -rw-r--r-- | crates/parser/src/conversion.rs | 26 |
1 files changed, 5 insertions, 21 deletions
diff --git a/crates/parser/src/conversion.rs b/crates/parser/src/conversion.rs index 34dcdfd..cfc0e84 100644 --- a/crates/parser/src/conversion.rs +++ b/crates/parser/src/conversion.rs @@ -60,8 +60,11 @@ pub(crate) fn convert_module_import(import: wasmparser::Import<'_>) -> Result<Im wasmparser::TypeRef::Func(ty) => ImportKind::Function(ty), wasmparser::TypeRef::Table(ty) => { let element_type = convert_reftype(ty.element_type)?; - let (size_initial, size_max) = convert_table_limits(ty)?; - ImportKind::Table(TableType { element_type, size_initial, size_max }) + ImportKind::Table(if ty.table64 { + TableType::new64(element_type, ty.initial, ty.maximum) + } else { + TableType::new(element_type, ty.initial, ty.maximum) + }) } wasmparser::TypeRef::Memory(ty) => ImportKind::Memory(convert_module_memory(ty)), wasmparser::TypeRef::Global(ty) => { @@ -87,25 +90,6 @@ pub(crate) fn convert_module_memory(memory: wasmparser::MemoryType) -> MemoryTyp ) } -pub(crate) fn convert_module_table(table: wasmparser::Table<'_>) -> Result<TableType> { - let (size_initial, size_max) = convert_table_limits(table.ty)?; - Ok(TableType { element_type: convert_reftype(table.ty.element_type)?, size_initial, size_max }) -} - -fn convert_table_limits(table: wasmparser::TableType) -> Result<(u32, Option<u32>)> { - let size_initial = table.initial.try_into().map_err(|_| { - crate::ParseError::UnsupportedOperator(format!("Table size initial is too large: {}", table.initial)) - })?; - let size_max = table - .maximum - .map(|max| { - u32::try_from(max) - .map_err(|_| crate::ParseError::UnsupportedOperator(format!("Table size max is too large: {max}"))) - }) - .transpose()?; - Ok((size_initial, size_max)) -} - pub(crate) fn convert_module_globals( globals: wasmparser::SectionLimited<'_, wasmparser::Global<'_>>, ) -> Result<Box<[Global]>> { |
