From cc8d110f834d112a230024122fddfcc6e0a67759 Mon Sep 17 00:00:00 2001 From: Jose Colon Rodriguez Date: Tue, 2 Apr 2024 13:22:37 -0400 Subject: NormData init now takes pointer to uninitialized Self to avoid stack copy issues. --- README.md | 6 ++++-- src/NormData.zig | 5 +---- src/Normalize.zig | 24 ++++++++++++++++-------- src/unicode_tests.zig | 5 +++-- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 4df0112..df167f6 100644 --- a/README.md +++ b/README.md @@ -282,7 +282,8 @@ const Normalize = @import("Normalize"); test "Normalization" { // We need lots of Unicode dta for normalization. - var norm_data = try Normalize.NormData.init(allocator); + var norm_data: Normalize.NormData = undefined; + try Normalize.NormData.init(&norm_data, allocator); defer norm_data.deinit(); // The `Normalize` structure takes a pointer to the data. @@ -335,7 +336,8 @@ const CaseFold = @import("CaseFold"); test "Caseless matching" { // We need to normalize during the matching process. - var norm_data = try Normalize.NormData.init(allocator); + var norm_data: Normalize.NormData = undefined; + try Normalize.NormData.init(&norm_data, allocator); defer norm_data.deinit(); const n = Normalize{ .norm_data = &norm_data }; diff --git a/src/NormData.zig b/src/NormData.zig index 7ffe679..15cc401 100644 --- a/src/NormData.zig +++ b/src/NormData.zig @@ -16,8 +16,7 @@ normp_data: NormPropsData = undefined, const Self = @This(); -pub fn init(allocator: std.mem.Allocator) !Self { - var self = Self{}; +pub fn init(self: *Self, allocator: std.mem.Allocator) !void { self.canon_data = try CanonData.init(allocator); errdefer self.canon_data.deinit(); self.ccc_data = try CccData.init(allocator); @@ -27,8 +26,6 @@ pub fn init(allocator: std.mem.Allocator) !Self { self.hangul_data = try HangulData.init(allocator); errdefer self.hangul_data.deinit(); self.normp_data = try NormPropsData.init(allocator); - - return self; } pub fn deinit(self: *Self) void { diff --git a/src/Normalize.zig b/src/Normalize.zig index 85e3aa3..f2dbb3e 100644 --- a/src/Normalize.zig +++ b/src/Normalize.zig @@ -175,7 +175,8 @@ fn decompose( test "decompose" { const allocator = testing.allocator; - const data = try NormData.init(allocator); + var data: NormData = undefined; + try NormData.init(&data, allocator); defer data.deinit(); var n = Self{ .norm_data = &data }; @@ -295,7 +296,8 @@ fn nfxd(self: Self, allocator: mem.Allocator, str: []const u8, form: Form) !Resu test "nfd ASCII / no-alloc" { const allocator = testing.allocator; - const data = try NormData.init(allocator); + var data: NormData = undefined; + try NormData.init(&data, allocator); defer data.deinit(); const n = Self{ .norm_data = &data }; @@ -307,7 +309,8 @@ test "nfd ASCII / no-alloc" { test "nfd !ASCII / alloc" { const allocator = testing.allocator; - const data = try NormData.init(allocator); + var data: NormData = undefined; + try NormData.init(&data, allocator); defer data.deinit(); const n = Self{ .norm_data = &data }; @@ -319,7 +322,8 @@ test "nfd !ASCII / alloc" { test "nfkd ASCII / no-alloc" { const allocator = testing.allocator; - const data = try NormData.init(allocator); + var data: NormData = undefined; + try NormData.init(&data, allocator); defer data.deinit(); const n = Self{ .norm_data = &data }; @@ -331,7 +335,8 @@ test "nfkd ASCII / no-alloc" { test "nfkd !ASCII / alloc" { const allocator = testing.allocator; - const data = try NormData.init(allocator); + var data: NormData = undefined; + try NormData.init(&data, allocator); defer data.deinit(); const n = Self{ .norm_data = &data }; @@ -530,7 +535,8 @@ fn nfxc(self: Self, allocator: mem.Allocator, str: []const u8, form: Form) !Resu test "nfc" { const allocator = testing.allocator; - const data = try NormData.init(allocator); + var data: NormData = undefined; + try NormData.init(&data, allocator); defer data.deinit(); const n = Self{ .norm_data = &data }; @@ -542,7 +548,8 @@ test "nfc" { test "nfkc" { const allocator = testing.allocator; - const data = try NormData.init(allocator); + var data: NormData = undefined; + try NormData.init(&data, allocator); defer data.deinit(); const n = Self{ .norm_data = &data }; @@ -564,7 +571,8 @@ pub fn eql(self: Self, allocator: mem.Allocator, a: []const u8, b: []const u8) ! test "eql" { const allocator = testing.allocator; - const data = try NormData.init(allocator); + var data: NormData = undefined; + try NormData.init(&data, allocator); defer data.deinit(); const n = Self{ .norm_data = &data }; diff --git a/src/unicode_tests.zig b/src/unicode_tests.zig index 5442f63..448ce41 100644 --- a/src/unicode_tests.zig +++ b/src/unicode_tests.zig @@ -17,8 +17,9 @@ test "Unicode normalization tests" { defer arena.deinit(); var allocator = arena.allocator(); - const data = try Normalize.NormData.init(allocator); - const n = Normalize{ .norm_data = &data }; + var norm_data: Normalize.NormData = undefined; + try Normalize.NormData.init(&norm_data, allocator); + const n = Normalize{ .norm_data = &norm_data }; var file = try fs.cwd().openFile("data/unicode/NormalizationTest.txt", .{}); defer file.close(); -- cgit v1.2.3