summaryrefslogtreecommitdiff
path: root/src/symtable.zig
diff options
context:
space:
mode:
authorNic Gaffney <gaffney_nic@protonmail.com>2024-08-07 16:56:22 -0500
committerNic Gaffney <gaffney_nic@protonmail.com>2024-08-07 16:56:22 -0500
commitb83e1ee47fd6e8a9bfa539f5f486401c6fbed342 (patch)
treec5858adcad36db3a5b5afda438ccd5f55b471b08 /src/symtable.zig
parent068ff09a96ad3cdea31d788c053ea3d544713e39 (diff)
downloadcalico-b83e1ee47fd6e8a9bfa539f5f486401c6fbed342.tar.gz
Fixed memory leaks
Diffstat (limited to 'src/symtable.zig')
-rw-r--r--src/symtable.zig19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/symtable.zig b/src/symtable.zig
index f37ee12..cc041c5 100644
--- a/src/symtable.zig
+++ b/src/symtable.zig
@@ -196,6 +196,7 @@ pub const Populator = struct {
std.debug.print("Populated Function {s}\n", .{fun.ident.ident});
if (!try table.insert(fun.ident.ident, symbol)) return error.FailedToInsert;
const children = try stmt.children(self.allocator);
+ defer self.allocator.free(children);
for (children) |child| try self.populateSymtable(&child);
},
@@ -221,17 +222,21 @@ pub const Populator = struct {
const output = try self.allocator.create(SymbType);
output.* = if (retType) |typ| table.getType(typ).? else SymbType.Void;
+ const typ = SymbType{
+ .Function = .{
+ .output = output,
+ .input = input,
+ },
+ };
+ const id = self.reserveId();
+
+ _ = try table.insert("func_" ++ .{@as(u8, @truncate(id))}, typ.toSymb());
return Symbol{
.Value = SymbValue{
.mut = true,
- .id = self.reserveId(),
- .typ = SymbType{
- .Function = .{
- .input = input,
- .output = output,
- },
- },
+ .id = id,
+ .typ = typ,
},
};
}