mirror of
https://github.com/ziglang/zig.git
synced 2025-12-16 11:13:08 +00:00
zig fmt: support labeled suspend
This commit is contained in:
parent
37d3ef2835
commit
7dc8d433ab
@ -1371,6 +1371,7 @@ pub const Node = struct {
|
|||||||
|
|
||||||
pub const Suspend = struct {
|
pub const Suspend = struct {
|
||||||
base: Node,
|
base: Node,
|
||||||
|
label: ?Token,
|
||||||
suspend_token: Token,
|
suspend_token: Token,
|
||||||
payload: ?&Node,
|
payload: ?&Node,
|
||||||
body: ?&Node,
|
body: ?&Node,
|
||||||
@ -1392,6 +1393,7 @@ pub const Node = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn firstToken(self: &Suspend) Token {
|
pub fn firstToken(self: &Suspend) Token {
|
||||||
|
if (self.label) |label| return label;
|
||||||
return self.suspend_token;
|
return self.suspend_token;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1093,6 +1093,23 @@ pub const Parser = struct {
|
|||||||
}) catch unreachable;
|
}) catch unreachable;
|
||||||
continue;
|
continue;
|
||||||
},
|
},
|
||||||
|
Token.Id.Keyword_suspend => {
|
||||||
|
const node = try arena.construct(ast.Node.Suspend {
|
||||||
|
.base = ast.Node {
|
||||||
|
.id = ast.Node.Id.Suspend,
|
||||||
|
.doc_comments = null,
|
||||||
|
.same_line_comment = null,
|
||||||
|
},
|
||||||
|
.label = ctx.label,
|
||||||
|
.suspend_token = token,
|
||||||
|
.payload = null,
|
||||||
|
.body = null,
|
||||||
|
});
|
||||||
|
ctx.opt_ctx.store(&node.base);
|
||||||
|
stack.append(State { .SuspendBody = node }) catch unreachable;
|
||||||
|
try stack.append(State { .Payload = OptionalCtx { .Optional = &node.payload } });
|
||||||
|
continue;
|
||||||
|
},
|
||||||
Token.Id.Keyword_inline => {
|
Token.Id.Keyword_inline => {
|
||||||
stack.append(State {
|
stack.append(State {
|
||||||
.Inline = InlineCtx {
|
.Inline = InlineCtx {
|
||||||
@ -3046,6 +3063,7 @@ pub const Parser = struct {
|
|||||||
const node = try self.createToCtxNode(arena, ctx, ast.Node.Suspend,
|
const node = try self.createToCtxNode(arena, ctx, ast.Node.Suspend,
|
||||||
ast.Node.Suspend {
|
ast.Node.Suspend {
|
||||||
.base = undefined,
|
.base = undefined,
|
||||||
|
.label = null,
|
||||||
.suspend_token = *token,
|
.suspend_token = *token,
|
||||||
.payload = null,
|
.payload = null,
|
||||||
.body = null,
|
.body = null,
|
||||||
@ -3655,6 +3673,9 @@ pub const Parser = struct {
|
|||||||
},
|
},
|
||||||
ast.Node.Id.Suspend => {
|
ast.Node.Id.Suspend => {
|
||||||
const suspend_node = @fieldParentPtr(ast.Node.Suspend, "base", base);
|
const suspend_node = @fieldParentPtr(ast.Node.Suspend, "base", base);
|
||||||
|
if (suspend_node.label) |label| {
|
||||||
|
try stream.print("{}: ", self.tokenizer.getTokenSlice(label));
|
||||||
|
}
|
||||||
try stream.print("{}", self.tokenizer.getTokenSlice(suspend_node.suspend_token));
|
try stream.print("{}", self.tokenizer.getTokenSlice(suspend_node.suspend_token));
|
||||||
|
|
||||||
if (suspend_node.body) |body| {
|
if (suspend_node.body) |body| {
|
||||||
|
|||||||
@ -1,3 +1,14 @@
|
|||||||
|
test "zig fmt: labeled suspend" {
|
||||||
|
try testCanonical(
|
||||||
|
\\fn foo() void {
|
||||||
|
\\ s: suspend |p| {
|
||||||
|
\\ break :s;
|
||||||
|
\\ }
|
||||||
|
\\}
|
||||||
|
\\
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
test "zig fmt: comments before error set decl" {
|
test "zig fmt: comments before error set decl" {
|
||||||
try testCanonical(
|
try testCanonical(
|
||||||
\\const UnexpectedError = error {
|
\\const UnexpectedError = error {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user