For expr + whitespace

This commit is contained in:
greg 2020-03-10 01:45:15 -07:00
parent b6a60a05ba
commit efda75860c
1 changed files with 7 additions and 3 deletions

View File

@ -168,6 +168,7 @@ fn for_expr(text: &str) -> ParseResult<ExpressionKind> {
))(text)
}
fn enumerators(text: &str) -> ParseResult<Vec<Enumerator>> {
separated_nonempty_list(alt((value((), tag(",")), statement_sep)),
enumerator)(text)
@ -181,7 +182,10 @@ fn enumerator(text: &str) -> ParseResult<Enumerator> {
}
fn for_expr_body(text: &str) -> ParseResult<ForBody> {
unimplemented!()
alt((
map(preceded(tag("return"), expression), ForBody::MonadicReturn),
map(delimited(tag("{"), block, tag("}")), ForBody::StatementBlock),
))(text)
}
fn invocation_argument(text: &str) -> ParseResult<InvocationArgument> {
@ -386,7 +390,7 @@ fn precedence_expr(text: &str) -> ParseResult<ExpressionKind> {
}
fn expression_kind(text: &str) -> ParseResult<ExpressionKind> {
context("Expression kind", precedence_expr)(text)
context("Expression kind", ws(precedence_expr))(text)
}
fn type_anno(text: &str) -> ParseResult<TypeIdentifier> {
@ -402,7 +406,7 @@ fn type_name(text: &str) -> ParseResult<TypeIdentifier> {
}
fn expression(text: &str) -> ParseResult<Expression> {
let (rest, (kind, type_anno)) = pair(expression_kind, opt(type_anno))(text)?;
let (rest, (kind, type_anno)) = ws(pair(expression_kind, opt(type_anno)))(text)?;
let expr = Expression { id: ItemId::new(0), kind, type_anno };
Ok((rest, expr))
}