@gritty crow I tried using
fn get_map_keys(allocator: std.mem.Allocator, map: std.StringHashMap(void)) ![][]const u8 {
const result = try allocator.alloc([]const u8, map.count());
errdefer allocator.free(result);
var key_it = map.keyIterator();
var i: usize = 0;
while (key_it.next()) |key_ptr| {
result[i] = key_ptr.*;
i += 1;
}
return result;
}
and I'm getting an integer overflow (Zig 0.11.0)
thread 22386 panic: integer overflow
/home/dan/Install/zig-linux-x86_64-0.11.0/lib/std/hash_map.zig:1146:42: 0x2a6d35 in containsAdapted__anon_10861 (lvm)
const mask = self.capacity() - 1;
^
/home/dan/Install/zig-linux-x86_64-0.11.0/lib/std/hash_map.zig:1402:40: 0x299f10 in containsContext (lvm)
return self.containsAdapted(key, ctx);
^
/home/dan/Install/zig-linux-x86_64-0.11.0/lib/std/hash_map.zig:624:50: 0x28c654 in contains (lvm)
return self.unmanaged.containsContext(key, self.ctx);
^
/home/dan/proj/lvm/src/runtime/Naive.zig:200:30: 0x279c10 in _substitute (lvm)
if (vars.contains(param)) {
^
/home/dan/proj/lvm/src/runtime/Naive.zig:155:44: 0x244790 in substitute (lvm)
const result_idx = try self._substitute(gpa, ast, vars.*, node_idx, ident, arg_idx);
^
/home/dan/proj/lvm/src/runtime/Naive.zig:50:63: 0x237706 in reduce (lvm)
const result_idx = try self.substitute(gpa, ast, app_left.abstraction.rhs, abs_var.ident, node.application.rhs);
^
/home/dan/proj/lvm/src/main.zig:89:48: 0x236ac7 in repl (lvm)
const result = try naive_runtime.reduce(allocator, &ast, root_node_idx);
^
/home/dan/proj/lvm/src/main.zig:52:17: 0x238ffe in main (lvm)
repl() catch |err| {
^
/home/dan/Install/zig-linux-x86_64-0.11.0/lib/std/start.zig:574:37: 0x22824e in posixCallMainAndExit (lvm)
const result = root.main() catch |err| {
^
/home/dan/Install/zig-linux-x86_64-0.11.0/lib/std/start.zig:243:5: 0x227d31 in _start (lvm)
asm volatile (switch (native_arch) {