The N_TTAGGED serializer emitted each variant via wwi_type but never re-emitted the `...` prefix for TK_ELLIPSIS spread variants, so an exported `(...inner | str)` round-tripped through .wwi as `(inner | str)`. The consumer's checker then could not flatten inner's members into the alias and variadic-assignability rejected bare members — under separate compilation this broke fmt/log/getopt. Re-emit `...` before the variant type, both stages; the producer stays purely syntactic (flatten/dedup remain the consumer's type-store job, per ref/hare/hare/unparse/type.ha:290-300). Gate: test/wcc/989_wwispread_sep.c — table-driven (2-arm + 3-arm spreads) x both stages, asserts the marker survives the .wwi, the consumer binds bare members under --sep (exit 0), and cs==ww .wwi byte-identity.
14 lines
333 B
Plaintext
14 lines
333 B
Plaintext
package main;
|
|
|
|
import liba;
|
|
|
|
// Each assignment binds a BARE member of inner (i32, i64) or the outer-direct
|
|
// arm (str) to liba.outer — typechecks ONLY if the spread flattened inner's
|
|
// arms into outer across the liba.wwi round-trip (#95).
|
|
export fn main() void = {
|
|
let x: liba.outer = 42i32;
|
|
x = 99i64;
|
|
x = "hi";
|
|
return;
|
|
};
|