59 lines
960 B
Plaintext
59 lines
960 B
Plaintext
module "main"
|
|
|
|
extern "puts" func puts(text: cstring)
|
|
extern "malloc" func malloc(size: u64): ^void
|
|
extern "free" func free(address: ^void)
|
|
|
|
struct Human
|
|
{
|
|
name: cstring
|
|
}
|
|
|
|
extern "main" func main(args: []cstring): i64
|
|
{
|
|
let x: ref<Human> = {}
|
|
|
|
test(x)
|
|
|
|
return 0
|
|
}
|
|
|
|
func test(x: ref<Human>)
|
|
{
|
|
|
|
}
|
|
|
|
struct ref<T>
|
|
{
|
|
value: ^T
|
|
count: ^u64
|
|
|
|
@oncreate
|
|
func on_create()
|
|
{
|
|
puts("on_create")
|
|
this.value = @interpret(^T, malloc(@size(T)))
|
|
this.count = @interpret(^u64, malloc(@size(u64)))
|
|
this.count^ = 1
|
|
}
|
|
|
|
@oncopy
|
|
func on_copy()
|
|
{
|
|
puts("on_copy")
|
|
this.count^ = this.count^ + 1
|
|
}
|
|
|
|
@ondestroy
|
|
func on_destroy()
|
|
{
|
|
puts("on_destroy")
|
|
this.count^ = this.count^ - 1
|
|
if this.count^ <= 0
|
|
{
|
|
puts("free")
|
|
free(@interpret(^void, this.value))
|
|
free(@interpret(^void, this.count))
|
|
}
|
|
}
|
|
} |