| author | |
| committer | |
| log | 4e439734130eadea4ef74cdb54a2496ecad6e8cd |
| tree | 0a87721ad11697108f7ab070ba31f335b1575e45 |
| parent | b215a3e0b6b3d79f4ffdaf3a092b8aa283aafb7b |
use `undefined` if you want uninitialized memory8 files changed, 29 insertions(+), 32 deletions(-)
doc/langref.md+1-1| ... | ... | @@ -9,7 +9,7 @@ TopLevelDecl : FnDef | ExternBlock | RootExportDecl | Import | ContainerDecl | V |
| 9 | 9 | |
| 10 | 10 | ErrorValueDecl : option(FnVisibleMod) "error" "Symbol" |
| 11 | 11 | |
| 12 | VariableDeclaration : option(FnVisibleMod) ("var" | "const") "Symbol" ("=" Expression | ":" PrefixOpExpression option("=" Expression)) | |
| 12 | VariableDeclaration : option(FnVisibleMod) ("var" | "const") "Symbol" option(":" PrefixOpExpression) "=" Expression | |
| 13 | 13 | |
| 14 | 14 | ContainerDecl : many(Directive) option(FnVisibleMod) ("struct" | "enum") "Symbol" "{" many(StructMember) "}" |
| 15 | 15 |
example/cat/main.zig+3-4| ... | ... | @@ -18,11 +18,10 @@ pub fn main(args: [][]u8) -> %void { |
| 18 | 18 | } else if (arg[0] == '-') { |
| 19 | 19 | return usage(exe); |
| 20 | 20 | } else { |
| 21 | var is: InputStream; | |
| 22 | is.open(arg, OpenReadOnly) %% |err| { | |
| 21 | var is = input_stream_open(arg, OpenReadOnly) %% |err| { | |
| 23 | 22 | %%stderr.print("Unable to open file: {}", ([]u8)(err)); |
| 24 | 23 | return err; |
| 25 | } | |
| 24 | }; | |
| 26 | 25 | defer is.close(); |
| 27 | 26 | |
| 28 | 27 | catted_anything = true; |
| ... | ... | @@ -40,7 +39,7 @@ fn usage(exe: []u8) -> %void { |
| 40 | 39 | } |
| 41 | 40 | |
| 42 | 41 | fn cat_stream(is: InputStream) -> %void { |
| 43 | var buf: [1024 * 4]u8; | |
| 42 | var buf: [1024 * 4]u8 = undefined; | |
| 44 | 43 | |
| 45 | 44 | while (true) { |
| 46 | 45 | const bytes_read = is.read(buf) %% |err| { |
example/guess_number/main.zig+2-2| ... | ... | @@ -6,7 +6,7 @@ import "rand.zig"; |
| 6 | 6 | pub fn main(args: [][]u8) -> %void { |
| 7 | 7 | %%stderr.print_str("Welcome to the Guess Number Game in Zig.\n"); |
| 8 | 8 | |
| 9 | var seed : u32; | |
| 9 | var seed : u32 = undefined; | |
| 10 | 10 | const seed_bytes = (&u8)(&seed)[0...4]; |
| 11 | 11 | %%os_get_random_bytes(seed_bytes); |
| 12 | 12 | |
| ... | ... | @@ -16,7 +16,7 @@ pub fn main(args: [][]u8) -> %void { |
| 16 | 16 | |
| 17 | 17 | while (true) { |
| 18 | 18 | %%stderr.print_str("\nGuess a number between 1 and 100: "); |
| 19 | var line_buf : [20]u8; | |
| 19 | var line_buf : [20]u8 = undefined; | |
| 20 | 20 | |
| 21 | 21 | const line_len = stdin.read(line_buf) %% |err| { |
| 22 | 22 | %%stderr.print_str("Unable to read from stdin.\n"); |
src/analyze.cpp+3-5| ... | ... | @@ -2625,7 +2625,7 @@ static VariableTableEntry *analyze_variable_declaration_raw(CodeGen *g, ImportTa |
| 2625 | 2625 | } |
| 2626 | 2626 | |
| 2627 | 2627 | TypeTableEntry *implicit_type = nullptr; |
| 2628 | if (variable_declaration->expr != nullptr) { | |
| 2628 | if (variable_declaration->expr) { | |
| 2629 | 2629 | implicit_type = analyze_expression(g, import, context, explicit_type, variable_declaration->expr); |
| 2630 | 2630 | if (implicit_type->id == TypeTableEntryIdInvalid) { |
| 2631 | 2631 | // ignore the poison value |
| ... | ... | @@ -2657,10 +2657,8 @@ static VariableTableEntry *analyze_variable_declaration_raw(CodeGen *g, ImportTa |
| 2657 | 2657 | buf_sprintf("global variable initializer requires constant expression")); |
| 2658 | 2658 | } |
| 2659 | 2659 | } |
| 2660 | } | |
| 2661 | ||
| 2662 | if (implicit_type == nullptr && is_const) { | |
| 2663 | add_node_error(g, source_node, buf_sprintf("const variable missing initialization")); | |
| 2660 | } else { | |
| 2661 | add_node_error(g, source_node, buf_sprintf("variables must be initialized")); | |
| 2664 | 2662 | implicit_type = g->builtin_types.entry_invalid; |
| 2665 | 2663 | } |
| 2666 | 2664 |
std/bootstrap.zig+1-1| ... | ... | @@ -24,7 +24,7 @@ fn strlen(ptr: &const u8) -> isize { |
| 24 | 24 | } |
| 25 | 25 | |
| 26 | 26 | fn call_main() -> unreachable { |
| 27 | var args: [argc][]u8; | |
| 27 | var args: [argc][]u8 = undefined; | |
| 28 | 28 | for (arg, args, i) { |
| 29 | 29 | const ptr = argv[i]; |
| 30 | 30 | args[i] = ptr[0...strlen(ptr)]; |
std/rand.zig+3-3| ... | ... | @@ -27,7 +27,7 @@ pub struct Rand { |
| 27 | 27 | pub fn get_bytes(r: &Rand, buf: []u8) { |
| 28 | 28 | var bytes_left = r.get_bytes_aligned(buf); |
| 29 | 29 | if (bytes_left > 0) { |
| 30 | var rand_val_array : [@sizeof(u32)]u8; | |
| 30 | var rand_val_array : [@sizeof(u32)]u8 = undefined; | |
| 31 | 31 | *((&u32)(rand_val_array.ptr)) = r.get_u32(); |
| 32 | 32 | while (bytes_left > 0) { |
| 33 | 33 | buf[buf.len - bytes_left] = rand_val_array[@sizeof(u32) - bytes_left]; |
| ... | ... | @@ -42,7 +42,7 @@ pub struct Rand { |
| 42 | 42 | const range = end - start; |
| 43 | 43 | const leftover = @max_value(u64) % range; |
| 44 | 44 | const upper_bound = @max_value(u64) - leftover; |
| 45 | var rand_val_array : [@sizeof(u64)]u8; | |
| 45 | var rand_val_array : [@sizeof(u64)]u8 = undefined; | |
| 46 | 46 | |
| 47 | 47 | while (true) { |
| 48 | 48 | r.get_bytes_aligned(rand_val_array); |
| ... | ... | @@ -79,7 +79,7 @@ pub struct Rand { |
| 79 | 79 | |
| 80 | 80 | /// Initialize random state with the given seed. |
| 81 | 81 | pub fn rand_new(seed: u32) -> Rand { |
| 82 | var r: Rand; | |
| 82 | var r: Rand = undefined; | |
| 83 | 83 | r.index = 0; |
| 84 | 84 | r.array[0] = seed; |
| 85 | 85 | var i : isize = 1; |
std/std.zig+1-1| ... | ... | @@ -209,7 +209,7 @@ fn buf_print_i64(out_buf: []u8, x: i64) -> isize { |
| 209 | 209 | } |
| 210 | 210 | |
| 211 | 211 | fn buf_print_u64(out_buf: []u8, x: u64) -> isize { |
| 212 | var buf: [max_u64_base10_digits]u8; | |
| 212 | var buf: [max_u64_base10_digits]u8 = undefined; | |
| 213 | 213 | var a = x; |
| 214 | 214 | var index = buf.len; |
| 215 | 215 |
test/run_tests.cpp+15-15| ... | ... | @@ -344,7 +344,7 @@ pub fn main(args: [][]u8) -> %void { |
| 344 | 344 | import "std.zig"; |
| 345 | 345 | |
| 346 | 346 | pub fn main(args: [][]u8) -> %void { |
| 347 | var array: [4]void; | |
| 347 | var array: [4]void = undefined; | |
| 348 | 348 | array[0] = void{}; |
| 349 | 349 | array[1] = array[2]; |
| 350 | 350 | if (@sizeof(@typeof(array)) != 0) { |
| ... | ... | @@ -377,7 +377,7 @@ pub fn main(args: [][]u8) -> %void { |
| 377 | 377 | import "std.zig"; |
| 378 | 378 | |
| 379 | 379 | pub fn main(args: [][]u8) -> %void { |
| 380 | var array : [5]i32; | |
| 380 | var array : [5]i32 = undefined; | |
| 381 | 381 | |
| 382 | 382 | var i : i32 = 0; |
| 383 | 383 | while (i < 5) { |
| ... | ... | @@ -613,7 +613,7 @@ export fn main(argc: c_int, argv: &&u8) -> c_int { |
| 613 | 613 | import "std.zig"; |
| 614 | 614 | |
| 615 | 615 | pub fn main(args: [][]u8) -> %void { |
| 616 | var foo : Foo; | |
| 616 | var foo : Foo = undefined; | |
| 617 | 617 | @memset(&foo, 0, @sizeof(Foo)); |
| 618 | 618 | foo.a += 1; |
| 619 | 619 | foo.b = foo.a == 1; |
| ... | ... | @@ -649,10 +649,10 @@ struct Val { |
| 649 | 649 | x: i32, |
| 650 | 650 | } |
| 651 | 651 | fn test_point_to_self() { |
| 652 | var root : Node; | |
| 652 | var root : Node = undefined; | |
| 653 | 653 | root.val.x = 1; |
| 654 | 654 | |
| 655 | var node : Node; | |
| 655 | var node : Node = undefined; | |
| 656 | 656 | node.next = &root; |
| 657 | 657 | node.val.x = 2; |
| 658 | 658 | |
| ... | ... | @@ -663,8 +663,8 @@ fn test_point_to_self() { |
| 663 | 663 | } |
| 664 | 664 | } |
| 665 | 665 | fn test_byval_assign() { |
| 666 | var foo1 : Foo; | |
| 667 | var foo2 : Foo; | |
| 666 | var foo1 : Foo = undefined; | |
| 667 | var foo2 : Foo = undefined; | |
| 668 | 668 | |
| 669 | 669 | foo1.a = 1234; |
| 670 | 670 | |
| ... | ... | @@ -829,7 +829,7 @@ import "std.zig"; |
| 829 | 829 | const ARRAY_SIZE : i8 = 20; |
| 830 | 830 | |
| 831 | 831 | pub fn main(args: [][]u8) -> %void { |
| 832 | var array : [ARRAY_SIZE]u8; | |
| 832 | var array : [ARRAY_SIZE]u8 = undefined; | |
| 833 | 833 | %%stdout.print_u64(@sizeof(@typeof(array))); |
| 834 | 834 | %%stdout.printf("\n"); |
| 835 | 835 | } |
| ... | ... | @@ -924,7 +924,7 @@ pub fn main(args: [][]u8) -> %void { |
| 924 | 924 | add_simple_case("slicing", R"SOURCE( |
| 925 | 925 | import "std.zig"; |
| 926 | 926 | pub fn main(args: [][]u8) -> %void { |
| 927 | var array : [20]i32; | |
| 927 | var array : [20]i32 = undefined; | |
| 928 | 928 | |
| 929 | 929 | array[5] = 1234; |
| 930 | 930 | |
| ... | ... | @@ -969,7 +969,7 @@ fn f(c: u8) -> u8 { |
| 969 | 969 | add_simple_case("overflow intrinsics", R"SOURCE( |
| 970 | 970 | import "std.zig"; |
| 971 | 971 | pub fn main(args: [][]u8) -> %void { |
| 972 | var result: u8; | |
| 972 | var result: u8 = undefined; | |
| 973 | 973 | if (!@add_with_overflow(u8, 250, 100, &result)) { |
| 974 | 974 | %%stdout.printf("BAD\n"); |
| 975 | 975 | } |
| ... | ... | @@ -986,8 +986,8 @@ pub fn main(args: [][]u8) -> %void { |
| 986 | 986 | add_simple_case("memcpy and memset intrinsics", R"SOURCE( |
| 987 | 987 | import "std.zig"; |
| 988 | 988 | pub fn main(args: [][]u8) -> %void { |
| 989 | var foo : [20]u8; | |
| 990 | var bar : [20]u8; | |
| 989 | var foo : [20]u8 = undefined; | |
| 990 | var bar : [20]u8 = undefined; | |
| 991 | 991 | |
| 992 | 992 | @memset(foo.ptr, 'A', foo.len); |
| 993 | 993 | @memcpy(bar.ptr, foo.ptr, bar.len); |
| ... | ... | @@ -1475,7 +1475,7 @@ fn f() { |
| 1475 | 1475 | |
| 1476 | 1476 | add_compile_fail_case("array access errors", R"SOURCE( |
| 1477 | 1477 | fn f() { |
| 1478 | var bad : bool; | |
| 1478 | var bad : bool = undefined; | |
| 1479 | 1479 | i[i] = i[i]; |
| 1480 | 1480 | bad[bad] = bad[bad]; |
| 1481 | 1481 | } |
| ... | ... | @@ -1521,7 +1521,7 @@ struct C { a : A, } |
| 1521 | 1521 | add_compile_fail_case("invalid struct field", R"SOURCE( |
| 1522 | 1522 | struct A { x : i32, } |
| 1523 | 1523 | fn f() { |
| 1524 | var a : A; | |
| 1524 | var a : A = undefined; | |
| 1525 | 1525 | a.foo = 1; |
| 1526 | 1526 | const y = a.bar; |
| 1527 | 1527 | } |
| ... | ... | @@ -1652,7 +1652,7 @@ struct Foo {} |
| 1652 | 1652 | struct Bar {} |
| 1653 | 1653 | |
| 1654 | 1654 | fn f(Foo: i32) { |
| 1655 | var Bar : i32; | |
| 1655 | var Bar : i32 = undefined; | |
| 1656 | 1656 | } |
| 1657 | 1657 | )SOURCE", 2, ".tmp_source.zig:5:6: error: variable shadows type 'Foo'", |
| 1658 | 1658 | ".tmp_source.zig:6:5: error: variable shadows type 'Bar'"); |