module = "std" pub let printf(s: *char, ...) = extern("printf") let _exit(status: i32) = extern("_exit") pub let exit(status: i32) = { _exit(status) } pub let malloc(size: u64): *void = extern("malloc") pub let free(ptr: *void) = extern("free") pub struct string = { data: *char, len: u64, } let _strlen(s: *char): u64 = extern("strlen") let _strncpy(dest: *char, src: *char, n: u64): *char = extern("strncpy") pub let string_new(s: *char): *string = { let n = _strlen(s) let buf = cast(*char, malloc(n)) _strncpy(buf, s, n) let str = string{data=buf, len=n} return &str } pub let string_free(s: *string) = { free(cast(*void, s.data)) }