aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Schmidt <john.schmidt.h@gmail.com>2022-03-20 13:47:03 +0100
committerJohn Schmidt <john.schmidt.h@gmail.com>2022-04-03 13:49:34 +0200
commite4d427f12e2052e9bcd6af40e7ddbc4e544451e6 (patch)
treef7f634c62d64cd5d174f193af0f12101de1967e1
parentb922caf1691111e5c23f01afbe1f1c9b5104807b (diff)
downloadzig-e4d427f12e2052e9bcd6af40e7ddbc4e544451e6.tar.gz
zig-e4d427f12e2052e9bcd6af40e7ddbc4e544451e6.zip
refactor: add Sema.addFieldErrNote
-rw-r--r--src/Sema.zig30
1 files changed, 18 insertions, 12 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 4e8acb0030..fb37f3f1ba 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -1589,6 +1589,21 @@ fn errNote(
return sema.mod.errNoteNonLazy(src.toSrcLoc(block.src_decl), parent, format, args);
}
+fn addFieldErrNote(
+ sema: *Sema,
+ block: *Block,
+ container_ty: Type,
+ field_index: usize,
+ parent: *Module.ErrorMsg,
+ comptime format: []const u8,
+ args: anytype,
+) !void {
+ const decl = container_ty.getOwnerDecl();
+ const tree = try sema.getAstTree(block);
+ const field_src = enumFieldSrcLoc(decl, tree.*, container_ty.getNodeOffset(), field_index);
+ try sema.mod.errNoteNonLazy(field_src.toSrcLoc(decl), parent, format, args);
+}
+
fn errMsg(
sema: *Sema,
block: *Block,
@@ -19603,10 +19618,7 @@ fn coerceEnumToUnion(
});
errdefer msg.destroy(sema.gpa);
- const tree = try sema.getAstTree(block);
- const union_decl = union_obj.owner_decl;
- const field_src = enumFieldSrcLoc(union_decl, tree.*, union_obj.node_offset, field_index);
- try sema.mod.errNoteNonLazy(field_src.toSrcLoc(union_decl), msg, "field '{s}' declared here", .{field_name});
+ try sema.addFieldErrNote(block, union_ty, field_index, msg, "field '{s}' declared here", .{field_name});
try sema.addDeclaredHereNote(msg, union_ty);
break :msg msg;
};
@@ -19648,15 +19660,12 @@ fn coerceEnumToUnion(
);
errdefer msg.destroy(sema.gpa);
- const tree = try sema.getAstTree(block);
- const union_decl = union_obj.owner_decl;
var it = union_obj.fields.iterator();
var field_index: usize = 0;
while (it.next()) |field| {
const field_name = field.key_ptr.*;
const field_ty = field.value_ptr.ty;
- const field_src = enumFieldSrcLoc(union_decl, tree.*, union_obj.node_offset, field_index);
- try sema.mod.errNoteNonLazy(field_src.toSrcLoc(union_decl), msg, "field '{s}' has type '{}'", .{ field_name, field_ty.fmt(target) });
+ try sema.addFieldErrNote(block, union_ty, field_index, msg, "field '{s}' has type '{}'", .{ field_name, field_ty.fmt(target) });
field_index += 1;
}
try sema.addDeclaredHereNote(msg, union_ty);
@@ -22229,12 +22238,9 @@ fn semaUnionFields(block: *Block, mod: *Module, union_obj: *Module.Union) Compil
errdefer msg.destroy(sema.gpa);
const enum_ty = union_obj.tag_ty;
- const tree = try sema.getAstTree(block);
- const enum_decl = enum_ty.getOwnerDecl();
for (names.keys()) |field_name| {
const field_index = enum_ty.enumFieldIndex(field_name).?;
- const field_src = enumFieldSrcLoc(enum_decl, tree.*, enum_ty.getNodeOffset(), field_index);
- try sema.mod.errNoteNonLazy(field_src.toSrcLoc(enum_decl), msg, "field '{s}' missing, declared here", .{field_name});
+ try sema.addFieldErrNote(block, enum_ty, field_index, msg, "field '{s}' missing, declared here", .{field_name});
}
try sema.addDeclaredHereNote(msg, union_obj.tag_ty);
break :msg msg;