ww: add Hare-style is/as postfix ops on tagged unions
`e is T` returns bool (variant tag == T's index); `e as T` unwraps to T or exit(1) on mismatch. Postfix, same precedence as `:` cast. TK_IS / N_TYPETEST / N_TYPEASSERT appended at the tail of their enums so every prior numeric value stays unchanged — the 990_selfhost wwdump-diff stays byte-clean. Cgen mirrors the match-case slot-based load (tag at +0, value at +8/+16), so an N_IDENT tagged-union local works just like a match scrutinee. Selfhost cgen inlines the slot resolution because the wwstage cgen drops sign bits on `*i32` output parameters in this position. Renames `errors.is` -> `errors.equal` (the only naming collision; the existing comment already noted it shared shape with strings.equal/bytes.equal).
This commit is contained in:
@@ -81,6 +81,8 @@ nkname(Nkind k)
|
||||
case N_TRYUNW: return "tryunw";
|
||||
case N_MLET: return "mlet";
|
||||
case N_MASSIGN: return "massign";
|
||||
case N_TYPETEST: return "typetest";
|
||||
case N_TYPEASSERT: return "typeassert";
|
||||
case N_LAST: return "last";
|
||||
}
|
||||
return "?";
|
||||
|
||||
Reference in New Issue
Block a user