From 30e17cd5d0f3d3cfea689c25c870a378c4a9053b Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Fri, 18 Mar 2022 22:39:03 +0200 Subject: [PATCH] Sema: add debug info for inline function parameters --- src/Sema.zig | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/Sema.zig b/src/Sema.zig index 13c3db372c..cab8f91905 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -4269,6 +4269,17 @@ fn zirDbgVar( const str_op = sema.code.instructions.items(.data)[inst].str_op; const operand = sema.resolveInst(str_op.operand); + const name = str_op.getStr(sema.code); + try sema.addDbgVar(block, operand, air_tag, name); +} + +fn addDbgVar( + sema: *Sema, + block: *Block, + operand: Air.Inst.Ref, + air_tag: Air.Inst.Tag, + name: []const u8, +) CompileError!void { const operand_ty = sema.typeOf(operand); switch (air_tag) { .dbg_var_ptr => { @@ -4279,7 +4290,6 @@ fn zirDbgVar( }, else => unreachable, } - const name = str_op.getStr(sema.code); // Add the name to the AIR. const name_extra_index = @intCast(u32, sema.air_extra.items.len); @@ -4835,6 +4845,25 @@ fn analyzeCall( const new_func_resolved_ty = try Type.Tag.function.create(sema.arena, new_fn_info); if (!is_comptime_call) { try sema.emitDbgInline(block, parent_func.?, module_fn, new_func_resolved_ty, .dbg_inline_begin); + + for (fn_info.param_body) |param| switch (zir_tags[param]) { + .param, .param_comptime => { + const inst_data = sema.code.instructions.items(.data)[param].pl_tok; + const extra = sema.code.extraData(Zir.Inst.Param, inst_data.payload_index); + const param_name = sema.code.nullTerminatedString(extra.data.name); + const inst = sema.inst_map.get(param).?; + + try sema.addDbgVar(block, inst, .dbg_var_val, param_name); + }, + .param_anytype, .param_anytype_comptime => { + const inst_data = sema.code.instructions.items(.data)[param].str_tok; + const param_name = inst_data.get(sema.code); + const inst = sema.inst_map.get(param).?; + + try sema.addDbgVar(block, inst, .dbg_var_val, param_name); + }, + else => continue, + }; } const result = result: {