zig/test/cases/syntax.zig
Jimmi Holst Christensen 8139c5a516
New Zig formal grammar (#1685)
Reverted #1628 and changed the grammar+parser of the language to not allow certain expr where types are expected
2018-11-13 05:08:37 -08:00

60 lines
1.3 KiB
Zig

// Test trailing comma syntax
// zig fmt: off
const struct_trailing_comma = struct { x: i32, y: i32, };
const struct_no_comma = struct { x: i32, y: i32 };
const struct_fn_no_comma = struct { fn m() void {} y: i32 };
const enum_no_comma = enum { A, B };
fn container_init() void {
const S = struct { x: i32, y: i32 };
_ = S { .x = 1, .y = 2 };
_ = S { .x = 1, .y = 2, };
}
fn type_expr_return1() if (true) A {}
fn type_expr_return2() for (true) |_| A {}
fn type_expr_return3() while (true) A {}
fn type_expr_return4() comptime A {}
fn switch_cases(x: i32) void {
switch (x) {
1,2,3 => {},
4,5, => {},
6...8, => {},
else => {},
}
}
fn switch_prongs(x: i32) void {
switch (x) {
0 => {},
else => {},
}
switch (x) {
0 => {},
else => {}
}
}
const fn_no_comma = fn(i32, i32)void;
const fn_trailing_comma = fn(i32, i32,)void;
fn fn_calls() void {
fn add(x: i32, y: i32,) i32 { x + y };
_ = add(1, 2);
_ = add(1, 2,);
}
fn asm_lists() void {
if (false) { // Build AST but don't analyze
asm ("not real assembly"
:[a] "x" (x),);
asm ("not real assembly"
:[a] "x" (->i32),:[a] "x" (1),);
asm ("still not real assembly"
:::"a","b",);
}
}