Finch/tests/new/payload_enums.fch
Nexoniarz 3e45b62812 Enums whose variants hold values
enum Shape { Circle(float), Rect(float, float), Point }; Shape.Circle(2.0) makes one, match names the values
(Circle(r), _ to ignore), exhaustive like plain enums, printing shows Rect(2, 3.5). Underneath it is a struct (tag +
every variant's values), so copying, freeing, methods and valgrind-cleanliness come with it. Also: stray note files removed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015f73FesGZGYPkmDvUcj6QX
2026-10-26 00:18:53 +01:00

38 lines
809 B
Text

enum Shape {
Circle(float)
Rect(float, float)
Named(str, []int)
Point
}
fn Shape.area() -> float {
return match self {
Circle(r) -> 3.0 * r * r
Rect(w, h) -> w * h
Named(_, sizes) -> float(sizes.len)
Point -> 0.0
}
}
fn describe(Shape s) -> str {
match s {
Shape.Circle(r) -> return "circle " + str(r)
Shape.Named(name, _) -> return "named " + name
else -> return "other"
}
}
fn main() {
shapes := [Shape.Circle(2.0), Shape.Rect(2.0, 3.5), Shape.Named("tri", [1, 2, 3]), Shape.Point]
for s in shapes {
print(s, s.area(), describe(s))
}
copy := shapes[2]
shapes.clear()
print(copy)
p := Shape.Point
match p {
Point -> print("a point")
else -> print("no")
}
}