From 4cea15f12bdaf1603d60cf80e767dd8f2bb48b26 Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Tue, 22 Nov 2022 13:28:04 +0200 Subject: std.zig.Ast: simplify usage of tuple_like container fields --- src/AstGen.zig | 45 ++++++++++----------------------------------- 1 file changed, 10 insertions(+), 35 deletions(-) (limited to 'src') diff --git a/src/AstGen.zig b/src/AstGen.zig index ea0e0f0b53..ddcdcf26a1 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -4499,21 +4499,15 @@ fn structDeclInner( .decl => continue, .field => |field| field, }; - if (member.ast.tuple_like and !is_tuple and member.ast.type_expr != 0 and - astgen.tree.nodes.items(.tag)[member.ast.type_expr] == .identifier) - { - const ident = astgen.tree.nodes.items(.main_token)[member.ast.type_expr]; - member.ast.tuple_like = false; - member.ast.main_token = ident; - member.ast.type_expr = 0; - } else if (is_tuple and !member.ast.tuple_like) { - return astgen.failTok(member.ast.main_token, "tuple field has a name", .{}); - } if (!is_tuple) { - if (member.ast.tuple_like) return astgen.failTok(member.ast.main_token, "struct field missing name", .{}); + member.convertToNonTupleLike(astgen.tree.nodes); + assert(!member.ast.tuple_like); + const field_name = try astgen.identAsString(member.ast.main_token); wip_members.appendToField(field_name); + } else if (!member.ast.tuple_like) { + return astgen.failTok(member.ast.main_token, "tuple field has a name", .{}); } const doc_comment_index = try astgen.docCommentAsString(member.firstToken()); @@ -4683,14 +4677,8 @@ fn unionDeclInner( .decl => continue, .field => |field| field, }; - if (member.ast.tuple_like and member.ast.type_expr != 0 and - astgen.tree.nodes.items(.tag)[member.ast.type_expr] == .identifier) - { - const ident = astgen.tree.nodes.items(.main_token)[member.ast.type_expr]; - member.ast.tuple_like = false; - member.ast.main_token = ident; - member.ast.type_expr = 0; - } else if (member.ast.tuple_like) { + member.convertToNonTupleLike(astgen.tree.nodes); + if (member.ast.tuple_like) { return astgen.failTok(member.ast.main_token, "union field missing name", .{}); } if (member.comptime_token) |comptime_token| { @@ -4845,14 +4833,8 @@ fn containerDecl( continue; }, }; - if (member.ast.tuple_like and member.ast.type_expr != 0 and - astgen.tree.nodes.items(.tag)[member.ast.type_expr] == .identifier) - { - const ident = astgen.tree.nodes.items(.main_token)[member.ast.type_expr]; - member.ast.tuple_like = false; - member.ast.main_token = ident; - member.ast.type_expr = 0; - } else if (member.ast.tuple_like) { + member.convertToNonTupleLike(astgen.tree.nodes); + if (member.ast.tuple_like) { return astgen.failTok(member.ast.main_token, "enum field missing name", .{}); } if (member.comptime_token) |comptime_token| { @@ -4978,14 +4960,7 @@ fn containerDecl( .decl => continue, .field => |field| field, }; - if (member.ast.tuple_like and member.ast.type_expr != 0 and - astgen.tree.nodes.items(.tag)[member.ast.type_expr] == .identifier) - { - const ident = astgen.tree.nodes.items(.main_token)[member.ast.type_expr]; - member.ast.tuple_like = false; - member.ast.main_token = ident; - member.ast.type_expr = 0; - } + member.convertToNonTupleLike(astgen.tree.nodes); assert(member.comptime_token == null); assert(member.ast.type_expr == 0); assert(member.ast.align_expr == 0); -- cgit v1.2.3