Skip to content

Ownership Contracts

View source on GitHub

ownership_contracts.fl
structure Box { own *i32 value; };
unsafe Box Box::init(own *i32 value) override {
return build Box { self.value = value; };
}
unsafe void Box::tear(&self) override { free(self->value); }
unsafe i32 Box::get(&const self) { if self->value == null { return 0; } return *self->value; }
unsafe void consume(own *i32 p) { free(p); }
unsafe (own *i32, error) create() { return new<i32>(42); }
i32 main() {
unsafe {
p, e := create();
if e != none { return 1; }
box := Box::init(p);
return box.get();
}
}