diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-06-11 22:56:32 +0300 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2022-06-11 23:12:52 +0300 |
| commit | 95ab942184427e7c9b840d71f4d093931e3e48fb (patch) | |
| tree | 2e21c91be0bd8fd1446654400202da7bb6f41c03 /src/Sema.zig | |
| parent | eaa6b04c3cb8073d5a1510560ec8f1e433984895 (diff) | |
| download | zig-95ab942184427e7c9b840d71f4d093931e3e48fb.tar.gz zig-95ab942184427e7c9b840d71f4d093931e3e48fb.zip | |
Sema: make `@src` give absolute paths
Diffstat (limited to 'src/Sema.zig')
| -rw-r--r-- | src/Sema.zig | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 9a34cce6e0..d901998755 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -11861,10 +11861,14 @@ fn zirBuiltinSrc( const file_name_val = blk: { var anon_decl = try block.startAnonDecl(src); defer anon_decl.deinit(); - const name = try fn_owner_decl.getFileScope().fullPathZ(anon_decl.arena()); + const relative_path = try fn_owner_decl.getFileScope().fullPath(sema.arena); + const absolute_path = std.fs.realpathAlloc(sema.arena, relative_path) catch |err| { + return sema.fail(block, src, "failed to get absolute path of file '{s}': {s}", .{ relative_path, @errorName(err) }); + }; + const aboslute_duped = try anon_decl.arena().dupeZ(u8, absolute_path); const new_decl = try anon_decl.finish( - try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), name.len), - try Value.Tag.bytes.create(anon_decl.arena(), name[0 .. name.len + 1]), + try Type.Tag.array_u8_sentinel_0.create(anon_decl.arena(), aboslute_duped.len), + try Value.Tag.bytes.create(anon_decl.arena(), aboslute_duped[0 .. aboslute_duped.len + 1]), 0, // default alignment ); break :blk try Value.Tag.decl_ref.create(sema.arena, new_decl); @@ -11875,6 +11879,7 @@ fn zirBuiltinSrc( field_values[0] = file_name_val; // fn_name: [:0]const u8, field_values[1] = func_name_val; + // TODO these should be runtime only! // line: u32 field_values[2] = try Value.Tag.int_u64.create(sema.arena, extra.line + 1); // column: u32, |
