| ... | @@ -4723,14 +4723,36 @@ fn errorSetDecl(gz: *GenZir, rl: ResultLoc, node: Ast.Node.Index) InnerError!Zir | ... | @@ -4723,14 +4723,36 @@ fn errorSetDecl(gz: *GenZir, rl: ResultLoc, node: Ast.Node.Index) InnerError!Zir |
| 4723 | const payload_index = try reserveExtra(astgen, @typeInfo(Zir.Inst.ErrorSetDecl).Struct.fields.len); | 4723 | const payload_index = try reserveExtra(astgen, @typeInfo(Zir.Inst.ErrorSetDecl).Struct.fields.len); |
| 4724 | var fields_len: usize = 0; | 4724 | var fields_len: usize = 0; |
| 4725 | { | 4725 | { |
| | 4726 | var idents: std.AutoHashMapUnmanaged(u32, Ast.TokenIndex) = .{}; |
| | 4727 | defer idents.deinit(gpa); |
| | 4728 | |
| 4726 | const error_token = main_tokens[node]; | 4729 | const error_token = main_tokens[node]; |
| 4727 | var tok_i = error_token + 2; | 4730 | var tok_i = error_token + 2; |
| 4728 | while (true) : (tok_i += 1) { | 4731 | while (true) : (tok_i += 1) { |
| 4729 | switch (token_tags[tok_i]) { | 4732 | switch (token_tags[tok_i]) { |
| 4730 | .doc_comment, .comma => {}, | 4733 | .doc_comment, .comma => {}, |
| 4731 | .identifier => { | 4734 | .identifier => { |
| 4732 | try astgen.extra.ensureUnusedCapacity(gpa, 2); | | |
| 4733 | const str_index = try astgen.identAsString(tok_i); | 4735 | const str_index = try astgen.identAsString(tok_i); |
| | 4736 | const gop = try idents.getOrPut(gpa, str_index); |
| | 4737 | if (gop.found_existing) { |
| | 4738 | const name = try gpa.dupe(u8, mem.span(astgen.nullTerminatedString(str_index))); |
| | 4739 | defer gpa.free(name); |
| | 4740 | return astgen.failTokNotes( |
| | 4741 | tok_i, |
| | 4742 | "duplicate error set field '{s}'", |
| | 4743 | .{name}, |
| | 4744 | &[_]u32{ |
| | 4745 | try astgen.errNoteTok( |
| | 4746 | gop.value_ptr.*, |
| | 4747 | "previous declaration here", |
| | 4748 | .{}, |
| | 4749 | ), |
| | 4750 | }, |
| | 4751 | ); |
| | 4752 | } |
| | 4753 | gop.value_ptr.* = tok_i; |
| | 4754 | |
| | 4755 | try astgen.extra.ensureUnusedCapacity(gpa, 2); |
| 4734 | astgen.extra.appendAssumeCapacity(str_index); | 4756 | astgen.extra.appendAssumeCapacity(str_index); |
| 4735 | const doc_comment_index = try astgen.docCommentAsString(tok_i); | 4757 | const doc_comment_index = try astgen.docCommentAsString(tok_i); |
| 4736 | astgen.extra.appendAssumeCapacity(doc_comment_index); | 4758 | astgen.extra.appendAssumeCapacity(doc_comment_index); |