mirror of
https://github.com/ziglang/zig.git
synced 2026-01-10 17:35:12 +00:00
* `@truncate` builtin allows casting to the same size integer. It also performs two's complement casting between signed and unsigned integers. * The idiomatic way to convert between bytes and numbers is now `mem.readInt` and `mem.writeInt` instead of an unsafe cast. It works at compile time, is safer, and looks cleaner. * Implicitly casting an array to a slice is allowed only if the slice is const. * Constant pointer values know if their memory is from a compile- time constant value or a compile-time variable. * Cast from [N]u8 to []T no longer allowed, but [N]u8 to []const T still allowed. * Fix inability to pass a mutable pointer to comptime variable at compile-time to a function and have the function modify the memory pointed to by the pointer. * Add the `comptime T: type` parameter back to mem.eql. Prevents accidentally creating instantiations for arrays.
30 lines
706 B
Zig
30 lines
706 B
Zig
const assert = @import("std").debug.assert;
|
|
const mem = @import("std").mem;
|
|
const io = @import("std").io;
|
|
|
|
const ET = enum {
|
|
SINT: i32,
|
|
UINT: u32,
|
|
|
|
pub fn print(a: &const ET, buf: []u8) -> %usize {
|
|
return switch (*a) {
|
|
ET.SINT => |x| { io.bufPrintInt(buf, x, 10, false, 0) },
|
|
ET.UINT => |x| { io.bufPrintInt(buf, x, 10, false, 0) },
|
|
}
|
|
}
|
|
};
|
|
|
|
fn enumWithMembers() {
|
|
@setFnTest(this);
|
|
|
|
const a = ET.SINT { -42 };
|
|
const b = ET.UINT { 42 };
|
|
var buf: [20]u8 = undefined;
|
|
|
|
assert(%%a.print(buf[0...]) == 3);
|
|
assert(mem.eql(u8, buf[0...3], "-42"));
|
|
|
|
assert(%%b.print(buf[0...]) == 2);
|
|
assert(mem.eql(u8, buf[0...2], "42"));
|
|
}
|