| ... | ... | @@ -12,6 +12,19 @@ pub fn init(alloc: std.mem.Allocator) void { |
| 12 | 12 | multis = std.StringArrayHashMap(List).init(alloc); |
| 13 | 13 | } |
| 14 | 14 | |
| 15 | pub fn deinit() void { |
| 16 | var iter1 = singles.iterator(); |
| 17 | while (iter1.next()) |entry| singles.allocator.free(entry.value_ptr.*); |
| 18 | singles.deinit(); |
| 19 | |
| 20 | var iter2 = multis.iterator(); |
| 21 | while (iter2.next()) |entry| { |
| 22 | for (entry.value_ptr.items) |item| multis.allocator.free(item); |
| 23 | entry.value_ptr.deinit(); |
| 24 | } |
| 25 | multis.deinit(); |
| 26 | } |
| 27 | |
| 15 | 28 | pub fn addSingle(name: string) !void { |
| 16 | 29 | try singles.putNoClobber(name, ""); |
| 17 | 30 | } |
| ... | ... | @@ -38,8 +51,9 @@ pub fn parse(k: FlagDashKind) !std.process.ArgIterator { |
| 38 | 51 | defer argiter.deinit(); |
| 39 | 52 | var argi: usize = 0; |
| 40 | 53 | blk: while (argiter.next(singles.allocator)) |item| : (argi += 1) { |
| 41 | | if (argi == 0) continue; |
| 42 | 54 | const data = try item; |
| 55 | defer singles.allocator.free(data); |
| 56 | if (argi == 0) continue; |
| 43 | 57 | const name = extras.trimPrefix(data, dash); |
| 44 | 58 | if (data.len == name.len) return error.BadFlag; |
| 45 | 59 | |