aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2025-07-07 11:22:28 -0700
committerAndrew Kelley <andrew@ziglang.org>2025-07-07 13:39:16 -0700
commit40d11cc25a469dc6bb0f9fbba4d05e7210a23b3f (patch)
tree8f3ece572204f0ae02efe5f07581530db302dc1b /lib
parent31e46be74360f7bf6509bd8826690318974175c0 (diff)
downloadzig-40d11cc25a469dc6bb0f9fbba4d05e7210a23b3f.tar.gz
zig-40d11cc25a469dc6bb0f9fbba4d05e7210a23b3f.zip
remove `async` and `await` keywords
Also remove `@frameSize`, closing #3654. While the other machinery might remain depending on #23446, it is settled that there will not be `async`/ `await` keywords in the language.
Diffstat (limited to 'lib')
-rw-r--r--lib/compiler/reduce/Walk.zig5
-rw-r--r--lib/docs/wasm/Walk.zig9
-rw-r--r--lib/docs/wasm/html_render.zig2
-rw-r--r--lib/std/builtin.zig13
-rw-r--r--lib/std/zig/Ast.zig71
-rw-r--r--lib/std/zig/AstGen.zig70
-rw-r--r--lib/std/zig/AstRlAnnotate.zig18
-rw-r--r--lib/std/zig/BuiltinFn.zig16
-rw-r--r--lib/std/zig/Parse.zig54
-rw-r--r--lib/std/zig/Zir.zig26
-rw-r--r--lib/std/zig/ZonGen.zig5
-rw-r--r--lib/std/zig/parser_test.zig76
-rw-r--r--lib/std/zig/render.zig8
-rw-r--r--lib/std/zig/tokenizer.zig6
14 files changed, 10 insertions, 369 deletions
diff --git a/lib/compiler/reduce/Walk.zig b/lib/compiler/reduce/Walk.zig
index 48bd55fd63..360fcd7fd1 100644
--- a/lib/compiler/reduce/Walk.zig
+++ b/lib/compiler/reduce/Walk.zig
@@ -335,7 +335,6 @@ fn walkExpression(w: *Walk, node: Ast.Node.Index) Error!void {
.address_of,
.@"try",
.@"resume",
- .@"await",
.deref,
=> {
return walkExpression(w, ast.nodeData(node).node);
@@ -379,12 +378,8 @@ fn walkExpression(w: *Walk, node: Ast.Node.Index) Error!void {
.call_one,
.call_one_comma,
- .async_call_one,
- .async_call_one_comma,
.call,
.call_comma,
- .async_call,
- .async_call_comma,
=> {
var buf: [1]Ast.Node.Index = undefined;
return walkCall(w, ast.fullCall(&buf, node).?);
diff --git a/lib/docs/wasm/Walk.zig b/lib/docs/wasm/Walk.zig
index e3884f6271..9b979e1488 100644
--- a/lib/docs/wasm/Walk.zig
+++ b/lib/docs/wasm/Walk.zig
@@ -238,12 +238,8 @@ pub const File = struct {
.call_one,
.call_one_comma,
- .async_call_one,
- .async_call_one_comma,
.call,
.call_comma,
- .async_call,
- .async_call_comma,
=> {
var buf: [1]Ast.Node.Index = undefined;
return categorize_call(file_index, node, ast.fullCall(&buf, node).?);
@@ -743,7 +739,6 @@ fn expr(w: *Walk, scope: *Scope, parent_decl: Decl.Index, node: Ast.Node.Index)
.@"comptime",
.@"nosuspend",
.@"suspend",
- .@"await",
.@"resume",
.@"try",
=> try expr(w, scope, parent_decl, ast.nodeData(node).node),
@@ -806,12 +801,8 @@ fn expr(w: *Walk, scope: *Scope, parent_decl: Decl.Index, node: Ast.Node.Index)
.call_one,
.call_one_comma,
- .async_call_one,
- .async_call_one_comma,
.call,
.call_comma,
- .async_call,
- .async_call_comma,
=> {
var buf: [1]Ast.Node.Index = undefined;
const full = ast.fullCall(&buf, node).?;
diff --git a/lib/docs/wasm/html_render.zig b/lib/docs/wasm/html_render.zig
index b7e79e5732..13c972a936 100644
--- a/lib/docs/wasm/html_render.zig
+++ b/lib/docs/wasm/html_render.zig
@@ -101,8 +101,6 @@ pub fn fileSourceHtml(
.keyword_align,
.keyword_and,
.keyword_asm,
- .keyword_async,
- .keyword_await,
.keyword_break,
.keyword_catch,
.keyword_comptime,
diff --git a/lib/std/builtin.zig b/lib/std/builtin.zig
index 9df042f86f..527fc141c6 100644
--- a/lib/std/builtin.zig
+++ b/lib/std/builtin.zig
@@ -199,8 +199,6 @@ pub const CallingConvention = union(enum(u8)) {
pub const C: CallingConvention = .c;
/// Deprecated; use `.naked`.
pub const Naked: CallingConvention = .naked;
- /// Deprecated; use `.@"async"`.
- pub const Async: CallingConvention = .@"async";
/// Deprecated; use `.@"inline"`.
pub const Inline: CallingConvention = .@"inline";
/// Deprecated; use `.x86_64_interrupt`, `.x86_interrupt`, or `.avr_interrupt`.
@@ -866,32 +864,23 @@ pub const WasiExecModel = enum {
pub const CallModifier = enum {
/// Equivalent to function call syntax.
auto,
-
- /// Equivalent to async keyword used with function call syntax.
- async_kw,
-
/// Prevents tail call optimization. This guarantees that the return
/// address will point to the callsite, as opposed to the callsite's
/// callsite. If the call is otherwise required to be tail-called
/// or inlined, a compile error is emitted instead.
never_tail,
-
/// Guarantees that the call will not be inlined. If the call is
/// otherwise required to be inlined, a compile error is emitted instead.
never_inline,
-
/// Asserts that the function call will not suspend. This allows a
/// non-async function to call an async function.
- no_async,
-
+ no_suspend,
/// Guarantees that the call will be generated with tail call optimization.
/// If this is not possible, a compile error is emitted instead.
always_tail,
-
/// Guarantees that the call will be inlined at the callsite.
/// If this is not possible, a compile error is emitted instead.
always_inline,
-
/// Evaluates the call at compile-time. If the call cannot be completed at
/// compile-time, a compile error is emitted instead.
compile_time,
diff --git a/lib/std/zig/Ast.zig b/lib/std/zig/Ast.zig
index d0e819e943..f7a79c0896 100644
--- a/lib/std/zig/Ast.zig
+++ b/lib/std/zig/Ast.zig
@@ -606,7 +606,6 @@ pub fn firstToken(tree: Ast, node: Node.Index) TokenIndex {
.negation_wrap,
.address_of,
.@"try",
- .@"await",
.optional_type,
.@"switch",
.switch_comma,
@@ -763,20 +762,6 @@ pub fn firstToken(tree: Ast, node: Node.Index) TokenIndex {
return main_token - end_offset;
},
- .async_call_one,
- .async_call_one_comma,
- => {
- end_offset += 1; // async token
- n = tree.nodeData(n).node_and_opt_node[0];
- },
-
- .async_call,
- .async_call_comma,
- => {
- end_offset += 1; // async token
- n = tree.nodeData(n).node_and_extra[0];
- },
-
.container_field_init,
.container_field_align,
.container_field,
@@ -903,7 +888,6 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
.negation_wrap,
.address_of,
.@"try",
- .@"await",
.optional_type,
.@"suspend",
.@"resume",
@@ -1022,7 +1006,7 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
};
},
- .call, .async_call => {
+ .call => {
_, const extra_index = tree.nodeData(n).node_and_extra;
const params = tree.extraData(extra_index, Node.SubRange);
assert(params.start != params.end);
@@ -1041,7 +1025,6 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
}
},
.call_comma,
- .async_call_comma,
.tagged_union_enum_tag_trailing,
=> {
_, const extra_index = tree.nodeData(n).node_and_extra;
@@ -1122,7 +1105,6 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
n = @enumFromInt(tree.extra_data[@intFromEnum(range.end) - 1]); // last member
},
.call_one,
- .async_call_one,
=> {
_, const first_param = tree.nodeData(n).node_and_opt_node;
end_offset += 1; // for the rparen
@@ -1271,7 +1253,6 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
n = first_element;
},
.call_one_comma,
- .async_call_one_comma,
.struct_init_one_comma,
=> {
_, const first_field = tree.nodeData(n).node_and_opt_node;
@@ -1988,21 +1969,21 @@ pub fn forFull(tree: Ast, node: Node.Index) full.For {
pub fn callOne(tree: Ast, buffer: *[1]Node.Index, node: Node.Index) full.Call {
const fn_expr, const first_param = tree.nodeData(node).node_and_opt_node;
const params = loadOptionalNodesIntoBuffer(1, buffer, .{first_param});
- return tree.fullCallComponents(.{
+ return .{ .ast = .{
.lparen = tree.nodeMainToken(node),
.fn_expr = fn_expr,
.params = params,
- });
+ } };
}
pub fn callFull(tree: Ast, node: Node.Index) full.Call {
const fn_expr, const extra_index = tree.nodeData(node).node_and_extra;
const params = tree.extraDataSlice(tree.extraData(extra_index, Node.SubRange), Node.Index);
- return tree.fullCallComponents(.{
+ return .{ .ast = .{
.lparen = tree.nodeMainToken(node),
.fn_expr = fn_expr,
.params = params,
- });
+ } };
}
fn fullVarDeclComponents(tree: Ast, info: full.VarDecl.Components) full.VarDecl {
@@ -2336,18 +2317,6 @@ fn fullForComponents(tree: Ast, info: full.For.Components) full.For {
return result;
}
-fn fullCallComponents(tree: Ast, info: full.Call.Components) full.Call {
- var result: full.Call = .{
- .ast = info,
- .async_token = null,
- };
- const first_token = tree.firstToken(info.fn_expr);
- if (tree.isTokenPrecededByTags(first_token, &.{.keyword_async})) {
- result.async_token = first_token - 1;
- }
- return result;
-}
-
pub fn fullVarDecl(tree: Ast, node: Node.Index) ?full.VarDecl {
return switch (tree.nodeTag(node)) {
.global_var_decl => tree.globalVarDecl(node),
@@ -2488,8 +2457,8 @@ pub fn fullAsm(tree: Ast, node: Node.Index) ?full.Asm {
pub fn fullCall(tree: Ast, buffer: *[1]Ast.Node.Index, node: Node.Index) ?full.Call {
return switch (tree.nodeTag(node)) {
- .call, .call_comma, .async_call, .async_call_comma => tree.callFull(node),
- .call_one, .call_one_comma, .async_call_one, .async_call_one_comma => tree.callOne(buffer, node),
+ .call, .call_comma => tree.callFull(node),
+ .call_one, .call_one_comma => tree.callOne(buffer, node),
else => null,
};
}
@@ -2882,7 +2851,6 @@ pub const full = struct {
pub const Call = struct {
ast: Components,
- async_token: ?TokenIndex,
pub const Components = struct {
lparen: TokenIndex,
@@ -3301,8 +3269,6 @@ pub const Node = struct {
address_of,
/// `try expr`. The `main_token` field is the `try` token.
@"try",
- /// `await expr`. The `main_token` field is the `await` token.
- @"await",
/// `?expr`. The `main_token` field is the `?` token.
optional_type,
/// `[lhs]rhs`. The `main_token` field is the `[` token.
@@ -3498,17 +3464,6 @@ pub const Node = struct {
/// Same as `call_one` except there is known to be a trailing comma
/// before the final rparen.
call_one_comma,
- /// `async a(b)`, `async a()`.
- ///
- /// The `data` field is a `.node_and_opt_node`:
- /// 1. a `Node.Index` to the function expression.
- /// 2. a `Node.OptionalIndex` to the first argument, if any.
- ///
- /// The `main_token` field is the `(` token.
- async_call_one,
- /// Same as `async_call_one` except there is known to be a trailing
- /// comma before the final rparen.
- async_call_one_comma,
/// `a(b, c, d)`.
///
/// The `data` field is a `.node_and_extra`:
@@ -3521,18 +3476,6 @@ pub const Node = struct {
/// Same as `call` except there is known to be a trailing comma before
/// the final rparen.
call_comma,
- /// `async a(b, c, d)`.
- ///
- /// The `data` field is a `.node_and_extra`:
- /// 1. a `Node.Index` to the function expression.
- /// 2. a `ExtraIndex` to a `SubRange` that stores a `Node.Index` for
- /// each argument.
- ///
- /// The `main_token` field is the `(` token.
- async_call,
- /// Same as `async_call` except there is known to be a trailing comma
- /// before the final rparen.
- async_call_comma,
/// `switch(a) {}`.
///
/// The `data` field is a `.node_and_extra`:
diff --git a/lib/std/zig/AstGen.zig b/lib/std/zig/AstGen.zig
index e253729c3e..8cb2d34354 100644
--- a/lib/std/zig/AstGen.zig
+++ b/lib/std/zig/AstGen.zig
@@ -510,12 +510,8 @@ fn lvalExpr(gz: *GenZir, scope: *Scope, node: Ast.Node.Index) InnerError!Zir.Ins
.number_literal,
.call,
.call_comma,
- .async_call,
- .async_call_comma,
.call_one,
.call_one_comma,
- .async_call_one,
- .async_call_one_comma,
.unreachable_literal,
.@"return",
.@"if",
@@ -547,7 +543,6 @@ fn lvalExpr(gz: *GenZir, scope: *Scope, node: Ast.Node.Index) InnerError!Zir.Ins
.merge_error_sets,
.switch_range,
.for_range,
- .@"await",
.bit_not,
.negation,
.negation_wrap,
@@ -836,12 +831,8 @@ fn expr(gz: *GenZir, scope: *Scope, ri: ResultInfo, node: Ast.Node.Index) InnerE
.call_one,
.call_one_comma,
- .async_call_one,
- .async_call_one_comma,
.call,
.call_comma,
- .async_call,
- .async_call_comma,
=> {
var buf: [1]Ast.Node.Index = undefined;
return callExpr(gz, scope, ri, .none, node, tree.fullCall(&buf, node).?);
@@ -1114,7 +1105,6 @@ fn expr(gz: *GenZir, scope: *Scope, ri: ResultInfo, node: Ast.Node.Index) InnerE
.@"nosuspend" => return nosuspendExpr(gz, scope, ri, node),
.@"suspend" => return suspendExpr(gz, scope, node),
- .@"await" => return awaitExpr(gz, scope, ri, node),
.@"resume" => return resumeExpr(gz, scope, ri, node),
.@"try" => return tryExpr(gz, scope, ri, node, tree.nodeData(node).node),
@@ -1259,33 +1249,6 @@ fn suspendExpr(
return suspend_inst.toRef();
}
-fn awaitExpr(
- gz: *GenZir,
- scope: *Scope,
- ri: ResultInfo,
- node: Ast.Node.Index,
-) InnerError!Zir.Inst.Ref {
- const astgen = gz.astgen;
- const tree = astgen.tree;
- const rhs_node = tree.nodeData(node).node;
-
- if (gz.suspend_node.unwrap()) |suspend_node| {
- return astgen.failNodeNotes(node, "cannot await inside suspend block", .{}, &[_]u32{
- try astgen.errNoteNode(suspend_node, "suspend block here", .{}),
- });
- }
- const operand = try expr(gz, scope, .{ .rl = .ref }, rhs_node);
- const result = if (gz.nosuspend_node != .none)
- try gz.addExtendedPayload(.await_nosuspend, Zir.Inst.UnNode{
- .node = gz.nodeIndexToRelative(node),
- .operand = operand,
- })
- else
- try gz.addUnNode(.@"await", operand, node);
-
- return rvalue(gz, ri, result, node);
-}
-
fn resumeExpr(
gz: *GenZir,
scope: *Scope,
@@ -2853,7 +2816,6 @@ fn addEnsureResult(gz: *GenZir, maybe_unused_result: Zir.Inst.Ref, statement: As
.tag_name,
.type_name,
.frame_type,
- .frame_size,
.int_from_float,
.float_from_int,
.ptr_from_int,
@@ -2887,7 +2849,6 @@ fn addEnsureResult(gz: *GenZir, maybe_unused_result: Zir.Inst.Ref, statement: As
.min,
.c_import,
.@"resume",
- .@"await",
.ret_err_value_code,
.ret_ptr,
.ret_type,
@@ -9501,7 +9462,6 @@ fn builtinCall(
.tag_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .tag_name),
.type_name => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .type_name),
.Frame => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .frame_type),
- .frame_size => return simpleUnOp(gz, scope, ri, node, .{ .rl = .none }, params[0], .frame_size),
.int_from_float => return typeCast(gz, scope, ri, node, params[0], .int_from_float, builtin_name),
.float_from_int => return typeCast(gz, scope, ri, node, params[0], .float_from_int, builtin_name),
@@ -9767,16 +9727,6 @@ fn builtinCall(
});
return rvalue(gz, ri, result, node);
},
- .async_call => {
- const result = try gz.addExtendedPayload(.builtin_async_call, Zir.Inst.AsyncCall{
- .node = gz.nodeIndexToRelative(node),
- .frame_buffer = try expr(gz, scope, .{ .rl = .none }, params[0]),
- .result_ptr = try expr(gz, scope, .{ .rl = .none }, params[1]),
- .fn_ptr = try expr(gz, scope, .{ .rl = .none }, params[2]),
- .args = try expr(gz, scope, .{ .rl = .none }, params[3]),
- });
- return rvalue(gz, ri, result, node);
- },
.Vector => {
const result = try gz.addPlNode(.vector_type, node, Zir.Inst.Bin{
.lhs = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .u32_type } }, params[0], .type),
@@ -10175,11 +10125,8 @@ fn callExpr(
const callee = try calleeExpr(gz, scope, ri.rl, override_decl_literal_type, call.ast.fn_expr);
const modifier: std.builtin.CallModifier = blk: {
- if (call.async_token != null) {
- break :blk .async_kw;
- }
if (gz.nosuspend_node != .none) {
- break :blk .no_async;
+ break :blk .no_suspend;
}
break :blk .auto;
};
@@ -10483,12 +10430,8 @@ fn nodeMayEvalToError(tree: *const Ast, start_node: Ast.Node.Index) BuiltinFn.Ev
.switch_comma,
.call_one,
.call_one_comma,
- .async_call_one,
- .async_call_one_comma,
.call,
.call_comma,
- .async_call,
- .async_call_comma,
=> return .maybe,
.@"return",
@@ -10613,7 +10556,6 @@ fn nodeMayEvalToError(tree: *const Ast, start_node: Ast.Node.Index) BuiltinFn.Ev
// Forward the question to the LHS sub-expression.
.@"try",
- .@"await",
.@"comptime",
.@"nosuspend",
=> node = tree.nodeData(node).node,
@@ -10803,12 +10745,8 @@ fn nodeImpliesMoreThanOnePossibleValue(tree: *const Ast, start_node: Ast.Node.In
.switch_comma,
.call_one,
.call_one_comma,
- .async_call_one,
- .async_call_one_comma,
.call,
.call_comma,
- .async_call,
- .async_call_comma,
.block_two,
.block_two_semicolon,
.block,
@@ -10826,7 +10764,6 @@ fn nodeImpliesMoreThanOnePossibleValue(tree: *const Ast, start_node: Ast.Node.In
// Forward the question to the LHS sub-expression.
.@"try",
- .@"await",
.@"comptime",
.@"nosuspend",
=> node = tree.nodeData(node).node,
@@ -11047,12 +10984,8 @@ fn nodeImpliesComptimeOnly(tree: *const Ast, start_node: Ast.Node.Index) bool {
.switch_comma,
.call_one,
.call_one_comma,
- .async_call_one,
- .async_call_one_comma,
.call,
.call_comma,
- .async_call,
- .async_call_comma,
.block_two,
.block_two_semicolon,
.block,
@@ -11079,7 +11012,6 @@ fn nodeImpliesComptimeOnly(tree: *const Ast, start_node: Ast.Node.Index) bool {
// Forward the question to the LHS sub-expression.
.@"try",
- .@"await",
.@"comptime",
.@"nosuspend",
=> node = tree.nodeData(node).node,
diff --git a/lib/std/zig/AstRlAnnotate.zig b/lib/std/zig/AstRlAnnotate.zig
index 628574349b..aeb7c82f77 100644
--- a/lib/std/zig/AstRlAnnotate.zig
+++ b/lib/std/zig/AstRlAnnotate.zig
@@ -334,12 +334,8 @@ fn expr(astrl: *AstRlAnnotate, node: Ast.Node.Index, block: ?*Block, ri: ResultI
.call_one,
.call_one_comma,
- .async_call_one,
- .async_call_one_comma,
.call,
.call_comma,
- .async_call,
- .async_call_comma,
=> {
var buf: [1]Ast.Node.Index = undefined;
const full = tree.fullCall(&buf, node).?;
@@ -353,11 +349,6 @@ fn expr(astrl: *AstRlAnnotate, node: Ast.Node.Index, block: ?*Block, ri: ResultI
.call,
.call_comma,
=> false, // TODO: once function calls are passed result locations this will change
- .async_call_one,
- .async_call_one_comma,
- .async_call,
- .async_call_comma,
- => ri.have_ptr, // always use result ptr for frames
else => unreachable,
};
},
@@ -503,7 +494,6 @@ fn expr(astrl: *AstRlAnnotate, node: Ast.Node.Index, block: ?*Block, ri: ResultI
return false;
},
.@"try",
- .@"await",
.@"nosuspend",
=> return astrl.expr(tree.nodeData(node).node, block, ri),
.grouped_expression,
@@ -948,7 +938,6 @@ fn builtinCall(astrl: *AstRlAnnotate, block: ?*Block, ri: ResultInfo, node: Ast.
.tag_name,
.type_name,
.Frame,
- .frame_size,
.int_from_float,
.float_from_int,
.ptr_from_int,
@@ -1079,13 +1068,6 @@ fn builtinCall(astrl: *AstRlAnnotate, block: ?*Block, ri: ResultInfo, node: Ast.
_ = try astrl.expr(args[3], block, ResultInfo.none);
return false;
},
- .async_call => {
- _ = try astrl.expr(args[0], block, ResultInfo.none);
- _ = try astrl.expr(args[1], block, ResultInfo.none);
- _ = try astrl.expr(args[2], block, ResultInfo.none);
- _ = try astrl.expr(args[3], block, ResultInfo.none);
- return false; // buffer passed as arg for frame data
- },
.Vector => {
_ = try astrl.expr(args[0], block, ResultInfo.type_only);
_ = try astrl.expr(args[1], block, ResultInfo.type_only);
diff --git a/lib/std/zig/BuiltinFn.zig b/lib/std/zig/BuiltinFn.zig
index 818362a371..5ef28fdfaf 100644
--- a/lib/std/zig/BuiltinFn.zig
+++ b/lib/std/zig/BuiltinFn.zig
@@ -4,7 +4,6 @@ pub const Tag = enum {
align_cast,
align_of,
as,
- async_call,
atomic_load,
atomic_rmw,
atomic_store,
@@ -55,7 +54,6 @@ pub const Tag = enum {
frame,
Frame,
frame_address,
- frame_size,
has_decl,
has_field,
import,
@@ -185,13 +183,6 @@ pub const list = list: {
},
},
.{
- "@asyncCall",
- .{
- .tag = .async_call,
- .param_count = 4,
- },
- },
- .{
"@atomicLoad",
.{
.tag = .atomic_load,
@@ -551,13 +542,6 @@ pub const list = list: {
},
},
.{
- "@frameSize",
- .{
- .tag = .frame_size,
- .param_count = 1,
- },
- },
- .{
"@hasDecl",
.{
.tag = .has_decl,
diff --git a/lib/std/zig/Parse.zig b/lib/std/zig/Parse.zig
index 34f8de9191..8d6ea5afac 100644
--- a/lib/std/zig/Parse.zig
+++ b/lib/std/zig/Parse.zig
@@ -1688,7 +1688,6 @@ fn parseExprPrecedence(p: *Parse, min_prec: i32) Error!?Node.Index {
/// / MINUSPERCENT
/// / AMPERSAND
/// / KEYWORD_try
-/// / KEYWORD_await
fn parsePrefixExpr(p: *Parse) Error!?Node.Index {
const tag: Node.Tag = switch (p.tokenTag(p.tok_i)) {
.bang => .bool_not,
@@ -1697,7 +1696,6 @@ fn parsePrefixExpr(p: *Parse) Error!?Node.Index {
.minus_percent => .negation_wrap,
.ampersand => .address_of,
.keyword_try => .@"try",
- .keyword_await => .@"await",
else => return p.parsePrimaryExpr(),
};
return try p.addNode(.{
@@ -2385,62 +2383,12 @@ fn parseErrorUnionExpr(p: *Parse) !?Node.Index {
}
/// SuffixExpr
-/// <- KEYWORD_async PrimaryTypeExpr SuffixOp* FnCallArguments
-/// / PrimaryTypeExpr (SuffixOp / FnCallArguments)*
+/// <- PrimaryTypeExpr (SuffixOp / FnCallArguments)*
///
/// FnCallArguments <- LPAREN ExprList RPAREN
///
/// ExprList <- (Expr COMMA)* Expr?
fn parseSuffixExpr(p: *Parse) !?Node.Index {
- if (p.eatToken(.keyword_async)) |_| {
- var res = try p.expectPrimaryTypeExpr();
- while (true) {
- res = try p.parseSuffixOp(res) orelse break;
- }
- const lparen = p.eatToken(.l_paren) orelse {
- try p.warn(.expected_param_list);
- return res;
- };
- const scratch_top = p.scratch.items.len;
- defer p.scratch.shrinkRetainingCapacity(scratch_top);
- while (true) {
- if (p.eatToken(.r_paren)) |_| break;
- const param = try p.expectExpr();
- try p.scratch.append(p.gpa, param);
- switch (p.tokenTag(p.tok_i)) {
- .comma => p.tok_i += 1,
- .r_paren => {
- p.tok_i += 1;
- break;
- },
- .colon, .r_brace, .r_bracket => return p.failExpected(.r_paren),
- // Likely just a missing comma; give error but continue parsing.
- else => try p.warn(.expected_comma_after_arg),
- }
- }
- const comma = (p.tokenTag(p.tok_i - 2)) == .comma;
- const params = p.scratch.items[scratch_top..];
- if (params.len <= 1) {
- return try p.addNode(.{
- .tag = if (comma) .async_call_one_comma else .async_call_one,
- .main_token = lparen,
- .data = .{ .node_and_opt_node = .{
- res,
- if (params.len >= 1) params[0].toOptional() else .none,
- } },
- });
- } else {
- return try p.addNode(.{
- .tag = if (comma) .async_call_comma else .async_call,
- .main_token = lparen,
- .data = .{ .node_and_extra = .{
- res,
- try p.addExtra(try p.listToSpan(params)),
- } },
- });
- }
- }
-
var res = try p.parsePrimaryTypeExpr() orelse return null;
while (true) {
const opt_suffix_op = try p.parseSuffixOp(res);
diff --git a/lib/std/zig/Zir.zig b/lib/std/zig/Zir.zig
index 17643e6f1e..80eb3ec890 100644
--- a/lib/std/zig/Zir.zig
+++ b/lib/std/zig/Zir.zig
@@ -899,8 +899,6 @@ pub const Inst = struct {
type_name,
/// Implement builtin `@Frame`. Uses `un_node`.
frame_type,
- /// Implement builtin `@frameSize`. Uses `un_node`.
- frame_size,
/// Implements the `@intFromFloat` builtin.
/// Uses `pl_node` with payload `Bin`. `lhs` is dest type, `rhs` is operand.
@@ -1044,7 +1042,6 @@ pub const Inst = struct {
/// Implements `resume` syntax. Uses `un_node` field.
@"resume",
- @"await",
/// A defer statement.
/// Uses the `defer` union field.
@@ -1241,7 +1238,6 @@ pub const Inst = struct {
.tag_name,
.type_name,
.frame_type,
- .frame_size,
.int_from_float,
.float_from_int,
.ptr_from_int,
@@ -1279,7 +1275,6 @@ pub const Inst = struct {
.min,
.c_import,
.@"resume",
- .@"await",
.ret_err_value_code,
.extended,
.ret_ptr,
@@ -1526,7 +1521,6 @@ pub const Inst = struct {
.tag_name,
.type_name,
.frame_type,
- .frame_size,
.int_from_float,
.float_from_int,
.ptr_from_int,
@@ -1560,7 +1554,6 @@ pub const Inst = struct {
.min,
.c_import,
.@"resume",
- .@"await",
.ret_err_value_code,
.@"break",
.break_inline,
@@ -1791,7 +1784,6 @@ pub const Inst = struct {
.tag_name = .un_node,
.type_name = .un_node,
.frame_type = .un_node,
- .frame_size = .un_node,
.int_from_float = .pl_node,
.float_from_int = .pl_node,
@@ -1852,7 +1844,6 @@ pub const Inst = struct {
.make_ptr_const = .un_node,
.@"resume" = .un_node,
- .@"await" = .un_node,
.@"defer" = .@"defer",
.defer_err_code = .defer_err_code,
@@ -2016,8 +2007,6 @@ pub const Inst = struct {
/// Implements the `@errorCast` builtin.
/// `operand` is payload index to `BinNode`. `lhs` is dest type, `rhs` is operand.
error_cast,
- /// `operand` is payload index to `UnNode`.
- await_nosuspend,
/// Implements `@breakpoint`.
/// `operand` is `src_node: Ast.Node.Offset`.
breakpoint,
@@ -2038,9 +2027,6 @@ pub const Inst = struct {
/// `operand` is payload index to `Reify`.
/// `small` contains `NameStrategy`.
reify,
- /// Implements the `@asyncCall` builtin.
- /// `operand` is payload index to `AsyncCall`.
- builtin_async_call,
/// Implements the `@cmpxchgStrong` and `@cmpxchgWeak` builtins.
/// `small` 0=>weak 1=>strong
/// `operand` is payload index to `Cmpxchg`.
@@ -3771,14 +3757,6 @@ pub const Inst = struct {
b: Ref,
};
- pub const AsyncCall = struct {
- node: Ast.Node.Offset,
- frame_buffer: Ref,
- result_ptr: Ref,
- fn_ptr: Ref,
- args: Ref,
- };
-
/// Trailing: inst: Index // for every body_len
pub const Param = struct {
/// Null-terminated string index.
@@ -4297,7 +4275,6 @@ fn findTrackableInner(
.tag_name,
.type_name,
.frame_type,
- .frame_size,
.int_from_float,
.float_from_int,
.ptr_from_int,
@@ -4337,7 +4314,6 @@ fn findTrackableInner(
.resolve_inferred_alloc,
.make_ptr_const,
.@"resume",
- .@"await",
.save_err_ret_index,
.restore_err_ret_index_unconditional,
.restore_err_ret_index_fn_entry,
@@ -4380,14 +4356,12 @@ fn findTrackableInner(
.prefetch,
.set_float_mode,
.error_cast,
- .await_nosuspend,
.breakpoint,
.disable_instrumentation,
.disable_intrinsics,
.select,
.int_from_error,
.error_from_int,
- .builtin_async_call,
.cmpxchg,
.c_va_arg,
.c_va_copy,
diff --git a/lib/std/zig/ZonGen.zig b/lib/std/zig/ZonGen.zig
index 2114260e84..47fd52ca2a 100644
--- a/lib/std/zig/ZonGen.zig
+++ b/lib/std/zig/ZonGen.zig
@@ -204,12 +204,8 @@ fn expr(zg: *ZonGen, node: Ast.Node.Index, dest_node: Zoir.Node.Index) Allocator
.call_one,
.call_one_comma,
- .async_call_one,
- .async_call_one_comma,
.call,
.call_comma,
- .async_call,
- .async_call_comma,
.@"return",
.if_simple,
.@"if",
@@ -226,7 +222,6 @@ fn expr(zg: *ZonGen, node: Ast.Node.Index, dest_node: Zoir.Node.Index) Allocator
.switch_comma,
.@"nosuspend",
.@"suspend",
- .@"await",
.@"resume",
.@"try",
.unreachable_literal,
diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig
index 267459b4cf..c1cc3da2d9 100644
--- a/lib/std/zig/parser_test.zig
+++ b/lib/std/zig/parser_test.zig
@@ -341,15 +341,6 @@ test "zig fmt: nosuspend block" {
);
}
-test "zig fmt: nosuspend await" {
- try testCanonical(
- \\fn foo() void {
- \\ x = nosuspend await y;
- \\}
- \\
- );
-}
-
test "zig fmt: container declaration, single line" {
try testCanonical(
\\const X = struct { foo: i32 };
@@ -1093,18 +1084,6 @@ test "zig fmt: block in slice expression" {
);
}
-test "zig fmt: async function" {
- try testCanonical(
- \\pub const Server = struct {
- \\ handleRequestFn: fn (*Server, *const std.net.Address, File) callconv(.@"async") void,
- \\};
- \\test "hi" {
- \\ var ptr: fn (i32) callconv(.@"async") void = @ptrCast(other);
- \\}
- \\
- );
-}
-
test "zig fmt: whitespace fixes" {
try testTransform("test \"\" {\r\n\tconst hi = x;\r\n}\n// zig fmt: off\ntest \"\"{\r\n\tconst a = b;}\r\n",
\\test "" {
@@ -1549,17 +1528,6 @@ test "zig fmt: spaces around slice operator" {
);
}
-test "zig fmt: async call in if condition" {
- try testCanonical(
- \\comptime {
- \\ if (async b()) {
- \\ a();
- \\ }
- \\}
- \\
- );
-}
-
test "zig fmt: 2nd arg multiline string" {
try testCanonical(
\\comptime {
@@ -3946,27 +3914,6 @@ test "zig fmt: inline asm" {
);
}
-test "zig fmt: async functions" {
- try testCanonical(
- \\fn simpleAsyncFn() void {
- \\ const a = async a.b();
- \\ x += 1;
- \\ suspend {}
- \\ x += 1;
- \\ suspend {}
- \\ const p: anyframe->void = async simpleAsyncFn() catch unreachable;
- \\ await p;
- \\}
- \\
- \\test "suspend, resume, await" {
- \\ const p: anyframe = async testAsyncSeq();
- \\ resume p;
- \\ await p;
- \\}
- \\
- );
-}
-
test "zig fmt: nosuspend" {
try testCanonical(
\\const a = nosuspend foo();
@@ -6181,29 +6128,6 @@ test "recovery: missing return type" {
});
}
-test "recovery: continue after invalid decl" {
- try testError(
- \\fn foo {
- \\ inline;
- \\}
- \\pub test "" {
- \\ async a & b;
- \\}
- , &[_]Error{
- .expected_token,
- .expected_pub_item,
- .expected_param_list,
- });
- try testError(
- \\threadlocal test "" {
- \\ @a & b;
- \\}
- , &[_]Error{
- .expected_var_decl,
- .expected_param_list,
- });
-}
-
test "recovery: invalid extern/inline" {
try testError(
\\inline test "" { a & b; }
diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig
index 994c6aa2cd..dc6a9a275c 100644
--- a/lib/std/zig/render.zig
+++ b/lib/std/zig/render.zig
@@ -591,7 +591,6 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
.@"try",
.@"resume",
- .@"await",
=> {
try renderToken(r, tree.nodeMainToken(node), .space);
return renderExpression(r, tree.nodeData(node).node, space);
@@ -635,12 +634,8 @@ fn renderExpression(r: *Render, node: Ast.Node.Index, space: Space) Error!void {
.call_one,
.call_one_comma,
- .async_call_one,
- .async_call_one_comma,
.call,
.call_comma,
- .async_call,
- .async_call_comma,
=> {
var buf: [1]Ast.Node.Index = undefined;
return renderCall(r, tree.fullCall(&buf, node).?, space);
@@ -2551,9 +2546,6 @@ fn renderCall(
call: Ast.full.Call,
space: Space,
) Error!void {
- if (call.async_token) |async_token| {
- try renderToken(r, async_token, .space);
- }
try renderExpression(r, call.ast.fn_expr, .none);
try renderParamList(r, call.ast.lparen, call.ast.params, space);
}
diff --git a/lib/std/zig/tokenizer.zig b/lib/std/zig/tokenizer.zig
index 09c79d3562..4b2f7f0915 100644
--- a/lib/std/zig/tokenizer.zig
+++ b/lib/std/zig/tokenizer.zig
@@ -17,8 +17,6 @@ pub const Token = struct {
.{ "anyframe", .keyword_anyframe },
.{ "anytype", .keyword_anytype },
.{ "asm", .keyword_asm },
- .{ "async", .keyword_async },
- .{ "await", .keyword_await },
.{ "break", .keyword_break },
.{ "callconv", .keyword_callconv },
.{ "catch", .keyword_catch },
@@ -146,8 +144,6 @@ pub const Token = struct {
keyword_anyframe,
keyword_anytype,
keyword_asm,
- keyword_async,
- keyword_await,
keyword_break,
keyword_callconv,
keyword_catch,
@@ -273,8 +269,6 @@ pub const Token = struct {
.keyword_anyframe => "anyframe",
.keyword_anytype => "anytype",
.keyword_asm => "asm",
- .keyword_async => "async",
- .keyword_await => "await",
.keyword_break => "break",
.keyword_callconv => "callconv",
.keyword_catch => "catch",