Part of #69
Task
For each re-exporter component (identified via graph.reexporter_components), allocate a region in its linear memory for a handle table.
Implementation
Files: meld-core/src/merger.rs
- Add
HandleTableInfo struct:
pub struct HandleTableInfo {
pub memory_idx: u32,
pub next_ptr_global: u32,
pub table_base_addr: u32,
pub capacity: u32,
}
-
Add pub handle_tables: HashMap<usize, HandleTableInfo> to MergedModule
-
After merging all components, for each re-exporter:
- Find memory index from
memory_index_map[(comp_idx, 0, 0)]
- Scan data segments to find highest
offset + data.len() for that memory
- Round up to 4-byte alignment →
table_base_addr
- Add mutable i32 global initialized to
table_base_addr + 4 (skip slot 0)
- Ensure memory has enough pages for table (256 entries = 1024 bytes)
Branch
feat/per-component-handle-tables
Acceptance
cargo test --package meld-core passes (73 tests, no regression).
Part of #69
Task
For each re-exporter component (identified via
graph.reexporter_components), allocate a region in its linear memory for a handle table.Implementation
Files:
meld-core/src/merger.rsHandleTableInfostruct:Add
pub handle_tables: HashMap<usize, HandleTableInfo>toMergedModuleAfter merging all components, for each re-exporter:
memory_index_map[(comp_idx, 0, 0)]offset + data.len()for that memorytable_base_addrtable_base_addr + 4(skip slot 0)Branch
feat/per-component-handle-tablesAcceptance
cargo test --package meld-corepasses (73 tests, no regression).