Removed param_names from Fn inside Module.zig
Removed the copy of param_names inside of Fn and changed to implementation of getParamName to fetch to parameter name from the ZIR. The signature of getParamName was also changed to take an additional *Module argument.
This commit is contained in:
@@ -1471,14 +1471,6 @@ pub const Fn = struct {
|
||||
/// TODO apply the same enhancement for param_names below to this field.
|
||||
anytype_args: [*]bool,
|
||||
|
||||
/// Prefer to use `getParamName` to access this because of the future improvement
|
||||
/// we want to do mentioned in the TODO below.
|
||||
/// Stored in gpa.
|
||||
/// TODO: change param ZIR instructions to be embedded inside the function
|
||||
/// ZIR instruction instead of before it, so that `zir_body_inst` can be used to
|
||||
/// determine param names rather than redundantly storing them here.
|
||||
param_names: []const [:0]const u8,
|
||||
|
||||
/// Precomputed hash for monomorphed_funcs.
|
||||
/// This is important because it may be accessed when resizing monomorphed_funcs
|
||||
/// while this Fn has already been added to the set, but does not have the
|
||||
@@ -1590,18 +1582,28 @@ pub const Fn = struct {
|
||||
gpa.destroy(node);
|
||||
it = next;
|
||||
}
|
||||
|
||||
for (func.param_names) |param_name| {
|
||||
gpa.free(param_name);
|
||||
}
|
||||
gpa.free(func.param_names);
|
||||
}
|
||||
|
||||
pub fn getParamName(func: Fn, index: u32) [:0]const u8 {
|
||||
// TODO rework ZIR of parameters so that this function looks up
|
||||
// param names in ZIR instead of redundantly saving them into Fn.
|
||||
// const zir = func.owner_decl.getFileScope().zir;
|
||||
return func.param_names[index];
|
||||
pub fn getParamName(func: Fn, mod: *Module, index: u32) [:0]const u8 {
|
||||
const file = mod.declPtr(func.owner_decl).getFileScope();
|
||||
|
||||
const tags = file.zir.instructions.items(.tag);
|
||||
const data = file.zir.instructions.items(.data);
|
||||
|
||||
const param_body = file.zir.getParamBody(func.zir_body_inst);
|
||||
const param = param_body[index];
|
||||
|
||||
return switch (tags[param]) {
|
||||
.param, .param_comptime => blk: {
|
||||
const extra = file.zir.extraData(Zir.Inst.Param, data[param].pl_tok.payload_index);
|
||||
break :blk file.zir.nullTerminatedString(extra.data.name);
|
||||
},
|
||||
.param_anytype, .param_anytype_comptime => blk: {
|
||||
const param_data = data[param].str_tok;
|
||||
break :blk param_data.get(file.zir);
|
||||
},
|
||||
else => unreachable,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn hasInferredErrorSet(func: Fn, mod: *Module) bool {
|
||||
|
||||
Reference in New Issue
Block a user