Sema: add debug info for inline function parameters

This commit is contained in:
Veikka Tuominen 2022-03-18 22:39:03 +02:00
parent f19731948e
commit 30e17cd5d0

View File

@ -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: {