From d2d42bf3ef5490f6fdec73508c2493a666ecee41 Mon Sep 17 00:00:00 2001 From: Sam Atman Date: Wed, 30 Apr 2025 16:48:07 -0400 Subject: Setup variants for all allocating modules This harmonizes the allocating modules in a couple of ways. All can now be constructed by pointer, and all treat various miscellaneous read failures as `unreachable`, which indeed they should be. The README has been updated to inform users of this option. --- src/Normalize.zig | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) (limited to 'src/Normalize.zig') diff --git a/src/Normalize.zig b/src/Normalize.zig index d8c867d..1500b4c 100644 --- a/src/Normalize.zig +++ b/src/Normalize.zig @@ -10,22 +10,47 @@ normp_data: NormPropsData = undefined, const Normalize = @This(); -pub fn init(allocator: Allocator) !Normalize { +pub fn init(allocator: Allocator) Allocator.Error!Normalize { var norm: Normalize = undefined; try norm.setup(allocator); return norm; } -pub fn setup(self: *Normalize, allocator: Allocator) !void { - self.canon_data = try CanonData.init(allocator); +pub fn setup(self: *Normalize, allocator: Allocator) Allocator.Error!void { + self.canon_data = CanonData.init(allocator) catch |err| { + switch (err) { + error.OutOfMemory => |e| return e, + else => unreachable, + } + }; errdefer self.canon_data.deinit(allocator); - self.ccc_data = try CccData.init(allocator); + self.ccc_data = CccData.init(allocator) catch |err| { + switch (err) { + error.OutOfMemory => |e| return e, + else => unreachable, + } + }; errdefer self.ccc_data.deinit(allocator); - self.compat_data = try CompatData.init(allocator); + self.compat_data = CompatData.init(allocator) catch |err| { + switch (err) { + error.OutOfMemory => |e| return e, + else => unreachable, + } + }; errdefer self.compat_data.deinit(allocator); - self.hangul_data = try HangulData.init(allocator); + self.hangul_data = HangulData.init(allocator) catch |err| { + switch (err) { + error.OutOfMemory => |e| return e, + else => unreachable, + } + }; errdefer self.hangul_data.deinit(allocator); - self.normp_data = try NormPropsData.init(allocator); + self.normp_data = NormPropsData.init(allocator) catch |err| { + switch (err) { + error.OutOfMemory => |e| return e, + else => unreachable, + } + }; } pub fn deinit(norm: *const Normalize, allocator: Allocator) void { -- cgit v1.2.3