FIX: Selects nested in tuples with no defaults didn't parse.

fixes #40
This commit is contained in:
Jeremy Wall 2019-04-17 20:48:28 -05:00
parent 68e9c1c119
commit 05771c7221
2 changed files with 43 additions and 7 deletions

View File

@ -67,4 +67,31 @@ assert {
assert {
ok = no_default_test(false) == "I was false",
desc = "no default successfully detects false",
};
let tpl_fields = {
test = "foo",
};
let no_default_select_result = select tpl_fields.test == "foo", {
true = true,
false = false,
};
assert {
ok = no_default_select_result,
desc = "no default successfully select true",
};
let nested_select_result_no_defaults = select true, {
true = true,
false = select false, {
true = fail "whoops! this should never have triggered.",
false = true,
},
};
assert {
ok = nested_select_result_no_defaults,
desc = "Nested select result parses and resturns true",
};

View File

@ -467,13 +467,22 @@ fn select_expression(input: SliceIter<Token>) -> Result<SliceIter<Token>, Expres
_ => must!(punct!(",")),
(expr)
),
default => optional!(do_each!(
expr => trace_parse!(must!(expression)),
_ => punct!(","),
(expr)
)),
map => trace_parse!(must!(tuple)),
(val, default, map)
default_and_map => either!(
do_each!(
default => do_each!(
expr => trace_parse!(expression),
_ => punct!(","),
(expr)
),
map => trace_parse!(tuple),
(Some(default), map)
),
do_each!(
map => trace_parse!(must!(tuple)),
(None, map)
)
),
(val, default_and_map.0, default_and_map.1)
);
match parsed {
Result::Abort(e) => Result::Abort(e),