require = fn (ok: u1) void { if (!ok) { #trap(); } } c_string_length = fn (c_string: &u8) u64 { >it = c_string; while (it.&) { it = it + 1; } return #int_from_pointer(it) - #int_from_pointer(c_string); } c_string_slice_build = fn (c_string: &u8, length: u64) []u8 { return c_string[0..length]; } [export] main = fn [cc(c)] (argument_count: u32, argument_pointer: &&u8) s32 { >length = c_string_length(argument_pointer[0]); >string = c_string_slice_build(argument_pointer[0], length); require(string.pointer == argument_pointer[0]); require(string.length == length); return 0; }