diff options
| author | Anhgelus Morhtuuzh <william@herges.fr> | 2026-04-26 22:07:03 +0200 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <william@herges.fr> | 2026-04-26 22:07:03 +0200 |
| commit | 1ce415538f202bf1319ebb0ff6e76aa54f983343 (patch) | |
| tree | de7febaf453855229581fdc2dbcc92fd2bd1bed3 /src/eval/Element.zig | |
| parent | dca42e27fe9c7d28c72bb6cb8e5cc4ec481572e8 (diff) | |
perf(parse): reduce realloc for figcaptions
Diffstat (limited to 'src/eval/Element.zig')
| -rw-r--r-- | src/eval/Element.zig | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/eval/Element.zig b/src/eval/Element.zig index a8b424d..355e971 100644 --- a/src/eval/Element.zig +++ b/src/eval/Element.zig @@ -113,6 +113,24 @@ pub fn Simple(comptime tag: []const u8) type { destroy(self, alloc); } + pub fn toTag(self: *Self, alloc: Allocator, comptime target: []const u8) !*Simple(target) { + const el = try Simple(target).init(alloc); + self.conv(alloc, &el.content); + return el; + } + + pub fn toEmpty(self: *Self, alloc: Allocator) !*Empty { + const el = try Empty.init(alloc); + self.conv(alloc, &el.content); + return el; + } + + fn conv(self: *Self, alloc: Allocator, arr: *std.ArrayList(Element)) void { + arr.deinit(alloc); + arr.* = self.content; + alloc.destroy(self); + } + fn destroy(context: *anyopaque, alloc: Allocator) void { var self: *Self = @ptrCast(@alignCast(context)); for (self.content.items) |it| it.deinit(alloc); |
