| ... | ... | @@ -301,15 +301,11 @@ fn doInner(alloc: std.mem.Allocator, writer: anytype, comptime value: astgen.Val |
| 301 | 301 | const func = @field(opts.Ctx, "pek_" ++ v.name); |
| 302 | 302 | var list = std.ArrayList(u8).init(alloc); |
| 303 | 303 | defer list.deinit(); |
| 304 | | var args: std.meta.ArgsTuple(@TypeOf(func)) = undefined; |
| 305 | | comptime std.debug.assert(args.len - 2 == v.args.len); |
| 306 | | args.@"0" = alloc; |
| 307 | | args.@"1" = list.writer(); |
| 308 | | inline for (v.args, 0..) |arg, i| { |
| 309 | | const field_name = comptime nio.fmt.comptimePrint("{d}", .{i + 2}); |
| 310 | | @field(args, field_name) = try resolveArg(arg, alloc, data, ctx, opts); |
| 311 | | } |
| 312 | | try @call(.auto, func, args); |
| 304 | comptime var types: [v.args.len]type = @splat(void); |
| 305 | inline for (v.args, &types) |arg, *T| T.* = ResolveArg(arg, @TypeOf(data), @TypeOf(ctx)); |
| 306 | var args: std.meta.Tuple(&types) = undefined; |
| 307 | inline for (v.args, 0..) |arg, i| args[i] = try resolveArg(arg, alloc, data, ctx, opts); |
| 308 | try @call(.auto, func, .{ alloc, list.writer() } ++ args); |
| 313 | 309 | try writeReplacementString(writer, v.raw, opts.escaped, try list.toOwnedSlice()); |
| 314 | 310 | return; |
| 315 | 311 | } |
| ... | ... | @@ -317,22 +313,18 @@ fn doInner(alloc: std.mem.Allocator, writer: anytype, comptime value: astgen.Val |
| 317 | 313 | const func = @field(opts.Ctx, "pek__" ++ v.name); |
| 318 | 314 | var list = std.ArrayList(u8).init(alloc); |
| 319 | 315 | defer list.deinit(); |
| 320 | | const AT = std.meta.ArgsTuple(@TypeOf(func)); |
| 321 | | const ATT = std.meta.fieldInfo(AT, .@"3").type; |
| 322 | | if (v.args.len != std.meta.fields(ATT).len) @compileError(nio.fmt.comptimePrint("expected:{d} - actual:{d}", .{ std.meta.fields(ATT).len, v.args.len })); |
| 323 | | var tupargs = @as(ATT, undefined); |
| 324 | | _ = &tupargs; |
| 325 | | var args = .{ |
| 326 | | alloc, |
| 327 | | list.writer(), |
| 328 | | opts, |
| 329 | | tupargs, |
| 330 | | }; |
| 331 | | inline for (v.args, 0..) |arg, i| { |
| 332 | | const field_name = comptime nio.fmt.comptimePrint("{d}", .{i}); |
| 333 | | @field(args[3], field_name) = try resolveArg(arg, alloc, data, ctx, opts); |
| 316 | const Tup = @typeInfo(@TypeOf(func)).@"fn".params[3].type.?; |
| 317 | if (@typeInfo(Tup).@"struct".fields.len == 0) { |
| 318 | // edge case branch because 'struct {}' is counted as a non-tuple |
| 319 | try @call(.auto, func, .{ alloc, list.writer(), opts, Tup{} }); |
| 320 | try writeReplacementString(writer, v.raw, opts.escaped, list.items); |
| 321 | return; |
| 334 | 322 | } |
| 335 | | try @call(.auto, func, args); |
| 323 | comptime var types: [v.args.len]type = @splat(void); |
| 324 | inline for (v.args, &types) |arg, *T| T.* = ResolveArg(arg, @TypeOf(data), @TypeOf(ctx)); |
| 325 | var args: std.meta.Tuple(&types) = undefined; |
| 326 | inline for (v.args, 0..) |arg, i| args[i] = try resolveArg(arg, alloc, data, ctx, opts); |
| 327 | try @call(.auto, func, .{ alloc, list.writer(), opts, args }); |
| 336 | 328 | try writeReplacementString(writer, v.raw, opts.escaped, list.items); |
| 337 | 329 | return; |
| 338 | 330 | } |