139 lines
1.7 KiB
Plaintext
139 lines
1.7 KiB
Plaintext
State :: enum {
|
|
idle
|
|
ready
|
|
failed
|
|
}
|
|
|
|
Point :: struct {
|
|
x i32
|
|
y i32
|
|
}
|
|
|
|
Box :: union(enum) {
|
|
point Point
|
|
empty void
|
|
}
|
|
|
|
Error :: enum {
|
|
bad
|
|
}
|
|
|
|
make_point func() Point {
|
|
return Point { x = 3, y = 4 }
|
|
}
|
|
|
|
sum_loop func(limit i32) i32 {
|
|
total i32 = 0
|
|
i i32 = 0
|
|
while i < limit {
|
|
i += 1
|
|
if i == 2 {
|
|
continue
|
|
}
|
|
total += i
|
|
}
|
|
return total
|
|
}
|
|
|
|
sum_for func() i32 {
|
|
total i32 = 0
|
|
values [_]i32 = [1, 2, 3]
|
|
for values |value, index| {
|
|
total += value + index
|
|
}
|
|
return total
|
|
}
|
|
|
|
defer_value func() i32 {
|
|
value i32 = 1
|
|
{
|
|
defer value += 10
|
|
value += 1
|
|
}
|
|
return value
|
|
}
|
|
|
|
describe func(box Box) i32 {
|
|
return match box {
|
|
.point |p|: p.x + p.y
|
|
.empty: 0
|
|
}
|
|
}
|
|
|
|
maybe func(flag bool) ?i32 {
|
|
if flag {
|
|
return 9
|
|
}
|
|
return none
|
|
}
|
|
|
|
may_fail func(flag bool) i32 ! Error {
|
|
if flag {
|
|
return .bad
|
|
}
|
|
return 7
|
|
}
|
|
|
|
use_try func() i32 ! Error {
|
|
value :: try may_fail(false)
|
|
return value + 1
|
|
}
|
|
|
|
recover func() i32 {
|
|
return may_fail(true) catch |e| {
|
|
match e {
|
|
.bad: yield 5
|
|
}
|
|
}
|
|
}
|
|
|
|
GLOBAL :: $sum_loop(4)
|
|
|
|
main func() i32 {
|
|
point Point :: $make_point()
|
|
numbers [_]i32 :: $[4, 5, 6]
|
|
box Box :: $Box { point = Point { x = 8, y = 1 } }
|
|
state State :: $State.ready
|
|
name :: $"bro"
|
|
value i32 :: $sum_for()
|
|
deferred i32 :: $defer_value()
|
|
optional i32 :: $maybe(true)?
|
|
tried i32 :: $use_try() catch 0
|
|
recovered i32 :: $recover()
|
|
|
|
if point.x + point.y != 7 {
|
|
return 1
|
|
}
|
|
if numbers.len != 3 or numbers[2] != 6 {
|
|
return 2
|
|
}
|
|
if describe(box) != 9 {
|
|
return 3
|
|
}
|
|
if state != State.ready {
|
|
return 4
|
|
}
|
|
if name.len != 3 {
|
|
return 5
|
|
}
|
|
if value != 9 {
|
|
return 6
|
|
}
|
|
if deferred != 12 {
|
|
return 7
|
|
}
|
|
if optional != 9 {
|
|
return 8
|
|
}
|
|
if tried != 8 {
|
|
return 9
|
|
}
|
|
if recovered != 5 {
|
|
return 10
|
|
}
|
|
if GLOBAL != 8 {
|
|
return 11
|
|
}
|
|
return 0
|
|
}
|