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 { assert {
ok = no_default_test(false) == "I was false", ok = no_default_test(false) == "I was false",
desc = "no default successfully detects 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!(",")), _ => must!(punct!(",")),
(expr) (expr)
), ),
default => optional!(do_each!( default_and_map => either!(
expr => trace_parse!(must!(expression)), do_each!(
_ => punct!(","), default => do_each!(
(expr) expr => trace_parse!(expression),
)), _ => punct!(","),
map => trace_parse!(must!(tuple)), (expr)
(val, default, map) ),
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 { match parsed {
Result::Abort(e) => Result::Abort(e), Result::Abort(e) => Result::Abort(e),