diff options
| author | Anhgelus Morhtuuzh <william@herges.fr> | 2026-04-27 16:16:49 +0200 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <william@herges.fr> | 2026-04-27 16:16:49 +0200 |
| commit | 9f1a0bf3b0437770a7b62fd28a8748908c38dac4 (patch) | |
| tree | 0967564e0903b5b27a5f39381011cc8a684a7539 /src/eval/Element.zig | |
| parent | de948492e8b38a79d5db9c506c1b7b82e86c6b12 (diff) | |
perf(html): reduce memory syscall
Diffstat (limited to 'src/eval/Element.zig')
| -rw-r--r-- | src/eval/Element.zig | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/eval/Element.zig b/src/eval/Element.zig index 0dbba59..265ccf1 100644 --- a/src/eval/Element.zig +++ b/src/eval/Element.zig @@ -18,8 +18,9 @@ vtable: struct { ptr: *anyopaque, pub fn renderHTML(self: Element, alloc: Allocator) HTML.Error![]const u8 { - var el = try self.vtable.html(self.ptr, alloc); - defer el.deinit(); + const root = try HTML.Root.init(alloc); + defer root.deinit(); + var el = try self.vtable.html(self.ptr, root.allocator()); return el.render(alloc); } @@ -59,10 +60,10 @@ pub const Empty = struct { fn html(context: *anyopaque, alloc: Allocator) HTML.Error!HTML { const self: *Self = @ptrCast(@alignCast(context)); - var el = HTML.initEmpty(alloc); + var el = try HTML.Root.init(alloc); errdefer el.deinit(); - for (self.content.items) |it| try el.appendContent(try it.html(alloc)); - return el; + for (self.content.items) |it| try el.append(try it.html(el.allocator())); + return el.element(); } }; @@ -92,7 +93,7 @@ pub const Literal = struct { fn html(context: *anyopaque, alloc: Allocator) HTML.Error!HTML { const self: *Self = @ptrCast(@alignCast(context)); - return HTML.initLitEscaped(alloc, self.content); + return (try HTML.Literal.init(alloc, self.content)).element(); } }; @@ -143,10 +144,9 @@ pub fn Simple(comptime tag: []const u8) type { fn html(context: *anyopaque, alloc: Allocator) HTML.Error!HTML { const self: *Self = @ptrCast(@alignCast(context)); - var el = try HTML.init(alloc, .content, tag); - errdefer el.deinit(); - for (self.content.items) |it| try el.appendContent(try it.html(alloc)); - return el; + var el = try HTML.Content.init(alloc, tag); + for (self.content.items) |it| try el.append(try it.html(alloc)); + return el.element(); } }; } |
