Record pattern

This commit is contained in:
greg 2020-03-13 23:04:16 -07:00
parent 67b98c47fc
commit 7ffd6b2bd7
1 changed files with 17 additions and 1 deletions

View File

@ -276,7 +276,23 @@ fn tuple_struct_pattern(text: &str) -> ParseResult<Pattern> {
}
fn record_pattern(text: &str) -> ParseResult<Pattern> {
unimplemented!()
let p = tuple((
qualified_name,
delimited(ws(tag("{")),
separated_nonempty_list(ws(tag(",")), ws(record_pattern_entry)), //TODO support newlines?
ws(tag("}")))
));
map(p, |(name, members)| Pattern::Record(name, members))(text)
}
fn record_pattern_entry(text: &str) -> ParseResult<(Rc<String>, Pattern)> {
alt((
map(tuple((ws(identifier), ws(tag(":")), ws(pattern))),
|(name, _, pattern)| (name, pattern)),
map(identifier, |name|
(name.clone(), Pattern::Literal(PatternLiteral::StringPattern(name.clone())))
)
))(text)
}
fn pattern_literal(text: &str) -> ParseResult<PatternLiteral> {