Skip to content

Commit ff3e759

Browse files
authored
Reverse the Order of Deinitialization for Allocated Struct Members (#234)
I want to use zware for a memory-constrained embedded project. Unwinding objects's allocations will allow for allocated memory to be more reusable, as FixedBufferAllocators can free its last allocated memory.
1 parent 755d56f commit ff3e759

3 files changed

Lines changed: 35 additions & 35 deletions

File tree

src/instance.zig

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,16 @@ pub const Instance = struct {
7777
}
7878

7979
pub fn deinit(self: *Instance) void {
80-
self.funcaddrs.deinit();
81-
self.memaddrs.deinit();
82-
self.tableaddrs.deinit();
83-
self.globaladdrs.deinit();
84-
self.elemaddrs.deinit();
85-
self.dataaddrs.deinit();
86-
87-
self.wasi_preopens.deinit();
88-
self.wasi_args.deinit();
89-
self.wasi_env.deinit();
80+
defer self.funcaddrs.deinit();
81+
defer self.memaddrs.deinit();
82+
defer self.tableaddrs.deinit();
83+
defer self.globaladdrs.deinit();
84+
defer self.elemaddrs.deinit();
85+
defer self.dataaddrs.deinit();
86+
87+
defer self.wasi_preopens.deinit();
88+
defer self.wasi_args.deinit();
89+
defer self.wasi_env.deinit();
9090
}
9191

9292
pub fn getFunc(self: *Instance, funcidx: usize) !Function {

src/module.zig

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -61,23 +61,23 @@ pub const Module = struct {
6161
}
6262

6363
pub fn deinit(self: *Module) void {
64-
self.customs.deinit();
65-
self.types.deinit();
66-
self.imports.deinit();
67-
self.functions.deinit();
68-
self.tables.deinit();
69-
self.memories.deinit();
70-
self.globals.deinit();
71-
self.exports.deinit();
72-
self.elements.deinit();
73-
self.codes.deinit();
74-
self.datas.deinit();
75-
76-
self.element_init_offsets.deinit();
77-
self.parsed_code.deinit();
78-
self.local_types.deinit();
79-
self.br_table_indices.deinit();
80-
self.references.deinit();
64+
defer self.customs.deinit();
65+
defer self.types.deinit();
66+
defer self.imports.deinit();
67+
defer self.functions.deinit();
68+
defer self.tables.deinit();
69+
defer self.memories.deinit();
70+
defer self.globals.deinit();
71+
defer self.exports.deinit();
72+
defer self.elements.deinit();
73+
defer self.codes.deinit();
74+
defer self.datas.deinit();
75+
76+
defer self.element_init_offsets.deinit();
77+
defer self.parsed_code.deinit();
78+
defer self.local_types.deinit();
79+
defer self.br_table_indices.deinit();
80+
defer self.references.deinit();
8181
}
8282

8383
pub fn decode(self: *Module) !void {

src/store.zig

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,14 @@ pub const ArrayListStore = struct {
5757
}
5858

5959
pub fn deinit(self: *ArrayListStore) void {
60+
defer self.functions.deinit();
61+
defer self.memories.deinit();
62+
defer self.tables.deinit();
63+
defer self.globals.deinit();
64+
defer self.elems.deinit();
65+
defer self.datas.deinit();
66+
defer self.imports.deinit();
67+
6068
for (self.memories.items) |*m| {
6169
m.deinit();
6270
}
@@ -69,14 +77,6 @@ pub const ArrayListStore = struct {
6977
for (self.datas.items) |*d| {
7078
d.deinit();
7179
}
72-
73-
self.functions.deinit();
74-
self.memories.deinit();
75-
self.tables.deinit();
76-
self.globals.deinit();
77-
self.elems.deinit();
78-
self.datas.deinit();
79-
self.imports.deinit();
8080
}
8181

8282
// import

0 commit comments

Comments
 (0)