Skip to content

Commit 98e8655

Browse files
committed
headers iterators should not allocate
1 parent da6b628 commit 98e8655

File tree

1 file changed

+12
-17
lines changed

1 file changed

+12
-17
lines changed

src/browser/fetch/Headers.zig

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,11 @@ pub fn _delete(self: *Headers, name: []const u8) void {
141141

142142
pub const HeaderEntryIterator = struct {
143143
slot: [][]const u8,
144-
iter: *HeaderHashMap.Iterator,
144+
iter: HeaderHashMap.Iterator,
145145

146146
// TODO: these SHOULD be in lexigraphical order but I'm not sure how actually
147147
// important that is.
148-
pub fn _next(self: *HeaderEntryIterator) !?[]const []const u8 {
148+
pub fn _next(self: *HeaderEntryIterator) ?[]const []const u8 {
149149
if (self.iter.next()) |entry| {
150150
self.slot[0] = entry.key_ptr.*;
151151
self.slot[1] = entry.value_ptr.*;
@@ -157,10 +157,10 @@ pub const HeaderEntryIterator = struct {
157157
};
158158

159159
pub fn _entries(self: *const Headers, page: *Page) !HeaderEntryIterator {
160-
const iter = try page.arena.create(HeaderHashMap.Iterator);
161-
iter.* = self.headers.iterator();
162-
163-
return .{ .slot = try page.arena.alloc([]const u8, 2), .iter = iter };
160+
return .{
161+
.slot = try page.arena.alloc([]const u8, 2),
162+
.iter = self.headers.iterator(),
163+
};
164164
}
165165

166166
pub fn _forEach(self: *Headers, callback_fn: Env.Function, this_arg: ?Env.JsObject) !void {
@@ -193,7 +193,7 @@ pub fn _has(self: *const Headers, name: []const u8) bool {
193193
}
194194

195195
pub const HeaderKeyIterator = struct {
196-
iter: *HeaderHashMap.KeyIterator,
196+
iter: HeaderHashMap.KeyIterator,
197197

198198
pub fn _next(self: *HeaderKeyIterator) !?[]const u8 {
199199
if (self.iter.next()) |key| {
@@ -204,11 +204,8 @@ pub const HeaderKeyIterator = struct {
204204
}
205205
};
206206

207-
pub fn _keys(self: *const Headers, page: *Page) !HeaderKeyIterator {
208-
const iter = try page.arena.create(HeaderHashMap.KeyIterator);
209-
iter.* = self.headers.keyIterator();
210-
211-
return .{ .iter = iter };
207+
pub fn _keys(self: *const Headers, _: *Page) HeaderKeyIterator {
208+
return .{ .iter = self.headers.keyIterator() };
212209
}
213210

214211
pub fn _set(self: *Headers, name: []const u8, value: []const u8, page: *Page) !void {
@@ -219,7 +216,7 @@ pub fn _set(self: *Headers, name: []const u8, value: []const u8, page: *Page) !v
219216
}
220217

221218
pub const HeaderValueIterator = struct {
222-
iter: *HeaderHashMap.ValueIterator,
219+
iter: HeaderHashMap.ValueIterator,
223220

224221
pub fn _next(self: *HeaderValueIterator) !?[]const u8 {
225222
if (self.iter.next()) |value| {
@@ -230,10 +227,8 @@ pub const HeaderValueIterator = struct {
230227
}
231228
};
232229

233-
pub fn _values(self: *const Headers, page: *Page) !HeaderValueIterator {
234-
const iter = try page.arena.create(HeaderHashMap.ValueIterator);
235-
iter.* = self.headers.valueIterator();
236-
return .{ .iter = iter };
230+
pub fn _values(self: *const Headers, _: *Page) HeaderValueIterator {
231+
return .{ .iter = self.headers.valueIterator() };
237232
}
238233

239234
const testing = @import("../../testing.zig");

0 commit comments

Comments
 (0)