enum, union

This commit is contained in:
agra
2026-02-14 13:17:22 +02:00
parent 4ff828fd1a
commit 025b790411
14 changed files with 537 additions and 245 deletions

View File

@@ -34,7 +34,6 @@ pub const Node = struct {
struct_decl: StructDecl,
struct_literal: StructLiteral,
union_decl: UnionDecl,
union_literal: UnionLiteral,
lambda: Lambda,
type_expr: TypeExpr,
param: Param,
@@ -127,6 +126,7 @@ pub const Identifier = struct {
pub const EnumLiteral = struct {
name: []const u8, // without the leading dot
payload: ?*Node = null, // non-null for enum variants with payloads (tagged unions)
};
pub const BinaryOp = struct {
@@ -225,7 +225,14 @@ pub const Assignment = struct {
pub const EnumDecl = struct {
name: []const u8,
variants: []const []const u8,
variant_names: []const []const u8,
variant_types: []const ?*Node = &.{}, // null entries = no payload; empty = payload-less enum
};
pub const UnionDecl = struct {
name: []const u8,
field_names: []const []const u8,
field_types: []const *Node,
};
pub const StructTypeParam = struct {
@@ -341,18 +348,6 @@ pub const SpreadExpr = struct {
operand: *Node,
};
pub const UnionDecl = struct {
name: []const u8,
variant_names: []const []const u8,
variant_types: []const ?*Node, // null for void variants
};
pub const UnionLiteral = struct {
union_name: ?[]const u8, // null for anonymous `.variant(expr)`
variant_name: []const u8,
payload: ?*Node, // null for void variants
};
pub const NamespaceDecl = struct {
name: []const u8,
decls: []const *Node,