From d84055f9c69986f60087cf1a37f895362725f88d Mon Sep 17 00:00:00 2001 From: Techatrix Date: Mon, 24 Feb 2025 18:25:30 +0100 Subject: [PATCH] std.zig.Ast: don't set the `data` field on `.error_value` and `.enum_literal` The main_token already has the necessary information. --- lib/std/zig/Ast.zig | 8 +++----- lib/std/zig/AstGen.zig | 4 ++-- lib/std/zig/Parse.zig | 18 +++++++++--------- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/lib/std/zig/Ast.zig b/lib/std/zig/Ast.zig index 0408e8eb93..ded278aeb2 100644 --- a/lib/std/zig/Ast.zig +++ b/lib/std/zig/Ast.zig @@ -1000,7 +1000,7 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex { .grouped_expression, .asm_input => return tree.nodeData(n).node_and_token[1] + end_offset, .multiline_string_literal => return tree.nodeData(n).token_and_token[1] + end_offset, .asm_output => return tree.nodeData(n).opt_node_and_token[1] + end_offset, - .error_value => return tree.nodeData(n).opt_token_and_opt_token[1].unwrap().? + end_offset, + .error_value => return tree.nodeMainToken(n) + 2 + end_offset, .anyframe_literal, .char_literal, @@ -3713,7 +3713,7 @@ pub const Node = struct { identifier, /// `.foo`. /// - /// The `data` field is a `.token` to the `.`. + /// The `data` field is unused. /// /// The `main_token` field is the identifier. enum_literal, @@ -3930,9 +3930,7 @@ pub const Node = struct { asm_input, /// `error.a`. /// - /// The `data` field is a `.opt_token_and_opt_token`: - /// 1. a `OptionalTokenIndex` of `.`. Can't be `.none` unless a parsing error occured. - /// 2. a `OptionalTokenIndex` of `a`. Can't be `.none` unless a parsing error occured. + /// The `data` field is unused. /// /// The `main_token` field is `error` token. error_value, diff --git a/lib/std/zig/AstGen.zig b/lib/std/zig/AstGen.zig index d07da91df3..bb46360bc2 100644 --- a/lib/std/zig/AstGen.zig +++ b/lib/std/zig/AstGen.zig @@ -1012,7 +1012,7 @@ fn expr(gz: *GenZir, scope: *Scope, ri: ResultInfo, node: Ast.Node.Index) InnerE .ref_coerced_ty, .ptr, .inferred_ptr, .destructure => return rvalue(gz, ri, res, node), } } else return simpleStrTok(gz, ri, tree.nodeMainToken(node), node, .enum_literal), - .error_value => return simpleStrTok(gz, ri, tree.nodeData(node).opt_token_and_opt_token[1].unwrap().?, node, .error_value), + .error_value => return simpleStrTok(gz, ri, tree.nodeMainToken(node) + 2, node, .error_value), // TODO restore this when implementing https://github.com/ziglang/zig/issues/6025 // .anyframe_literal => return rvalue(gz, ri, .anyframe_type, node), .anyframe_literal => { @@ -8184,7 +8184,7 @@ fn ret(gz: *GenZir, scope: *Scope, node: Ast.Node.Index) InnerError!Zir.Inst.Ref if (tree.nodeTag(operand_node) == .error_value) { // Hot path for `return error.Foo`. This bypasses result location logic as well as logic // for detecting whether to add something to the function's inferred error set. - const ident_token = tree.nodeData(operand_node).opt_token_and_opt_token[1].unwrap().?; + const ident_token = tree.nodeMainToken(operand_node) + 2; const err_name_str_index = try astgen.identAsString(ident_token); const defer_counts = countDefers(defer_outer, scope); if (!defer_counts.need_err_code) { diff --git a/lib/std/zig/Parse.zig b/lib/std/zig/Parse.zig index db0abe9204..ae252bf637 100644 --- a/lib/std/zig/Parse.zig +++ b/lib/std/zig/Parse.zig @@ -2647,11 +2647,14 @@ fn parsePrimaryTypeExpr(p: *Parse) !?Node.Index { .keyword_for => return try p.parseFor(expectTypeExpr), .keyword_while => return try p.parseWhileTypeExpr(), .period => switch (p.tokenTag(p.tok_i + 1)) { - .identifier => return try p.addNode(.{ - .tag = .enum_literal, - .data = .{ .token = p.nextToken() }, // dot - .main_token = p.nextToken(), // identifier - }), + .identifier => { + p.tok_i += 1; + return try p.addNode(.{ + .tag = .enum_literal, + .main_token = p.nextToken(), // identifier + .data = undefined, + }); + }, .l_brace => { const lbrace = p.tok_i + 1; p.tok_i = lbrace + 1; @@ -2772,10 +2775,7 @@ fn parsePrimaryTypeExpr(p: *Parse) !?Node.Index { return try p.addNode(.{ .tag = .error_value, .main_token = main_token, - .data = .{ .opt_token_and_opt_token = .{ - .fromOptional(period), - .fromOptional(identifier), - } }, + .data = undefined, }); }, },