Flip the soft-default to a hard "missing package clause" error symmetrically in both stages (cmd/wcc/parse.c + lib/ww/syntax/parse.ww): the first real decl of a primary section with empty pathmod/resetmod and no seen clause is now rejected. Closes the documented soft-default divergence (the 63-wrapper carve-out). The gate flip can't be split from the migration it breaks, so this is one atomic commit: ~80 test/wcc wrappers gain `package main;` via a shared wwtestpkg.h helper, 6 data fixtures plus 17 asm-grep assertions update for the bare->main.<leaf> root-helper mangle shift, and rt/ declares `package rt;` with @symbol pinning the bare rt_ensure/rt_malloc linker names. Root mangling narrows: the executable entry `main` stays bare (existing carve-out), but root helper symbols become main.X. The #84 cluster is rewritten to assert main.run distinct from aa.run/test.run; its cgen fix and bare machinery are retained — still load-bearing for package-less module-reset deps. New table-driven test 782_strict_package.c (6 rows, both stages). Retiring //ww:module-reset is deferred to #24b: it is load-bearing (clears the .wwi pathmod so the body's package clause asserts), not a vestige; fusing its removal here would be a silent mismatch. All byte-id gates green; full make test reports "all 335 tests passed".
19 lines
961 B
Plaintext
19 lines
961 B
Plaintext
// #80/#84 -T coexist — a user `fn run` COEXISTS with lib/test's bound
|
|
// runner `run` (the synth main's callee). Once `ww test -c` bundles
|
|
// lib/test, the synth `use test;` keys lib/test's `run` under module
|
|
// "test" (#80: prepended before binding) and the user's `package main;`
|
|
// `run` mangles to a DISTINCT `main.run` (#84/#24a) — no duplicate. Both
|
|
// stages accept under -T and the synth runner runs the @test to exit 0;
|
|
// the user `run` must NOT hijack the entry. Pre-#80 this loud-rejected
|
|
// "duplicate fn run". The gate (910/997 coexist_run) static-label-counts
|
|
// the -T asm — exactly 1 `TEXT main.run` (user) + 1 `TEXT test.run` (lib
|
|
// runner) — pinning #84 distinctness here in the REAL @test/-T path (a
|
|
// dead-dup regression yields 0x main.run / 2x test.run). General
|
|
// callability of the user run is gated separately by 989_barefn_collide.
|
|
package main;
|
|
fn run() i32 = { return 9; };
|
|
|
|
@test fn t_one() void = {
|
|
assert(1 == 1);
|
|
};
|