enum, union
This commit is contained in:
23
src/ast.zig
23
src/ast.zig
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user