authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-07-28 04:53:08-07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-07-28 04:53:08-07:00
log3cdacb14fb3db5c3154a9e00622b0af1208a0ccd
treec587ed2925c68d823d98b0fe2b2b24b50f3c8b09
parenta2f9acc35749b42094bc8dc11c1ff8e932ca808b
signature Signed by SSH key SHA256:4hHJbtBRU58AYXwjL7fkz2fnQHdiye8x1QpTCQ0sHNw

use nio.AllocatingWriter for Writer


1 files changed, 12 insertions(+), 12 deletions(-)

src/lib.zig+12-12
......@@ -40,7 +40,7 @@ pub fn compileInner(alloc: std.mem.Allocator, writer: anytype, comptime value: a
4040 try do(alloc, writer, value, data, data, opts);
4141}
4242
43pub const Writer = *std.Io.Writer;
43pub const Writer = *nio.AllocatingWriter;
4444
4545fn do(alloc: std.mem.Allocator, writer: anytype, comptime value: astgen.Value, data: anytype, ctx: anytype, comptime opts: DoOptions) anyerror!void {
4646 comptime var skipindent = false;
......@@ -303,34 +303,34 @@ fn doInner(alloc: std.mem.Allocator, writer: anytype, comptime value: astgen.Val
303303 if (!v.raw) {
304304 if (@hasDecl(opts.Ctx, "pek__" ++ v.name)) @compileError("pek: attempted to call raw custom function: '_" ++ v.name ++ "' but did not use '{#" ++ v.name ++ "}'");
305305 const func = @field(opts.Ctx, "pek_" ++ v.name);
306 var list = std.Io.Writer.Allocating.init(alloc);
306 var list: nio.AllocatingWriter = .init(alloc);
307307 defer list.deinit();
308308 comptime var types: [v.args.len]type = @splat(void);
309309 inline for (v.args, &types) |arg, *T| T.* = ResolveArg(arg, @TypeOf(data), @TypeOf(ctx));
310310 var args: std.meta.Tuple(&types) = undefined;
311311 inline for (v.args, 0..) |arg, i| args[i] = try resolveArg(arg, alloc, data, ctx, opts);
312 try @call(.auto, func, .{ alloc, &list.writer } ++ args);
313 try writeReplacementString(writer, v.raw, opts.escaped, try list.toOwnedSlice());
312 try @call(.auto, func, .{ alloc, &list } ++ args);
313 try writeReplacementString(writer, v.raw, opts.escaped, list.items);
314314 return;
315315 }
316316 if (v.raw) {
317317 if (@hasDecl(opts.Ctx, "pek_" ++ v.name)) @compileError("pek: attempted to call safe custom function: '" ++ v.name ++ "' but did not use '{" ++ v.name ++ "}'");
318318 const func = @field(opts.Ctx, "pek__" ++ v.name);
319 var list = std.Io.Writer.Allocating.init(alloc);
319 var list: nio.AllocatingWriter = .init(alloc);
320320 defer list.deinit();
321321 const Tup = @typeInfo(@TypeOf(func)).@"fn".params[3].type.?;
322322 if (@typeInfo(Tup).@"struct".fields.len == 0) {
323323 // edge case branch because 'struct {}' is counted as a non-tuple
324 try @call(.auto, func, .{ alloc, &list.writer, opts, Tup{} });
325 try writeReplacementString(writer, v.raw, opts.escaped, list.written());
324 try @call(.auto, func, .{ alloc, &list, opts, Tup{} });
325 try writeReplacementString(writer, v.raw, opts.escaped, list.items);
326326 return;
327327 }
328328 comptime var types: [v.args.len]type = @splat(void);
329329 inline for (v.args, &types) |arg, *T| T.* = ResolveArg(arg, @TypeOf(data), @TypeOf(ctx));
330330 var args: std.meta.Tuple(&types) = undefined;
331331 inline for (v.args, 0..) |arg, i| args[i] = try resolveArg(arg, alloc, data, ctx, opts);
332 try @call(.auto, func, .{ alloc, &list.writer, opts, args });
333 try writeReplacementString(writer, v.raw, opts.escaped, list.written());
332 try @call(.auto, func, .{ alloc, &list, opts, args });
333 try writeReplacementString(writer, v.raw, opts.escaped, list.items);
334334 return;
335335 }
336336 comptime unreachable;
......@@ -353,11 +353,11 @@ fn resolveArg(comptime arg: astgen.Arg, alloc: std.mem.Allocator, data: anytype,
353353 .lookup => |av| search(av, ctx),
354354 .int => |av| av,
355355 .value => |av| {
356 var list = std.Io.Writer.Allocating.init(alloc);
356 var list: nio.AllocatingWriter = .init(alloc);
357357 comptime var newopts = opts;
358358 newopts.escaped = false;
359 try do(alloc, &list.writer, astgen.Value{ .body = av }, data, ctx, newopts);
360 return list.written();
359 try do(alloc, &list, astgen.Value{ .body = av }, data, ctx, newopts);
360 return list.items;
361361 },
362362 };
363363}