| ... | ... | @@ -2410,7 +2410,7 @@ var some_integers: [100]i32 = undefined; |
| 2410 | 2410 | |
| 2411 | 2411 | test "modify an array" { |
| 2412 | 2412 | for (&some_integers, 0..) |*item, i| { |
| 2413 | | item.* = @intCast(i32, i); |
| 2413 | item.* = @intCast(i); |
| 2414 | 2414 | } |
| 2415 | 2415 | try expect(some_integers[10] == 10); |
| 2416 | 2416 | try expect(some_integers[99] == 99); |
| ... | ... | @@ -2452,8 +2452,8 @@ var fancy_array = init: { |
| 2452 | 2452 | var initial_value: [10]Point = undefined; |
| 2453 | 2453 | for (&initial_value, 0..) |*pt, i| { |
| 2454 | 2454 | pt.* = Point{ |
| 2455 | | .x = @intCast(i32, i), |
| 2456 | | .y = @intCast(i32, i) * 2, |
| 2455 | .x = @intCast(i), |
| 2456 | .y = @intCast(i * 2), |
| 2457 | 2457 | }; |
| 2458 | 2458 | } |
| 2459 | 2459 | break :init initial_value; |
| ... | ... | @@ -2769,7 +2769,7 @@ test "comptime pointers" { |
| 2769 | 2769 | const expect = @import("std").testing.expect; |
| 2770 | 2770 | |
| 2771 | 2771 | test "@intFromPtr and @ptrFromInt" { |
| 2772 | | const ptr = @ptrFromInt(*i32, 0xdeadbee0); |
| 2772 | const ptr: *i32 = @ptrFromInt(0xdeadbee0); |
| 2773 | 2773 | const addr = @intFromPtr(ptr); |
| 2774 | 2774 | try expect(@TypeOf(addr) == usize); |
| 2775 | 2775 | try expect(addr == 0xdeadbee0); |
| ... | ... | @@ -2784,7 +2784,7 @@ test "comptime @ptrFromInt" { |
| 2784 | 2784 | comptime { |
| 2785 | 2785 | // Zig is able to do this at compile-time, as long as |
| 2786 | 2786 | // ptr is never dereferenced. |
| 2787 | | const ptr = @ptrFromInt(*i32, 0xdeadbee0); |
| 2787 | const ptr: *i32 = @ptrFromInt(0xdeadbee0); |
| 2788 | 2788 | const addr = @intFromPtr(ptr); |
| 2789 | 2789 | try expect(@TypeOf(addr) == usize); |
| 2790 | 2790 | try expect(addr == 0xdeadbee0); |
| ... | ... | @@ -2801,7 +2801,7 @@ test "comptime @ptrFromInt" { |
| 2801 | 2801 | const expect = @import("std").testing.expect; |
| 2802 | 2802 | |
| 2803 | 2803 | test "volatile" { |
| 2804 | | const mmio_ptr = @ptrFromInt(*volatile u8, 0x12345678); |
| 2804 | const mmio_ptr: *volatile u8 = @ptrFromInt(0x12345678); |
| 2805 | 2805 | try expect(@TypeOf(mmio_ptr) == *volatile u8); |
| 2806 | 2806 | } |
| 2807 | 2807 | {#code_end#} |
| ... | ... | @@ -2822,7 +2822,7 @@ const expect = std.testing.expect; |
| 2822 | 2822 | |
| 2823 | 2823 | test "pointer casting" { |
| 2824 | 2824 | const bytes align(@alignOf(u32)) = [_]u8{ 0x12, 0x12, 0x12, 0x12 }; |
| 2825 | | const u32_ptr = @ptrCast(*const u32, &bytes); |
| 2825 | const u32_ptr: *const u32 = @ptrCast(&bytes); |
| 2826 | 2826 | try expect(u32_ptr.* == 0x12121212); |
| 2827 | 2827 | |
| 2828 | 2828 | // Even this example is contrived - there are better ways to do the above than |
| ... | ... | @@ -2831,7 +2831,7 @@ test "pointer casting" { |
| 2831 | 2831 | try expect(u32_value == 0x12121212); |
| 2832 | 2832 | |
| 2833 | 2833 | // And even another way, the most straightforward way to do it: |
| 2834 | | try expect(@bitCast(u32, bytes) == 0x12121212); |
| 2834 | try expect(@as(u32, @bitCast(bytes)) == 0x12121212); |
| 2835 | 2835 | } |
| 2836 | 2836 | |
| 2837 | 2837 | test "pointer child type" { |
| ... | ... | @@ -2921,7 +2921,7 @@ test "pointer alignment safety" { |
| 2921 | 2921 | } |
| 2922 | 2922 | fn foo(bytes: []u8) u32 { |
| 2923 | 2923 | const slice4 = bytes[1..5]; |
| 2924 | | const int_slice = std.mem.bytesAsSlice(u32, @alignCast(4, slice4)); |
| 2924 | const int_slice = std.mem.bytesAsSlice(u32, @as([]align(4) u8, @alignCast(slice4))); |
| 2925 | 2925 | return int_slice[0]; |
| 2926 | 2926 | } |
| 2927 | 2927 | {#code_end#} |
| ... | ... | @@ -2942,7 +2942,7 @@ const expect = std.testing.expect; |
| 2942 | 2942 | |
| 2943 | 2943 | test "allowzero" { |
| 2944 | 2944 | var zero: usize = 0; |
| 2945 | | var ptr = @ptrFromInt(*allowzero i32, zero); |
| 2945 | var ptr: *allowzero i32 = @ptrFromInt(zero); |
| 2946 | 2946 | try expect(@intFromPtr(ptr) == 0); |
| 2947 | 2947 | } |
| 2948 | 2948 | {#code_end#} |
| ... | ... | @@ -3354,12 +3354,12 @@ fn doTheTest() !void { |
| 3354 | 3354 | try expect(@sizeOf(Full) == 2); |
| 3355 | 3355 | try expect(@sizeOf(Divided) == 2); |
| 3356 | 3356 | var full = Full{ .number = 0x1234 }; |
| 3357 | | var divided = @bitCast(Divided, full); |
| 3357 | var divided: Divided = @bitCast(full); |
| 3358 | 3358 | try expect(divided.half1 == 0x34); |
| 3359 | 3359 | try expect(divided.quarter3 == 0x2); |
| 3360 | 3360 | try expect(divided.quarter4 == 0x1); |
| 3361 | 3361 | |
| 3362 | | var ordered = @bitCast([2]u8, full); |
| 3362 | var ordered: [2]u8 = @bitCast(full); |
| 3363 | 3363 | switch (native_endian) { |
| 3364 | 3364 | .Big => { |
| 3365 | 3365 | try expect(ordered[0] == 0x12); |
| ... | ... | @@ -4428,7 +4428,7 @@ fn getNum(u: U) u32 { |
| 4428 | 4428 | // `u.a` or `u.b` and `tag` is `u`'s comptime-known tag value. |
| 4429 | 4429 | inline else => |num, tag| { |
| 4430 | 4430 | if (tag == .b) { |
| 4431 | | return @intFromFloat(u32, num); |
| 4431 | return @intFromFloat(num); |
| 4432 | 4432 | } |
| 4433 | 4433 | return num; |
| 4434 | 4434 | } |
| ... | ... | @@ -4714,7 +4714,7 @@ test "for basics" { |
| 4714 | 4714 | var sum2: i32 = 0; |
| 4715 | 4715 | for (items, 0..) |_, i| { |
| 4716 | 4716 | try expect(@TypeOf(i) == usize); |
| 4717 | | sum2 += @intCast(i32, i); |
| 4717 | sum2 += @as(i32, @intCast(i)); |
| 4718 | 4718 | } |
| 4719 | 4719 | try expect(sum2 == 10); |
| 4720 | 4720 | |
| ... | ... | @@ -6363,7 +6363,7 @@ const mem = std.mem; |
| 6363 | 6363 | test "cast *[1][*]const u8 to [*]const ?[*]const u8" { |
| 6364 | 6364 | const window_name = [1][*]const u8{"window name"}; |
| 6365 | 6365 | const x: [*]const ?[*]const u8 = &window_name; |
| 6366 | | try expect(mem.eql(u8, std.mem.sliceTo(@ptrCast([*:0]const u8, x[0].?), 0), "window name")); |
| 6366 | try expect(mem.eql(u8, std.mem.sliceTo(@as([*:0]const u8, @ptrCast(x[0].?)), 0), "window name")); |
| 6367 | 6367 | } |
| 6368 | 6368 | {#code_end#} |
| 6369 | 6369 | {#header_close#} |
| ... | ... | @@ -6760,8 +6760,8 @@ fn peerTypeEmptyArrayAndSliceAndError(a: bool, slice: []u8) anyerror![]u8 { |
| 6760 | 6760 | } |
| 6761 | 6761 | |
| 6762 | 6762 | test "peer type resolution: *const T and ?*T" { |
| 6763 | | const a = @ptrFromInt(*const usize, 0x123456780); |
| 6764 | | const b = @ptrFromInt(?*usize, 0x123456780); |
| 6763 | const a: *const usize = @ptrFromInt(0x123456780); |
| 6764 | const b: ?*usize = @ptrFromInt(0x123456780); |
| 6765 | 6765 | try expect(a == b); |
| 6766 | 6766 | try expect(b == a); |
| 6767 | 6767 | } |
| ... | ... | @@ -7762,12 +7762,13 @@ test "global assembly" { |
| 7762 | 7762 | at compile time. |
| 7763 | 7763 | </p> |
| 7764 | 7764 | {#header_open|@addrSpaceCast#} |
| 7765 | | <pre>{#syntax#}@addrSpaceCast(comptime addrspace: std.builtin.AddressSpace, ptr: anytype) anytype{#endsyntax#}</pre> |
| 7765 | <pre>{#syntax#}@addrSpaceCast(ptr: anytype) anytype{#endsyntax#}</pre> |
| 7766 | 7766 | <p> |
| 7767 | | Converts a pointer from one address space to another. Depending on the current target and |
| 7768 | | address spaces, this cast may be a no-op, a complex operation, or illegal. If the cast is |
| 7769 | | legal, then the resulting pointer points to the same memory location as the pointer operand. |
| 7770 | | It is always valid to cast a pointer between the same address spaces. |
| 7767 | Converts a pointer from one address space to another. The new address space is inferred |
| 7768 | 			based on the result type. Depending on the current target and address spaces, this cast |
| 7769 | 			may be a no-op, a complex operation, or illegal. If the cast is legal, then the resulting |
| 7770 | 			pointer points to the same memory location as the pointer operand. It is always valid to |
| 7771 | 			cast a pointer between the same address spaces. |
| 7771 | 7772 | </p> |
| 7772 | 7773 | {#header_close#} |
| 7773 | 7774 | {#header_open|@addWithOverflow#} |
| ... | ... | @@ -7777,10 +7778,10 @@ test "global assembly" { |
| 7777 | 7778 | </p> |
| 7778 | 7779 | {#header_close#} |
| 7779 | 7780 | {#header_open|@alignCast#} |
| 7780 | | <pre>{#syntax#}@alignCast(comptime alignment: u29, ptr: anytype) anytype{#endsyntax#}</pre> |
| 7781 | <pre>{#syntax#}@alignCast(ptr: anytype) anytype{#endsyntax#}</pre> |
| 7781 | 7782 | <p> |
| 7782 | 7783 | {#syntax#}ptr{#endsyntax#} can be {#syntax#}*T{#endsyntax#}, {#syntax#}?*T{#endsyntax#}, or {#syntax#}[]T{#endsyntax#}. |
| 7783 | | It returns the same type as {#syntax#}ptr{#endsyntax#} except with the alignment adjusted to the new value. |
| 7784 | 			Changes the alignment of a pointer. The alignment to use is inferred based on the result type. |
| 7784 | 7785 | </p> |
| 7785 | 7786 | <p>A {#link|pointer alignment safety check|Incorrect Pointer Alignment#} is added |
| 7786 | 7787 | to the generated code to make sure the pointer is aligned as promised.</p> |
| ... | ... | @@ -7865,9 +7866,10 @@ comptime { |
| 7865 | 7866 | {#header_close#} |
| 7866 | 7867 | |
| 7867 | 7868 | {#header_open|@bitCast#} |
| 7868 | | <pre>{#syntax#}@bitCast(comptime DestType: type, value: anytype) DestType{#endsyntax#}</pre> |
| 7869 | <pre>{#syntax#}@bitCast(value: anytype) anytype{#endsyntax#}</pre> |
| 7869 | 7870 | <p> |
| 7870 | | Converts a value of one type to another type. |
| 7871 | Converts a value of one type to another type. The return type is the |
| 7872 | 			inferred result type. |
| 7871 | 7873 | </p> |
| 7872 | 7874 | <p> |
| 7873 | 7875 | Asserts that {#syntax#}@sizeOf(@TypeOf(value)) == @sizeOf(DestType){#endsyntax#}. |
| ... | ... | @@ -8420,10 +8422,11 @@ test "main" { |
| 8420 | 8422 | {#header_close#} |
| 8421 | 8423 | |
| 8422 | 8424 | {#header_open|@errSetCast#} |
| 8423 | | <pre>{#syntax#}@errSetCast(comptime T: DestType, value: anytype) DestType{#endsyntax#}</pre> |
| 8425 | <pre>{#syntax#}@errSetCast(value: anytype) anytype{#endsyntax#}</pre> |
| 8424 | 8426 | <p> |
| 8425 | | Converts an error value from one error set to another error set. Attempting to convert an error |
| 8426 | | which is not in the destination error set results in safety-protected {#link|Undefined Behavior#}. |
| 8427 | Converts an error value from one error set to another error set. The return type is the |
| 8428 | 			inferred result type. Attempting to convert an error which is not in the destination error |
| 8429 | 			set results in safety-protected {#link|Undefined Behavior#}. |
| 8427 | 8430 | </p> |
| 8428 | 8431 | {#header_close#} |
| 8429 | 8432 | |
| ... | ... | @@ -8535,17 +8538,17 @@ test "decl access by string" { |
| 8535 | 8538 | {#header_close#} |
| 8536 | 8539 | |
| 8537 | 8540 | {#header_open|@floatCast#} |
| 8538 | | <pre>{#syntax#}@floatCast(comptime DestType: type, value: anytype) DestType{#endsyntax#}</pre> |
| 8541 | <pre>{#syntax#}@floatCast(value: anytype) anytype{#endsyntax#}</pre> |
| 8539 | 8542 | <p> |
| 8540 | 8543 | Convert from one float type to another. This cast is safe, but may cause the |
| 8541 | | numeric value to lose precision. |
| 8544 | numeric value to lose precision. The return type is the inferred result type. |
| 8542 | 8545 | </p> |
| 8543 | 8546 | {#header_close#} |
| 8544 | 8547 | |
| 8545 | 8548 | {#header_open|@intFromFloat#} |
| 8546 | | <pre>{#syntax#}@intFromFloat(comptime DestType: type, float: anytype) DestType{#endsyntax#}</pre> |
| 8549 | <pre>{#syntax#}@intFromFloat(float: anytype) anytype{#endsyntax#}</pre> |
| 8547 | 8550 | <p> |
| 8548 | | Converts the integer part of a floating point number to the destination type. |
| 8551 | Converts the integer part of a floating point number to the inferred result type. |
| 8549 | 8552 | </p> |
| 8550 | 8553 | <p> |
| 8551 | 8554 | If the integer part of the floating point number cannot fit in the destination type, |
| ... | ... | @@ -8660,16 +8663,17 @@ test "@hasDecl" { |
| 8660 | 8663 | {#header_close#} |
| 8661 | 8664 | |
| 8662 | 8665 | {#header_open|@intCast#} |
| 8663 | | <pre>{#syntax#}@intCast(comptime DestType: type, int: anytype) DestType{#endsyntax#}</pre> |
| 8666 | <pre>{#syntax#}@intCast(int: anytype) anytype{#endsyntax#}</pre> |
| 8664 | 8667 | <p> |
| 8665 | 8668 | Converts an integer to another integer while keeping the same numerical value. |
| 8669 | 			The return type is the inferred result type. |
| 8666 | 8670 | Attempting to convert a number which is out of range of the destination type results in |
| 8667 | 8671 | safety-protected {#link|Undefined Behavior#}. |
| 8668 | 8672 | </p> |
| 8669 | 8673 | {#code_begin|test_err|test_intCast_builtin|cast truncated bits#} |
| 8670 | 8674 | test "integer cast panic" { |
| 8671 | 8675 | var a: u16 = 0xabcd; |
| 8672 | | var b: u8 = @intCast(u8, a); |
| 8676 | var b: u8 = @intCast(a); |
| 8673 | 8677 | _ = b; |
| 8674 | 8678 | } |
| 8675 | 8679 | {#code_end#} |
| ... | ... | @@ -8683,9 +8687,9 @@ test "integer cast panic" { |
| 8683 | 8687 | {#header_close#} |
| 8684 | 8688 | |
| 8685 | 8689 | {#header_open|@enumFromInt#} |
| 8686 | | <pre>{#syntax#}@enumFromInt(comptime DestType: type, integer: anytype) DestType{#endsyntax#}</pre> |
| 8690 | <pre>{#syntax#}@enumFromInt(integer: anytype) anytype{#endsyntax#}</pre> |
| 8687 | 8691 | <p> |
| 8688 | | Converts an integer into an {#link|enum#} value. |
| 8692 | Converts an integer into an {#link|enum#} value. The return type is the inferred result type. |
| 8689 | 8693 | </p> |
| 8690 | 8694 | <p> |
| 8691 | 8695 | Attempting to convert an integer which represents no value in the chosen enum type invokes |
| ... | ... | @@ -8711,16 +8715,18 @@ test "integer cast panic" { |
| 8711 | 8715 | {#header_close#} |
| 8712 | 8716 | |
| 8713 | 8717 | {#header_open|@floatFromInt#} |
| 8714 | | <pre>{#syntax#}@floatFromInt(comptime DestType: type, int: anytype) DestType{#endsyntax#}</pre> |
| 8718 | <pre>{#syntax#}@floatFromInt(int: anytype) anytype{#endsyntax#}</pre> |
| 8715 | 8719 | <p> |
| 8716 | | Converts an integer to the closest floating point representation. To convert the other way, use {#link|@intFromFloat#}. This cast is always safe. |
| 8720 | Converts an integer to the closest floating point representation. The return type is the inferred result type. |
| 8721 | 			To convert the other way, use {#link|@intFromFloat#}. This cast is always safe. |
| 8717 | 8722 | </p> |
| 8718 | 8723 | {#header_close#} |
| 8719 | 8724 | |
| 8720 | 8725 | {#header_open|@ptrFromInt#} |
| 8721 | | <pre>{#syntax#}@ptrFromInt(comptime DestType: type, address: usize) DestType{#endsyntax#}</pre> |
| 8726 | <pre>{#syntax#}@ptrFromInt(address: usize) anytype{#endsyntax#}</pre> |
| 8722 | 8727 | <p> |
| 8723 | | Converts an integer to a {#link|pointer|Pointers#}. To convert the other way, use {#link|@intFromPtr#}. Casting an address of 0 to a destination type |
| 8728 | Converts an integer to a {#link|pointer|Pointers#}. The return type is the inferred result type. |
| 8729 | 			To convert the other way, use {#link|@intFromPtr#}. Casting an address of 0 to a destination type |
| 8724 | 8730 | which in not {#link|optional|Optional Pointers#} and does not have the {#syntax#}allowzero{#endsyntax#} attribute will result in a |
| 8725 | 8731 | {#link|Pointer Cast Invalid Null#} panic when runtime safety checks are enabled. |
| 8726 | 8732 | </p> |
| ... | ... | @@ -8924,9 +8930,9 @@ pub const PrefetchOptions = struct { |
| 8924 | 8930 | {#header_close#} |
| 8925 | 8931 | |
| 8926 | 8932 | {#header_open|@ptrCast#} |
| 8927 | | <pre>{#syntax#}@ptrCast(comptime DestType: type, value: anytype) DestType{#endsyntax#}</pre> |
| 8933 | <pre>{#syntax#}@ptrCast(value: anytype) anytype{#endsyntax#}</pre> |
| 8928 | 8934 | <p> |
| 8929 | | Converts a pointer of one type to a pointer of another type. |
| 8935 | Converts a pointer of one type to a pointer of another type. The return type is the inferred result type. |
| 8930 | 8936 | </p> |
| 8931 | 8937 | <p> |
| 8932 | 8938 | {#link|Optional Pointers#} are allowed. Casting an optional pointer which is {#link|null#} |
| ... | ... | @@ -9522,10 +9528,10 @@ fn List(comptime T: type) type { |
| 9522 | 9528 | {#header_close#} |
| 9523 | 9529 | |
| 9524 | 9530 | {#header_open|@truncate#} |
| 9525 | | <pre>{#syntax#}@truncate(comptime T: type, integer: anytype) T{#endsyntax#}</pre> |
| 9531 | <pre>{#syntax#}@truncate(integer: anytype) anytype{#endsyntax#}</pre> |
| 9526 | 9532 | <p> |
| 9527 | 9533 | This function truncates bits from an integer type, resulting in a smaller |
| 9528 | | or same-sized integer type. |
| 9534 | or same-sized integer type. The return type is the inferred result type. |
| 9529 | 9535 | </p> |
| 9530 | 9536 | <p> |
| 9531 | 9537 | This function always truncates the significant bits of the integer, regardless |
| ... | ... | @@ -9540,7 +9546,7 @@ const expect = std.testing.expect; |
| 9540 | 9546 | |
| 9541 | 9547 | test "integer truncation" { |
| 9542 | 9548 | var a: u16 = 0xabcd; |
| 9543 | | var b: u8 = @truncate(u8, a); |
| 9549 | var b: u8 = @truncate(a); |
| 9544 | 9550 | try expect(b == 0xcd); |
| 9545 | 9551 | } |
| 9546 | 9552 | {#code_end#} |
| ... | ... | @@ -9838,7 +9844,7 @@ fn foo(x: []const u8) u8 { |
| 9838 | 9844 | {#code_begin|test_err|test_comptime_invalid_cast|type 'u32' cannot represent integer value '-1'#} |
| 9839 | 9845 | comptime { |
| 9840 | 9846 | var value: i32 = -1; |
| 9841 | | const unsigned = @intCast(u32, value); |
| 9847 | const unsigned: u32 = @intCast(value); |
| 9842 | 9848 | _ = unsigned; |
| 9843 | 9849 | } |
| 9844 | 9850 | {#code_end#} |
| ... | ... | @@ -9848,7 +9854,7 @@ const std = @import("std"); |
| 9848 | 9854 | |
| 9849 | 9855 | pub fn main() void { |
| 9850 | 9856 | var value: i32 = -1; |
| 9851 | | var unsigned = @intCast(u32, value); |
| 9857 | var unsigned: u32 = @intCast(value); |
| 9852 | 9858 | std.debug.print("value: {}\n", .{unsigned}); |
| 9853 | 9859 | } |
| 9854 | 9860 | {#code_end#} |
| ... | ... | @@ -9861,7 +9867,7 @@ pub fn main() void { |
| 9861 | 9867 | {#code_begin|test_err|test_comptime_invalid_cast_truncate|type 'u8' cannot represent integer value '300'#} |
| 9862 | 9868 | comptime { |
| 9863 | 9869 | const spartan_count: u16 = 300; |
| 9864 | | const byte = @intCast(u8, spartan_count); |
| 9870 | const byte: u8 = @intCast(spartan_count); |
| 9865 | 9871 | _ = byte; |
| 9866 | 9872 | } |
| 9867 | 9873 | {#code_end#} |
| ... | ... | @@ -9871,7 +9877,7 @@ const std = @import("std"); |
| 9871 | 9877 | |
| 9872 | 9878 | pub fn main() void { |
| 9873 | 9879 | var spartan_count: u16 = 300; |
| 9874 | | const byte = @intCast(u8, spartan_count); |
| 9880 | const byte: u8 = @intCast(spartan_count); |
| 9875 | 9881 | std.debug.print("value: {}\n", .{byte}); |
| 9876 | 9882 | } |
| 9877 | 9883 | {#code_end#} |
| ... | ... | @@ -10208,7 +10214,7 @@ const Foo = enum { |
| 10208 | 10214 | }; |
| 10209 | 10215 | comptime { |
| 10210 | 10216 | const a: u2 = 3; |
| 10211 | | const b = @enumFromInt(Foo, a); |
| 10217 | const b: Foo = @enumFromInt(a); |
| 10212 | 10218 | _ = b; |
| 10213 | 10219 | } |
| 10214 | 10220 | {#code_end#} |
| ... | ... | @@ -10224,7 +10230,7 @@ const Foo = enum { |
| 10224 | 10230 | |
| 10225 | 10231 | pub fn main() void { |
| 10226 | 10232 | var a: u2 = 3; |
| 10227 | | var b = @enumFromInt(Foo, a); |
| 10233 | var b: Foo = @enumFromInt(a); |
| 10228 | 10234 | std.debug.print("value: {s}\n", .{@tagName(b)}); |
| 10229 | 10235 | } |
| 10230 | 10236 | {#code_end#} |
| ... | ... | @@ -10242,7 +10248,7 @@ const Set2 = error{ |
| 10242 | 10248 | C, |
| 10243 | 10249 | }; |
| 10244 | 10250 | comptime { |
| 10245 | | _ = @errSetCast(Set2, Set1.B); |
| 10251 | _ = @as(Set2, @errSetCast(Set1.B)); |
| 10246 | 10252 | } |
| 10247 | 10253 | {#code_end#} |
| 10248 | 10254 | <p>At runtime:</p> |
| ... | ... | @@ -10261,7 +10267,7 @@ pub fn main() void { |
| 10261 | 10267 | foo(Set1.B); |
| 10262 | 10268 | } |
| 10263 | 10269 | fn foo(set1: Set1) void { |
| 10264 | | const x = @errSetCast(Set2, set1); |
| 10270 | const x = @as(Set2, @errSetCast(set1)); |
| 10265 | 10271 | std.debug.print("value: {}\n", .{x}); |
| 10266 | 10272 | } |
| 10267 | 10273 | {#code_end#} |
| ... | ... | @@ -10271,8 +10277,8 @@ fn foo(set1: Set1) void { |
| 10271 | 10277 | <p>At compile-time:</p> |
| 10272 | 10278 | {#code_begin|test_err|test_comptime_incorrect_pointer_alignment|pointer address 0x1 is not aligned to 4 bytes#} |
| 10273 | 10279 | comptime { |
| 10274 | | const ptr = @ptrFromInt(*align(1) i32, 0x1); |
| 10275 | | const aligned = @alignCast(4, ptr); |
| 10280 | const ptr: *align(1) i32 = @ptrFromInt(0x1); |
| 10281 | const aligned: *align(4) i32 = @alignCast(ptr); |
| 10276 | 10282 | _ = aligned; |
| 10277 | 10283 | } |
| 10278 | 10284 | {#code_end#} |
| ... | ... | @@ -10286,7 +10292,7 @@ pub fn main() !void { |
| 10286 | 10292 | } |
| 10287 | 10293 | fn foo(bytes: []u8) u32 { |
| 10288 | 10294 | const slice4 = bytes[1..5]; |
| 10289 | | const int_slice = mem.bytesAsSlice(u32, @alignCast(4, slice4)); |
| 10295 | const int_slice = mem.bytesAsSlice(u32, @as([]align(4) u8, @alignCast(slice4))); |
| 10290 | 10296 | return int_slice[0]; |
| 10291 | 10297 | } |
| 10292 | 10298 | {#code_end#} |
| ... | ... | @@ -10387,7 +10393,7 @@ fn bar(f: *Foo) void { |
| 10387 | 10393 | {#code_begin|test_err|test_comptime_invalid_null_pointer_cast|null pointer casted to type#} |
| 10388 | 10394 | comptime { |
| 10389 | 10395 | const opt_ptr: ?*i32 = null; |
| 10390 | | const ptr = @ptrCast(*i32, opt_ptr); |
| 10396 | const ptr: *i32 = @ptrCast(opt_ptr); |
| 10391 | 10397 | _ = ptr; |
| 10392 | 10398 | } |
| 10393 | 10399 | {#code_end#} |
| ... | ... | @@ -10395,7 +10401,7 @@ comptime { |
| 10395 | 10401 | {#code_begin|exe_err|runtime_invalid_null_pointer_cast#} |
| 10396 | 10402 | pub fn main() void { |
| 10397 | 10403 | var opt_ptr: ?*i32 = null; |
| 10398 | | var ptr = @ptrCast(*i32, opt_ptr); |
| 10404 | var ptr: *i32 = @ptrCast(opt_ptr); |
| 10399 | 10405 | _ = ptr; |
| 10400 | 10406 | } |
| 10401 | 10407 | {#code_end#} |