| ... | @@ -83,12 +83,20 @@ fn do(writer: anytype, comptime value: astgen.Value, data: anytype, ctx: anytype | ... | @@ -83,12 +83,20 @@ fn do(writer: anytype, comptime value: astgen.Value, data: anytype, ctx: anytype |
| 83 | .@"if" => { | 83 | .@"if" => { |
| 84 | comptime assertEqual(v.args.len, 1); | 84 | comptime assertEqual(v.args.len, 1); |
| 85 | const x = search(v.args[0], data); | 85 | const x = search(v.args[0], data); |
| 86 | if (x) try do(writer, body, data, ctx, indent, flag1); | 86 | switch (@typeInfo(@TypeOf(x))) { |
| | 87 | .Bool => if (x) try do(writer, body, data, ctx, indent, flag1), |
| | 88 | .Optional => if (x) |_| try do(writer, body, data, ctx, indent, flag1), |
| | 89 | else => unreachable, |
| | 90 | } |
| 87 | }, | 91 | }, |
| 88 | .ifnot => { | 92 | .ifnot => { |
| 89 | comptime assertEqual(v.args.len, 1); | 93 | comptime assertEqual(v.args.len, 1); |
| 90 | const x = search(v.args[0], data); | 94 | const x = search(v.args[0], data); |
| 91 | if (!x) try do(writer, body, data, ctx, indent, flag1); | 95 | switch (@typeInfo(@TypeOf(x))) { |
| | 96 | .Bool => if (x) {} else try do(writer, body, data, ctx, indent, flag1), |
| | 97 | .Optional => if (x) |_| {} else try do(writer, body, data, ctx, indent, flag1), |
| | 98 | else => unreachable, |
| | 99 | } |
| 92 | }, | 100 | }, |
| 93 | .ifequal => { | 101 | .ifequal => { |
| 94 | comptime assertEqual(v.args.len, 2); | 102 | comptime assertEqual(v.args.len, 2); |