Landin library reference discuss source

compiler/tests/fixtures/runtime/library-shared-arena/main.ldn

1import core/arena
2import core/mem
3
4exercise: () -> (ok: bool) ! mem.out_of_memory =
5    ok = false
6    mut backing: [32]u8 = zeroed
7    mut space: arena.space = zeroed
8    memory := arena.over_unchecked(space, addr backing[0], 32)
9    address := try mem.allocate(memory, usize(4), usize(1))
10    address.val = 42
11    return when address.val <> 42
12    _ = mem.allocate(memory, usize(64), usize(1)) else (problem)
13        _ = problem
14        return when arena.used(memory) <> 4
15        arena.reset(memory)
16        again := try mem.allocate(memory, usize(32), usize(1))
17        ok = arena.used(memory) == 32 and again == address
18        return
19    end
20end exercise
21
22public main: () -> (code: i32) =
23    code = 1
24    ok := exercise() else false
25    if ok then
26        code = 42
27    end if
28end main