diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2025-07-07 11:22:28 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2025-07-07 13:39:16 -0700 |
| commit | 40d11cc25a469dc6bb0f9fbba4d05e7210a23b3f (patch) | |
| tree | 8f3ece572204f0ae02efe5f07581530db302dc1b /lib | |
| parent | 31e46be74360f7bf6509bd8826690318974175c0 (diff) | |
| download | zig-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.zig | 5 | ||||
| -rw-r--r-- | lib/docs/wasm/Walk.zig | 9 | ||||
| -rw-r--r-- | lib/docs/wasm/html_render.zig | 2 | ||||
| -rw-r--r-- | lib/std/builtin.zig | 13 | ||||
| -rw-r--r-- | lib/std/zig/Ast.zig | 71 | ||||
| -rw-r--r-- | lib/std/zig/AstGen.zig | 70 | ||||
| -rw-r--r-- | lib/std/zig/AstRlAnnotate.zig | 18 | ||||
| -rw-r--r-- | lib/std/zig/BuiltinFn.zig | 16 | ||||
| -rw-r--r-- | lib/std/zig/Parse.zig | 54 | ||||
| -rw-r--r-- | lib/std/zig/Zir.zig | 26 | ||||
| -rw-r--r-- | lib/std/zig/ZonGen.zig | 5 | ||||
| -rw-r--r-- | lib/std/zig/parser_test.zig | 76 | ||||
| -rw-r--r-- | lib/std/zig/render.zig | 8 | ||||
| -rw-r--r-- | lib/std/zig/tokenizer.zig | 6 |
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", |
