// issue 0105 / F1 — a UNIQUE expression const's nested leaf folds against the // const's AUTHOR source, not the reading module's. `a.sx` declares `M :: 1` and // `K :: M + 1` (= 2); `b.sx` declares a DIFFERENT same-name `M :: 10` (no `K`). // `main` flat-imports both, so the reader sees two `M`s — but it reads only `K`, // which is unique to `a.sx`. Folding `K`'s RHS must pin `M` to A's source (→ 1), // giving `K = 2`, coherently whether `K` is read as a runtime VALUE (`print K`) // or used as an array DIMENSION (`[K]u8`). // // Pre-fix (8518b66) the nested leaf re-selected `M` from the CALLER's source: // `main` flat-imports two `M`s → `'M' is ambiguous` (value read) / "array // dimension must be a compile-time integer constant" (dimension). Now the fold // pins each level to its selected author's source → val=2 len=2. #import "modules/std.sx"; #import "0762-modules-same-name-const-leaf-author-pin/a.sx"; #import "0762-modules-same-name-const-leaf-author-pin/b.sx"; read_dim :: () -> s64 { arr : [K]u8 = ---; return arr.len; } main :: () -> s32 { print("val={} len={}\n", K, read_dim()); 0 }