diff --git a/src/AstGen.zig b/src/AstGen.zig index 82e81f0..c27ec09 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -1152,18 +1152,15 @@ fn callExpr( const scratch_top = astgen.scratch.items.len; defer astgen.scratch.shrinkRetainingCapacity(scratch_top); - const args_count = if (args_node) |n| switch (n.tag) { - .call_expr => n.data.list.items.?.len, - else => 0, - } else 0; + + const arguments: ?[]*Ast.Node = if (args_node) |n| n.data.list.items.? else null; + const args_count = if (arguments) |args| args.len else 0; + try astgen.scratch.resize(gpa, scratch_top + args_count); var scratch_index = scratch_top; - if (args_node) |n| blk: { - if (n.tag != .call_expr) break :blk; - - const args_list = n.data.list.items.?; - for (args_list) |arg| { + if (arguments) |args| { + for (args) |arg| { var arg_block = gi.makeSubBlock(); defer arg_block.unstack(); diff --git a/src/Story/Dumper.zig b/src/Story/Dumper.zig index 1e7d7ff..234690c 100644 --- a/src/Story/Dumper.zig +++ b/src/Story/Dumper.zig @@ -226,33 +226,36 @@ pub fn dumpKnot(self: *Dumper, w: *std.Io.Writer, knot: *const Object.Knot) !voi var stitch_iter = knot.members.iterator(); var count: usize = 0; while (stitch_iter.next()) |entry| : (count += 1) { + const key = entry.key_ptr.*; + const stitch: *Object.Knot = @ptrCast(entry.value_ptr.*); + try w.splatByteAll(' ', self.indent_level); - try w.print("Stitch #{d}: \"{s}\"\n", .{ count, entry.key_ptr.* }); + try w.print("Stitch #{d}: \"{s}\"\n", .{ count, key }); self.indent_level += 2; try w.splatByteAll(' ', self.indent_level); - try w.print("Arguments: {d}\n", .{knot.code.args_count}); + try w.print("Arguments: {d}\n", .{stitch.code.args_count}); try w.splatByteAll(' ', self.indent_level); - try w.print("Locals: {d}\n", .{knot.code.locals_count}); + try w.print("Locals: {d}\n", .{stitch.code.locals_count}); try w.splatByteAll(' ', self.indent_level); - try w.print("Stack Size: {d}\n", .{knot.code.stack_size}); + try w.print("Stack Size: {d}\n", .{stitch.code.stack_size}); try w.splatByteAll(' ', self.indent_level); try w.writeAll("Constants: "); - try dumpKnotConstants(w, knot); + try dumpKnotConstants(w, stitch); try w.writeAll("\n"); try w.splatByteAll(' ', self.indent_level); try w.writeAll("Children: "); - try dumpKnotChildren(w, knot); + try dumpKnotChildren(w, stitch); try w.writeAll("\n"); try w.splatByteAll(' ', self.indent_level); try w.writeAll("Bytecode: \n"); self.indent_level += 2; - try self.dumpKnotBytecode(w, @ptrCast(entry.value_ptr.*)); + try self.dumpKnotBytecode(w, stitch); try w.writeAll("\n"); self.indent_level -= 4; diff --git a/src/compile.zig b/src/compile.zig index e57d975..d7849c2 100644 --- a/src/compile.zig +++ b/src/compile.zig @@ -250,9 +250,10 @@ pub const Module = struct { for (top_level_decls) |decl_index| { try sema.analyzeTopLevelDecl(file_scope, decl_index); } + + var knot_index: ?Knot.Index = null; while (mod.work_queue.pop()) |work_unit| { const chunk_index = mod.intern_pool.code_chunks.items.len; - var knot_index: ?Knot.Index = null; var chunk: Sema.Chunk = .{ .sema = &sema, .code = try mod.createCodeChunk(), @@ -411,7 +412,7 @@ pub const Module = struct { const parent_knot = mod.knots.items[@intFromEnum(index)]; const parent_knot_name = mod.intern_pool.getStrBytes(mod.ir, parent_knot.name_index); const parent_knot_obj: *Object.Knot = @ptrCast(story.globals.get(parent_knot_name).?); - try parent_knot_obj.members.put(story.allocator, name_bytes, &stitch_obj.base); + try parent_knot_obj.members.put(gpa, name_bytes, &stitch_obj.base); } } story.string_bytes = mod.ir.string_bytes;