mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-29 14:54:47 +00:00
fix multiple consequtive defs
This commit is contained in:
parent
95ebc8ded5
commit
2def201a9a
1 changed files with 11 additions and 11 deletions
|
@ -511,10 +511,11 @@ fn equals_for_def<'a>() -> impl Parser<'a, ()> {
|
||||||
/// * A type annotation
|
/// * A type annotation
|
||||||
/// * A type annotation followed on the next line by a pattern, an `=`, and an expression
|
/// * A type annotation followed on the next line by a pattern, an `=`, and an expression
|
||||||
pub fn def<'a>(min_indent: u16) -> impl Parser<'a, Def<'a>> {
|
pub fn def<'a>(min_indent: u16) -> impl Parser<'a, Def<'a>> {
|
||||||
|
// we should fix this backtracking!
|
||||||
attempt(
|
attempt(
|
||||||
Attempting::Def,
|
Attempting::Def,
|
||||||
map_with_arena!(
|
map_with_arena!(
|
||||||
either!(annotated_body(min_indent), body(min_indent)),
|
either!(backtrackable(annotated_body(min_indent)), body(min_indent)),
|
||||||
to_def
|
to_def
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -716,6 +717,12 @@ fn annotation_or_alias<'a>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn parse_defs<'a>(min_indent: u16) -> impl Parser<'a, Vec<'a, &'a Located<Def<'a>>>> {
|
||||||
|
let parse_def = move |a, s| space1_before(loc!(def(min_indent)), min_indent).parse(a, s);
|
||||||
|
|
||||||
|
zero_or_more!(allocated(parse_def))
|
||||||
|
}
|
||||||
|
|
||||||
fn parse_def_expr<'a>(
|
fn parse_def_expr<'a>(
|
||||||
min_indent: u16,
|
min_indent: u16,
|
||||||
def_start_col: u16,
|
def_start_col: u16,
|
||||||
|
@ -748,7 +755,6 @@ fn parse_def_expr<'a>(
|
||||||
// Indented more beyond the original indent of the entire def-expr.
|
// Indented more beyond the original indent of the entire def-expr.
|
||||||
let indented_more = def_start_col + 1;
|
let indented_more = def_start_col + 1;
|
||||||
|
|
||||||
dbg!("now we get here");
|
|
||||||
then(
|
then(
|
||||||
attempt!(
|
attempt!(
|
||||||
Attempting::Def,
|
Attempting::Def,
|
||||||
|
@ -762,10 +768,7 @@ fn parse_def_expr<'a>(
|
||||||
loc!(move |arena, state| parse_expr(indented_more, arena, state)),
|
loc!(move |arena, state| parse_expr(indented_more, arena, state)),
|
||||||
and!(
|
and!(
|
||||||
// Optionally parse additional defs.
|
// Optionally parse additional defs.
|
||||||
zero_or_more!(allocated(space1_before(
|
parse_defs(def_start_col),
|
||||||
loc!(def(def_start_col)),
|
|
||||||
def_start_col,
|
|
||||||
))),
|
|
||||||
// Parse the final expression that will be returned.
|
// Parse the final expression that will be returned.
|
||||||
// It should be indented the same amount as the original.
|
// It should be indented the same amount as the original.
|
||||||
space1_before(
|
space1_before(
|
||||||
|
@ -865,10 +868,8 @@ fn parse_def_signature<'a>(
|
||||||
// leading to an AnnotatedBody in this case
|
// leading to an AnnotatedBody in this case
|
||||||
|_progress, type_ann, indent_level| map(
|
|_progress, type_ann, indent_level| map(
|
||||||
optional(and!(
|
optional(and!(
|
||||||
backtrackable(
|
backtrackable(spaces_then_comment_or_newline()),
|
||||||
|a, s| dbg!(spaces_then_comment_or_newline().parse(a, s))
|
body_at_indent(indent_level)
|
||||||
),
|
|
||||||
|a, s| dbg!(body_at_indent(indent_level).parse(a, s))
|
|
||||||
)),
|
)),
|
||||||
move |opt_body| (type_ann.clone(), opt_body)
|
move |opt_body| (type_ann.clone(), opt_body)
|
||||||
)
|
)
|
||||||
|
@ -1585,7 +1586,6 @@ fn unary_negate_function_arg<'a>(min_indent: u16) -> impl Parser<'a, Located<Exp
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
move |arena, state, progress, (spaces, num_or_minus_char)| {
|
move |arena, state, progress, (spaces, num_or_minus_char)| {
|
||||||
dbg!("parsed an arg?");
|
|
||||||
debug_assert_eq!(progress, MadeProgress);
|
debug_assert_eq!(progress, MadeProgress);
|
||||||
|
|
||||||
match num_or_minus_char {
|
match num_or_minus_char {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue