From bcb022592b5751ff9acd5b9ac18d0dfea8fe447f Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Sun, 8 Aug 2021 22:13:34 -0700 Subject: [PATCH] fix if/else handling --- src/lib.zig | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/lib.zig b/src/lib.zig index 63947c8f3d92df14bc239de8d6ee0d5c967ad319..d09a39400f9e2d2b92b27f307e17852e32421906 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -74,6 +74,7 @@ fn do(writer: anytype, comptime value: astgen.Value, data: anytype, ctx: anytype }, .block => |v| { const body = astgen.Value{ .body = v.body }; + const bottom = astgen.Value{ .body = v.bttm }; switch (v.name) { .each => { comptime assertEqual(v.args.len, 1); @@ -83,22 +84,36 @@ fn do(writer: anytype, comptime value: astgen.Value, data: anytype, ctx: anytype .@"if" => { comptime assertEqual(v.args.len, 1); const x = search(v.args[0], data); - const content = switch (@typeInfo(@TypeOf(x))) { - .Bool => if (x) v.body else v.bttm, - .Optional => if (x) |_| v.body else v.bttm, + switch (@typeInfo(@TypeOf(x))) { + .Bool => if (x) { + try do(writer, body, data, ctx, indent, flag1); + } else { + try do(writer, bottom, data, ctx, indent, flag1); + }, + .Optional => if (x) |_| { + try do(writer, body, data, ctx, indent, flag1); + } else { + try do(writer, bottom, data, ctx, indent, flag1); + }, else => unreachable, - }; - try do(writer, body, content, ctx, indent, flag1); + } }, .ifnot => { comptime assertEqual(v.args.len, 1); const x = search(v.args[0], data); - const content = switch (@typeInfo(@TypeOf(x))) { - .Bool => if (x) v.bttm else v.body, - .Optional => if (x) |_| v.bttm else v.body, + switch (@typeInfo(@TypeOf(x))) { + .Bool => if (x) { + try do(writer, bottom, data, ctx, indent, flag1); + } else { + try do(writer, body, data, ctx, indent, flag1); + }, + .Optional => if (x) |_| { + try do(writer, bottom, data, ctx, indent, flag1); + } else { + try do(writer, body, data, ctx, indent, flag1); + }, else => unreachable, - }; - try do(writer, body, content, ctx, indent, flag1); + } }, .ifequal => { comptime assertEqual(v.args.len, 2); -- 2.54.0