Support optional deref post-refactor
This commit is contained in:
parent
54748b4c07
commit
25d6ee0245
2 changed files with 21 additions and 9 deletions
|
@ -234,7 +234,7 @@ fn EvaluateExpression(
|
||||||
.isTag => bool,
|
.isTag => bool,
|
||||||
.slice => |sl| []const std.meta.Elem(EvaluateExpression(sl.iterable, Args, Captures, Context)),
|
.slice => |sl| []const std.meta.Elem(EvaluateExpression(sl.iterable, Args, Captures, Context)),
|
||||||
},
|
},
|
||||||
.optional_unwrap => |expr| std.meta.Child(EvaluateExpression(expr, Args, Captures, Context)),
|
.optional_unwrap => |expr| std.meta.Child(EvaluateExpression(expr.*, Args, Captures, Context)),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,7 +279,10 @@ fn evaluateExpression(
|
||||||
return iterable[start..end];
|
return iterable[start..end];
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
.optional_unwrap => unreachable,
|
.optional_unwrap => |expr| {
|
||||||
|
const val = try evaluateExpression(expr.*, args, captures, context);
|
||||||
|
return val orelse error.NullOptional;
|
||||||
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -561,15 +564,24 @@ fn parseExpression(comptime tokens: ControlTokenIter) ParseResult(ControlTokenIt
|
||||||
if (expr == null) {
|
if (expr == null) {
|
||||||
expr = .{ .args = {} };
|
expr = .{ .args = {} };
|
||||||
if (iter.peek()) |n| if (n == .text) iter.putBack(.{ .period = {} });
|
if (iter.peek()) |n| if (n == .text) iter.putBack(.{ .period = {} });
|
||||||
} else {
|
} else switch (iter.next() orelse break) {
|
||||||
const field = iter.next();
|
.text => |text| expr = .{
|
||||||
expectToken(field, .text);
|
|
||||||
expr = .{
|
|
||||||
.deref = &.{
|
.deref = &.{
|
||||||
.container = expr.?,
|
.container = expr.?,
|
||||||
.field = field.?.text,
|
.field = text,
|
||||||
},
|
},
|
||||||
};
|
},
|
||||||
|
.question_mark => expr = .{
|
||||||
|
.optional_unwrap = blk: {
|
||||||
|
const e = expr.?;
|
||||||
|
break :blk &e;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
else => |t2| {
|
||||||
|
iter.pushBack(t2);
|
||||||
|
iter.pushBack(token);
|
||||||
|
break;
|
||||||
|
},
|
||||||
}
|
}
|
||||||
last_valid_iter = iter;
|
last_valid_iter = iter;
|
||||||
},
|
},
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
{#if .maybe_foo |$v|}{$v}{#else}null{/if}
|
{#if .maybe_foo |$v|}{$v}{#else}null{/if}
|
||||||
{#if .maybe_bar |$v|}{$v}{#else}null{/if}
|
{#if .maybe_bar |$v|}{$v}{#else}null{/if}
|
||||||
{#if .maybe_foo |$_|}abcd{#else}null{/if}
|
{#if .maybe_foo |$_|}abcd{#else}null{/if}
|
||||||
{{.maybe_foo.?}}
|
{.maybe_foo.?}
|
||||||
This causes an error: {{.maybe_bar.?}}
|
This causes an error: {{.maybe_bar.?}}
|
||||||
|
|
||||||
<template>{#template test_tmpl .bar}</template>
|
<template>{#template test_tmpl .bar}</template>
|
||||||
|
|
Loading…
Reference in a new issue