OffsetMap carries LeafMeta; read/write_field dispatch on it (ADR-012 §2b, plan phase 5)
Prerequisite (review #005 M2): Hash added to Endian/VariableEncoding derives (additive; fieldless Eq enums), and to ByteRange. - New public types LeafMeta { kind, encoding, endian } (Copy + Eq + Hash) and OffsetEntry { range, meta } (start()/end() accessors), re-exported from lib.rs. Deferred decision 2 resolved: struct — get(path) -> Option<&OffsetEntry>, iter() -> (&str, &OffsetEntry). Storage: Vec<(String, OffsetEntry)>. - LeafMeta computed at compute time with effective endian threaded through the aligned walk (container default -> field override, propagated into nested-struct probes and array elements via the referring field, matching the aligned materializer). - engine read_field/write_field dispatch on the entry's LeafMeta: the per-access BastDoc re-parse + lookup_leaf_field walk + LeafFieldInfo are gone — the last two review #004 M1 sites. - Parity note: lookup_leaf_field computed nested-struct defaults from the nested struct's own endian annotation; the map now agrees with the aligned materializer and packed ReadPlan (referring-field propagation). The old divergence (nested struct declaring endian under a field that also declares one) is closed; no test pinned it. - Behavior change: read_field on a map-absent path (whole-struct field) errors Offset ("field not found") instead of Access ("composite types"); the composite-path test accepted either. - materialize_aligned's four offset_map.get call sites updated to .range.start. alktty/alkcall untouched (bench never uses OffsetMap::get; alkcall has no dependency yet). Verification: 465 tests pass (offset_map tests updated to the OffsetEntry shape with per-kind LeafMeta expectations; engine test for the old lookup walk rewritten to assert map entries carry the LeafMeta); clippy -D warnings clean; cargo doc zero warnings; wasm32 release build green.
This commit is contained in:
1 parent
b7c7dbe2a1
commit
255c8c493e
7 files changed
+248
-188
No files matched your search
@@ -526,7 +526,39 @@ warnings`. `cargo build --target wasm32-unknown-unknown --release`.
|
||||
|
||||
---
|
||||
|
||||
## Phase 5 — `OffsetMap` carries `LeafMeta` (ADR-012 §2b)
|
||||
## Phase 5 — `OffsetMap` carries `LeafMeta` (ADR-012 §2b) — **DONE (2026-09-02)**
|
||||
|
||||
> **Status: implemented.** Prerequisite first (review #005 M2):
|
||||
> `Hash` added to `Endian`/`VariableEncoding` derives in `schema.rs`
|
||||
> (additive; both are fieldless `Eq` enums). New public types
|
||||
> `LeafMeta { kind, encoding, endian }` (`Copy + PartialEq + Eq +
|
||||
> Hash`) and `OffsetEntry { range, meta }` (with `start()`/`end()`
|
||||
> convenience accessors), both re-exported from `lib.rs`; `ByteRange`
|
||||
> gained `Hash` (additive). Storage is `Vec<(String, OffsetEntry)>`
|
||||
> (deferred decision 2 resolved: struct — `get` returns
|
||||
> `Option<&OffsetEntry>`, `iter` yields `(&str, &OffsetEntry)`).
|
||||
> `LeafMeta` is computed at `compute` time with **effective** endian
|
||||
> threaded through the walk: container default → field override per
|
||||
> field, propagated into nested-struct probes and array elements via
|
||||
> the referring field (the same propagation the aligned materializer
|
||||
> uses). **Parity note:** this replaces `engine.rs`'s
|
||||
> `lookup_leaf_field` walk, which computed nested-struct defaults from
|
||||
> the *nested struct's own* `endian` annotation — the two paths
|
||||
> diverged whenever a nested struct declared `endian` and its
|
||||
> referring field also declared one (the map now agrees with the
|
||||
> aligned materializer and the packed `ReadPlan`; the old divergence
|
||||
> was unreachable through `read_field` only when a nested annotation
|
||||
> existed, and no test pinned it). `read_field`/`write_field` dispatch
|
||||
> on the entry's `LeafMeta` — the `BastDoc` re-parse +
|
||||
> `lookup_leaf_field`/`LeafFieldInfo` per access are gone (the last
|
||||
> two M1 sites, engine.rs `read_field`/`write_field`). Behavior
|
||||
> change: `read_field` on a path absent from the map (e.g. a
|
||||
> whole-struct field path) now errors with `Offset` ("field not found
|
||||
> in offset map") instead of `Access` ("does not support composite
|
||||
> types") — the composite-path test already accepted either variant.
|
||||
> `materialize_aligned`'s four `offset_map.get` call sites updated to
|
||||
> `.range.start`. `alktty`/`alkcall` untouched (the bench never uses
|
||||
> `OffsetMap::get`; alkcall has no dependency yet).
|
||||
|
||||
**Goal:** Extend `OffsetMap`'s entries with `LeafMeta { kind, encoding,
|
||||
endian }` computed at `compute` time. `read_field`/`write_field` drop
|
||||
|
||||
Reference in new issue
Block a user