authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-06-11 22:56:32+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-06-11 23:12:52+03:00
log95ab942184427e7c9b840d71f4d093931e3e48fb
tree2e21c91be0bd8fd1446654400202da7bb6f41c03
parenteaa6b04c3cb8073d5a1510560ec8f1e433984895

Sema: make `@src` give absolute paths


1 files changed, 8 insertions(+), 3 deletions(-)

src/Sema.zig+8-3
...@@ -11861,10 +11861,14 @@ fn zirBuiltinSrc(...@@ -11861,10 +11861,14 @@ fn zirBuiltinSrc(
11861 const file_name_val = blk: {11861 const file_name_val = blk: {
11862 var anon_decl = try block.startAnonDecl(src);11862 var anon_decl = try block.startAnonDecl(src);
11863 defer anon_decl.deinit();11863 defer anon_decl.deinit();
11864 const name = try fn_owner_decl.getFileScope().fullPathZ(anon_decl.arena());11864 const relative_path = try fn_owner_decl.getFileScope().fullPath(sema.arena);
11865 const absolute_path = std.fs.realpathAlloc(sema.arena, relative_path) catch |err| {
11866 return sema.fail(block, src, "failed to get absolute path of file '{s}': {s}", .{ relative_path, @errorName(err) });
11867 };
11868 const aboslute_duped = try anon_decl.arena().dupeZ(u8, absolute_path);
11865 const new_decl = try anon_decl.finish(11869 const new_decl = try anon_decl.finish(
11866 try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), name.len),11870 try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), aboslute_duped.len),
11867 try Value.Tag.bytes.create(anon_decl.arena(), name[0 .. name.len + 1]),11871 try Value.Tag.bytes.create(anon_decl.arena(), aboslute_duped[0 .. aboslute_duped.len + 1]),
11868 0, // default alignment11872 0, // default alignment
11869 );11873 );
11870 break :blk try Value.Tag.decl_ref.create(sema.arena, new_decl);11874 break :blk try Value.Tag.decl_ref.create(sema.arena, new_decl);
...@@ -11875,6 +11879,7 @@ fn zirBuiltinSrc(...@@ -11875,6 +11879,7 @@ fn zirBuiltinSrc(
11875 field_values[0] = file_name_val;11879 field_values[0] = file_name_val;
11876 // fn_name: [:0]const u8,11880 // fn_name: [:0]const u8,
11877 field_values[1] = func_name_val;11881 field_values[1] = func_name_val;
11882 // TODO these should be runtime only!
11878 // line: u3211883 // line: u32
11879 field_values[2] = try Value.Tag.int_u64.create(sema.arena, extra.line + 1);11884 field_values[2] = try Value.Tag.int_u64.create(sema.arena, extra.line + 1);
11880 // column: u32,11885 // column: u32,