From 6bb163e4af370137f5ca99bf294bb270da39250e Mon Sep 17 00:00:00 2001 From: Mason Remaley Date: Fri, 28 Jun 2024 17:27:23 -0700 Subject: [PATCH] Records result type for imports, does not yet use --- lib/std/zig/AstGen.zig | 6 +++++- lib/std/zig/Zir.zig | 7 ++++++- src/Sema.zig | 7 ++++--- src/print_zir.zig | 2 +- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/std/zig/AstGen.zig b/lib/std/zig/AstGen.zig index 6e2333f8b505..a0c16b69b422 100644 --- a/lib/std/zig/AstGen.zig +++ b/lib/std/zig/AstGen.zig @@ -9130,7 +9130,11 @@ fn builtinCall( } else if (str.len == 0) { return astgen.failTok(str_lit_token, "import path cannot be empty", .{}); } - const result = try gz.addStrTok(.import, str.index, str_lit_token); + const result_ty = try ri.rl.resultType(gz, node) orelse .none; + const result = try gz.addPlNode(.import, node, Zir.Inst.Import{ + .result_ty = result_ty, + .name = str.index, + }); const gop = try astgen.imports.getOrPut(astgen.gpa, str.index); if (!gop.found_existing) { gop.value_ptr.* = str_lit_token; diff --git a/lib/std/zig/Zir.zig b/lib/std/zig/Zir.zig index 5dd69f9923de..cf853d35b9a6 100644 --- a/lib/std/zig/Zir.zig +++ b/lib/std/zig/Zir.zig @@ -1643,7 +1643,7 @@ pub const Inst = struct { .func = .pl_node, .func_inferred = .pl_node, .func_fancy = .pl_node, - .import = .str_tok, + .import = .pl_node, .int = .int, .int_big = .str, .float = .float, @@ -3476,6 +3476,11 @@ pub const Inst = struct { /// If `.none`, restore unconditionally. operand: Ref, }; + + pub const Import = struct { + result_ty: Ref, + name: NullTerminatedString, + }; }; pub const SpecialProng = enum { none, @"else", under }; diff --git a/src/Sema.zig b/src/Sema.zig index ad61fd8d5abb..ce94dfa8760b 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -13901,10 +13901,11 @@ fn zirImport(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air. defer tracy.end(); const mod = sema.mod; - const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].str_tok; - const operand_src = block.tokenOffset(inst_data.src_tok); - const operand = inst_data.get(sema.code); + const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node; + const extra = sema.code.extraData(Zir.Inst.Import, inst_data.payload_index).data; + const operand = sema.code.nullTerminatedString(extra.name); + const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0); const result = mod.importFile(block.getFileScope(mod), operand) catch |err| switch (err) { error.ImportOutsideModulePath => { return sema.fail(block, operand_src, "import of file outside module path: '{s}'", .{operand}); diff --git a/src/print_zir.zig b/src/print_zir.zig index 6caf6a5d916a..c5d59d70918a 100644 --- a/src/print_zir.zig +++ b/src/print_zir.zig @@ -421,6 +421,7 @@ const Writer = struct { .elem_val, .array_type, .coerce_ptr_elem_ty, + .import, => try self.writePlNodeBin(stream, inst), .for_len => try self.writePlNodeMultiOp(stream, inst), @@ -485,7 +486,6 @@ const Writer = struct { .enum_literal, .decl_ref, .decl_val, - .import, .ret_err_value, .ret_err_value_code, .param_anytype,