authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2021-08-08 21:20:20 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2021-08-08 21:20:20 -07:00
log97dee90956930f7c9e8dbe652c36e543c416e3a3
treead028daab47e64816692e8ac4dd2968488d883f4
parentdf816f1c1d19a232094507b97e7359f7ab5754ea

add support for optionals in `#if` and `#ifnot`


1 files changed, 10 insertions(+), 2 deletions(-)

src/lib.zig+10-2
...@@ -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);