// Comptime type construction: mint a NEW nominal enum from a `TypeInfo` value // via the `define(declare("E"), info)` primitives, then construct one of its // variants and match on it — exercising that a programmatically-built enum // (with NO backing AST decl) flows through enum codegen unmodified (layout / // construct / match), byte-identical to a hand-written enum. // // The enum has two variants: `value` carrying an i64 payload, and `closed` with // no payload (`payload = void`). #import "modules/std.sx"; #import "modules/std/meta.sx"; E :: define(declare("E"), .enum(.{ variants = .[ EnumVariant.{ name = "value", payload = i64 }, EnumVariant.{ name = "closed", payload = void }, ] })); main :: () -> i32 { e := E.value(3); if e == { case .value: (v) { print("value {}\n", v); } case .closed: { print("closed\n"); } } c : E = .closed; if c == { case .value: (v) { print("value {}\n", v); } case .closed: { print("closed\n"); } } return 0; }