Commit d84055f9c6

Techatrix <techatrix@mailbox.org>
2025-02-24 18:25:30
std.zig.Ast: don't set the `data` field on `.error_value` and `.enum_literal`
The main_token already has the necessary information.
1 parent ba74af2
Changed files (3)
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,
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) {
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,
                 });
             },
         },