From e93618602d79d1e998a10c0ce1b4473459b19ff4 Mon Sep 17 00:00:00 2001 From: Louis Pearson Date: Thu, 4 Aug 2022 17:06:45 -0600 Subject: [PATCH] Put user in control of parser lifetime --- src/LDtk.zig | 22 ++++++++++++++++------ src/main.zig | 6 ++++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/LDtk.zig b/src/LDtk.zig index 89bb1d8..07c98dc 100644 --- a/src/LDtk.zig +++ b/src/LDtk.zig @@ -23,14 +23,24 @@ const std = @import("std"); -pub fn parse(alloc: std.mem.Allocator, ldtk_file: []const u8) !Root { - var parser = std.json.Parser.init(alloc, false); - defer parser.deinit(); +alloc: std.mem.Allocator, +root: Root, +parser: std.json.Parser, +value_tree: std.json.ValueTree, - var value_tree = try parser.parse(ldtk_file); - defer value_tree.deinit(); +pub fn parse(alloc: std.mem.Allocator, ldtk_file: []const u8) !@This() { + var this: @This() = undefined; + this.alloc = alloc; + this.parser = std.json.Parser.init(alloc, false); + this.value_tree = try this.parser.parse(ldtk_file); + this.root = try Root.fromJSON(alloc, this.value_tree.root); + return this; +} - return Root.fromJSON(alloc, value_tree.root); +pub fn deinit(this: *@This()) void { + this.root.deinit(this.alloc); + this.value_tree.deinit(); + this.parser.deinit(); } /// 1. LDtk Json root diff --git a/src/main.zig b/src/main.zig index 5532ae8..204729b 100644 --- a/src/main.zig +++ b/src/main.zig @@ -5,8 +5,10 @@ const LDtk = @import("LDtk.zig"); test "load default/empty ldtk file" { const empty_ldtk = @embedFile("test.ldtk"); - const ldtk_root = try LDtk.parse(testing.allocator, empty_ldtk); - defer ldtk_root.deinit(testing.allocator); + var ldtk = try LDtk.parse(testing.allocator, empty_ldtk); + defer ldtk.deinit(); + + var ldtk_root = ldtk.root; try testing.expectEqualStrings("1.1.3", ldtk_root.jsonVersion); try testing.expectEqualStrings("#40465B", ldtk_root.bgColor);