diff --git a/doc/langref.md b/doc/langref.md index 647b31acbc..4dae123f1f 100644 --- a/doc/langref.md +++ b/doc/langref.md @@ -9,7 +9,7 @@ TopLevelDecl : FnDef | ExternBlock | RootExportDecl | Import | ContainerDecl | V ErrorValueDecl : option(FnVisibleMod) "error" "Symbol" -VariableDeclaration : option(FnVisibleMod) ("var" | "const") "Symbol" ("=" Expression | ":" PrefixOpExpression option("=" Expression)) +VariableDeclaration : option(FnVisibleMod) ("var" | "const") "Symbol" option(":" PrefixOpExpression) "=" Expression ContainerDecl : many(Directive) option(FnVisibleMod) ("struct" | "enum") "Symbol" "{" many(StructMember) "}" diff --git a/example/cat/main.zig b/example/cat/main.zig index 5305a52149..6c6ad4d741 100644 --- a/example/cat/main.zig +++ b/example/cat/main.zig @@ -18,11 +18,10 @@ pub fn main(args: [][]u8) -> %void { } else if (arg[0] == '-') { return usage(exe); } else { - var is: InputStream; - is.open(arg, OpenReadOnly) %% |err| { + var is = input_stream_open(arg, OpenReadOnly) %% |err| { %%stderr.print("Unable to open file: {}", ([]u8)(err)); return err; - } + }; defer is.close(); catted_anything = true; @@ -40,7 +39,7 @@ fn usage(exe: []u8) -> %void { } fn cat_stream(is: InputStream) -> %void { - var buf: [1024 * 4]u8; + var buf: [1024 * 4]u8 = undefined; while (true) { const bytes_read = is.read(buf) %% |err| { diff --git a/example/guess_number/main.zig b/example/guess_number/main.zig index 791dcd61b2..8ad8216941 100644 --- a/example/guess_number/main.zig +++ b/example/guess_number/main.zig @@ -6,7 +6,7 @@ import "rand.zig"; pub fn main(args: [][]u8) -> %void { %%stderr.print_str("Welcome to the Guess Number Game in Zig.\n"); - var seed : u32; + var seed : u32 = undefined; const seed_bytes = (&u8)(&seed)[0...4]; %%os_get_random_bytes(seed_bytes); @@ -16,7 +16,7 @@ pub fn main(args: [][]u8) -> %void { while (true) { %%stderr.print_str("\nGuess a number between 1 and 100: "); - var line_buf : [20]u8; + var line_buf : [20]u8 = undefined; const line_len = stdin.read(line_buf) %% |err| { %%stderr.print_str("Unable to read from stdin.\n"); diff --git a/src/analyze.cpp b/src/analyze.cpp index 30fa52ef86..bac27ffcc4 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -2625,7 +2625,7 @@ static VariableTableEntry *analyze_variable_declaration_raw(CodeGen *g, ImportTa } TypeTableEntry *implicit_type = nullptr; - if (variable_declaration->expr != nullptr) { + if (variable_declaration->expr) { implicit_type = analyze_expression(g, import, context, explicit_type, variable_declaration->expr); if (implicit_type->id == TypeTableEntryIdInvalid) { // ignore the poison value @@ -2657,10 +2657,8 @@ static VariableTableEntry *analyze_variable_declaration_raw(CodeGen *g, ImportTa buf_sprintf("global variable initializer requires constant expression")); } } - } - - if (implicit_type == nullptr && is_const) { - add_node_error(g, source_node, buf_sprintf("const variable missing initialization")); + } else { + add_node_error(g, source_node, buf_sprintf("variables must be initialized")); implicit_type = g->builtin_types.entry_invalid; } diff --git a/std/bootstrap.zig b/std/bootstrap.zig index 4b4bf9660a..60d0641f0e 100644 --- a/std/bootstrap.zig +++ b/std/bootstrap.zig @@ -24,7 +24,7 @@ fn strlen(ptr: &const u8) -> isize { } fn call_main() -> unreachable { - var args: [argc][]u8; + var args: [argc][]u8 = undefined; for (arg, args, i) { const ptr = argv[i]; args[i] = ptr[0...strlen(ptr)]; diff --git a/std/rand.zig b/std/rand.zig index b2a793e30d..d925f3fad1 100644 --- a/std/rand.zig +++ b/std/rand.zig @@ -27,7 +27,7 @@ pub struct Rand { pub fn get_bytes(r: &Rand, buf: []u8) { var bytes_left = r.get_bytes_aligned(buf); if (bytes_left > 0) { - var rand_val_array : [@sizeof(u32)]u8; + var rand_val_array : [@sizeof(u32)]u8 = undefined; *((&u32)(rand_val_array.ptr)) = r.get_u32(); while (bytes_left > 0) { buf[buf.len - bytes_left] = rand_val_array[@sizeof(u32) - bytes_left]; @@ -42,7 +42,7 @@ pub struct Rand { const range = end - start; const leftover = @max_value(u64) % range; const upper_bound = @max_value(u64) - leftover; - var rand_val_array : [@sizeof(u64)]u8; + var rand_val_array : [@sizeof(u64)]u8 = undefined; while (true) { r.get_bytes_aligned(rand_val_array); @@ -79,7 +79,7 @@ pub struct Rand { /// Initialize random state with the given seed. pub fn rand_new(seed: u32) -> Rand { - var r: Rand; + var r: Rand = undefined; r.index = 0; r.array[0] = seed; var i : isize = 1; diff --git a/std/std.zig b/std/std.zig index 3660ee9249..19aafbbb40 100644 --- a/std/std.zig +++ b/std/std.zig @@ -209,7 +209,7 @@ fn buf_print_i64(out_buf: []u8, x: i64) -> isize { } fn buf_print_u64(out_buf: []u8, x: u64) -> isize { - var buf: [max_u64_base10_digits]u8; + var buf: [max_u64_base10_digits]u8 = undefined; var a = x; var index = buf.len; diff --git a/test/run_tests.cpp b/test/run_tests.cpp index daf3fa4cc9..86539a9c23 100644 --- a/test/run_tests.cpp +++ b/test/run_tests.cpp @@ -344,7 +344,7 @@ pub fn main(args: [][]u8) -> %void { import "std.zig"; pub fn main(args: [][]u8) -> %void { - var array: [4]void; + var array: [4]void = undefined; array[0] = void{}; array[1] = array[2]; if (@sizeof(@typeof(array)) != 0) { @@ -377,7 +377,7 @@ pub fn main(args: [][]u8) -> %void { import "std.zig"; pub fn main(args: [][]u8) -> %void { - var array : [5]i32; + var array : [5]i32 = undefined; var i : i32 = 0; while (i < 5) { @@ -613,7 +613,7 @@ export fn main(argc: c_int, argv: &&u8) -> c_int { import "std.zig"; pub fn main(args: [][]u8) -> %void { - var foo : Foo; + var foo : Foo = undefined; @memset(&foo, 0, @sizeof(Foo)); foo.a += 1; foo.b = foo.a == 1; @@ -649,10 +649,10 @@ struct Val { x: i32, } fn test_point_to_self() { - var root : Node; + var root : Node = undefined; root.val.x = 1; - var node : Node; + var node : Node = undefined; node.next = &root; node.val.x = 2; @@ -663,8 +663,8 @@ fn test_point_to_self() { } } fn test_byval_assign() { - var foo1 : Foo; - var foo2 : Foo; + var foo1 : Foo = undefined; + var foo2 : Foo = undefined; foo1.a = 1234; @@ -829,7 +829,7 @@ import "std.zig"; const ARRAY_SIZE : i8 = 20; pub fn main(args: [][]u8) -> %void { - var array : [ARRAY_SIZE]u8; + var array : [ARRAY_SIZE]u8 = undefined; %%stdout.print_u64(@sizeof(@typeof(array))); %%stdout.printf("\n"); } @@ -924,7 +924,7 @@ pub fn main(args: [][]u8) -> %void { add_simple_case("slicing", R"SOURCE( import "std.zig"; pub fn main(args: [][]u8) -> %void { - var array : [20]i32; + var array : [20]i32 = undefined; array[5] = 1234; @@ -969,7 +969,7 @@ fn f(c: u8) -> u8 { add_simple_case("overflow intrinsics", R"SOURCE( import "std.zig"; pub fn main(args: [][]u8) -> %void { - var result: u8; + var result: u8 = undefined; if (!@add_with_overflow(u8, 250, 100, &result)) { %%stdout.printf("BAD\n"); } @@ -986,8 +986,8 @@ pub fn main(args: [][]u8) -> %void { add_simple_case("memcpy and memset intrinsics", R"SOURCE( import "std.zig"; pub fn main(args: [][]u8) -> %void { - var foo : [20]u8; - var bar : [20]u8; + var foo : [20]u8 = undefined; + var bar : [20]u8 = undefined; @memset(foo.ptr, 'A', foo.len); @memcpy(bar.ptr, foo.ptr, bar.len); @@ -1475,7 +1475,7 @@ fn f() { add_compile_fail_case("array access errors", R"SOURCE( fn f() { - var bad : bool; + var bad : bool = undefined; i[i] = i[i]; bad[bad] = bad[bad]; } @@ -1521,7 +1521,7 @@ struct C { a : A, } add_compile_fail_case("invalid struct field", R"SOURCE( struct A { x : i32, } fn f() { - var a : A; + var a : A = undefined; a.foo = 1; const y = a.bar; } @@ -1652,7 +1652,7 @@ struct Foo {} struct Bar {} fn f(Foo: i32) { - var Bar : i32; + var Bar : i32 = undefined; } )SOURCE", 2, ".tmp_source.zig:5:6: error: variable shadows type 'Foo'", ".tmp_source.zig:6:5: error: variable shadows type 'Bar'");