Files
sx/examples/modules/0774-modules-bare-generic-head-visible-author.sx
agra 66bdc70bf1 test: group examples into per-category folders
Move examples/*.sx and their expected/ snapshots into per-category
subfolders (examples/<category>/...). Folder = leading filename token,
with ffi-objc/ffi-jni kept whole; filenames are unchanged. The corpus
runner and LSP sweep now discover each category's expected/ dir, while
issues/ stays flat. Example 1058's repo-root-relative companion import
is made file-relative. Path strings embedded in 164 snapshots were
regenerated (path-only changes). Test-layout docs in CLAUDE.md updated.
2026-06-21 14:41:34 +03:00

29 lines
1.3 KiB
Plaintext

// A BARE generic struct head (`Box(i64)`) and a BARE generic alias
// (`ABox :: Box(i64)`) must instantiate the template authored by the single
// bare-VISIBLE author — this file's own author or a DIRECT (1-hop) flat import —
// NOT the global last-wins `struct_template_map`, which a NON-visible 2-flat-hop
// same-name template can win.
//
// `b.sx` declares a one-field `Box($T)` (size 8) and itself flat-imports `c.sx`,
// which declares a two-field `Box($T)` (size 16). This file flat-imports ONLY
// `b.sx`, so `b.Box` is one flat hop away (visible) and `c.Box` is two hops away
// (NOT bare-visible, mirrors 0764/0706). The bare head `Box(i64)` and the bare
// alias `ABox :: Box(i64)` must both select `b.Box` (size 8).
//
// Regression (Phase E4 finding #1): before the bare head/alias consulted the
// source-keyed visible author, both fell through the `.unregistered` gate arm to
// the global last-wins template and instantiated the non-visible `c.Box`
// (size 16). Fail-before printed `size=16 alias=16`.
#import "modules/std.sx";
#import "0774-modules-bare-generic-head-visible-author/b.sx";
ABox :: Box(i64);
main :: () -> i32 {
x : Box(i64) = .{ x = 1 };
a : ABox = .{ x = 2 };
print("size={} alias={} x={} a={}\n", size_of(Box(i64)), size_of(ABox), x.x, a.x);
0
}