| ... | ... | @@ -40,7 +40,7 @@ pub fn compileInner(alloc: std.mem.Allocator, writer: anytype, comptime value: a |
| 40 | 40 | try do(alloc, writer, value, data, data, opts); |
| 41 | 41 | } |
| 42 | 42 | |
| 43 | | pub const Writer = std.ArrayList(u8).Writer; |
| 43 | pub const Writer = *std.Io.Writer; |
| 44 | 44 | |
| 45 | 45 | fn do(alloc: std.mem.Allocator, writer: anytype, comptime value: astgen.Value, data: anytype, ctx: anytype, comptime opts: DoOptions) anyerror!void { |
| 46 | 46 | comptime var skipindent = false; |
| ... | ... | @@ -297,33 +297,33 @@ fn doInner(alloc: std.mem.Allocator, writer: anytype, comptime value: astgen.Val |
| 297 | 297 | .function => |v| { |
| 298 | 298 | if (!v.raw and @hasDecl(opts.Ctx, "pek_" ++ v.name)) { |
| 299 | 299 | const func = @field(opts.Ctx, "pek_" ++ v.name); |
| 300 | | var list = std.ArrayList(u8).init(alloc); |
| 300 | var list = std.Io.Writer.Allocating.init(alloc); |
| 301 | 301 | defer list.deinit(); |
| 302 | 302 | comptime var types: [v.args.len]type = @splat(void); |
| 303 | 303 | inline for (v.args, &types) |arg, *T| T.* = ResolveArg(arg, @TypeOf(data), @TypeOf(ctx)); |
| 304 | 304 | var args: std.meta.Tuple(&types) = undefined; |
| 305 | 305 | inline for (v.args, 0..) |arg, i| args[i] = try resolveArg(arg, alloc, data, ctx, opts); |
| 306 | | try @call(.auto, func, .{ alloc, list.writer() } ++ args); |
| 306 | try @call(.auto, func, .{ alloc, &list.writer } ++ args); |
| 307 | 307 | try writeReplacementString(writer, v.raw, opts.escaped, try list.toOwnedSlice()); |
| 308 | 308 | return; |
| 309 | 309 | } |
| 310 | 310 | if (v.raw and @hasDecl(opts.Ctx, "pek__" ++ v.name)) { |
| 311 | 311 | const func = @field(opts.Ctx, "pek__" ++ v.name); |
| 312 | | var list = std.ArrayList(u8).init(alloc); |
| 312 | var list = std.Io.Writer.Allocating.init(alloc); |
| 313 | 313 | defer list.deinit(); |
| 314 | 314 | const Tup = @typeInfo(@TypeOf(func)).@"fn".params[3].type.?; |
| 315 | 315 | if (@typeInfo(Tup).@"struct".fields.len == 0) { |
| 316 | 316 | // edge case branch because 'struct {}' is counted as a non-tuple |
| 317 | | try @call(.auto, func, .{ alloc, list.writer(), opts, Tup{} }); |
| 318 | | try writeReplacementString(writer, v.raw, opts.escaped, list.items); |
| 317 | try @call(.auto, func, .{ alloc, &list.writer, opts, Tup{} }); |
| 318 | try writeReplacementString(writer, v.raw, opts.escaped, list.written()); |
| 319 | 319 | return; |
| 320 | 320 | } |
| 321 | 321 | comptime var types: [v.args.len]type = @splat(void); |
| 322 | 322 | inline for (v.args, &types) |arg, *T| T.* = ResolveArg(arg, @TypeOf(data), @TypeOf(ctx)); |
| 323 | 323 | var args: std.meta.Tuple(&types) = undefined; |
| 324 | 324 | inline for (v.args, 0..) |arg, i| args[i] = try resolveArg(arg, alloc, data, ctx, opts); |
| 325 | | try @call(.auto, func, .{ alloc, list.writer(), opts, args }); |
| 326 | | try writeReplacementString(writer, v.raw, opts.escaped, list.items); |
| 325 | try @call(.auto, func, .{ alloc, &list.writer, opts, args }); |
| 326 | try writeReplacementString(writer, v.raw, opts.escaped, list.written()); |
| 327 | 327 | return; |
| 328 | 328 | } |
| 329 | 329 | if (v.raw and @hasDecl(opts.Ctx, "pek_" ++ v.name)) { |
| ... | ... | @@ -352,11 +352,11 @@ fn resolveArg(comptime arg: astgen.Arg, alloc: std.mem.Allocator, data: anytype, |
| 352 | 352 | .lookup => |av| search(av, ctx), |
| 353 | 353 | .int => |av| av, |
| 354 | 354 | .value => |av| { |
| 355 | | var list = std.ArrayList(u8).init(alloc); |
| 355 | var list = std.Io.Writer.Allocating.init(alloc); |
| 356 | 356 | comptime var newopts = opts; |
| 357 | 357 | newopts.escaped = false; |
| 358 | | try do(alloc, list.writer(), astgen.Value{ .body = av }, data, ctx, newopts); |
| 359 | | return list.items; |
| 358 | try do(alloc, &list.writer, astgen.Value{ .body = av }, data, ctx, newopts); |
| 359 | return list.written(); |
| 360 | 360 | }, |
| 361 | 361 | }; |
| 362 | 362 | } |