mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-03 19:58:18 +00:00
Implement most of the recent round of PR feedback
This commit is contained in:
parent
03f83a0ba8
commit
6a2ffb2f5a
13 changed files with 67 additions and 116 deletions
|
@ -837,8 +837,6 @@ pub enum ValueDef<'a> {
|
|||
IngestedFileImport(IngestedFileImport<'a>),
|
||||
|
||||
Stmt(&'a Loc<Expr<'a>>),
|
||||
|
||||
Return(&'a Loc<Expr<'a>>),
|
||||
}
|
||||
|
||||
impl<'a> ValueDef<'a> {
|
||||
|
@ -1090,7 +1088,6 @@ impl<'a, 'b> Iterator for RecursiveValueDefIter<'a, 'b> {
|
|||
}
|
||||
}
|
||||
ValueDef::Stmt(loc_expr) => self.push_pending_from_expr(&loc_expr.value),
|
||||
ValueDef::Return(loc_expr) => self.push_pending_from_expr(&loc_expr.value),
|
||||
ValueDef::Annotation(_, _) | ValueDef::IngestedFileImport(_) => {}
|
||||
}
|
||||
|
||||
|
@ -2737,7 +2734,6 @@ impl<'a> Malformed for ValueDef<'a> {
|
|||
annotation,
|
||||
}) => path.is_malformed() || annotation.is_malformed(),
|
||||
ValueDef::Stmt(loc_expr) => loc_expr.is_malformed(),
|
||||
ValueDef::Return(loc_expr) => loc_expr.is_malformed(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2664,8 +2664,9 @@ fn return_help<'a>(options: ExprParseOptions) -> impl Parser<'a, Stmt<'a>, ERetu
|
|||
|
||||
let region = Region::span_across(&return_kw.region, &return_value.region);
|
||||
|
||||
let stmt = Stmt::ValueDef(ValueDef::Return(
|
||||
let stmt = Stmt::Expr(Expr::Return(
|
||||
arena.alloc(Loc::at(region, return_value.value)),
|
||||
None,
|
||||
));
|
||||
|
||||
Ok((MadeProgress, stmt, state))
|
||||
|
@ -3057,7 +3058,6 @@ fn stmts_to_expr<'a>(
|
|||
CalledVia::Space,
|
||||
)
|
||||
}
|
||||
Stmt::ValueDef(ValueDef::Return(return_value)) => Expr::Return(return_value, None),
|
||||
Stmt::ValueDef(ValueDef::Expect { .. }) => {
|
||||
return Err(EExpr::Expect(
|
||||
EExpect::Continuation(
|
||||
|
@ -3090,6 +3090,20 @@ fn stmts_to_defs<'a>(
|
|||
while i < stmts.len() {
|
||||
let sp_stmt = stmts[i];
|
||||
match sp_stmt.item.value {
|
||||
Stmt::Expr(Expr::Return(return_value, _after_return)) => {
|
||||
if i == stmts.len() - 1 {
|
||||
last_expr = Some(Loc::at_zero(Expr::Return(return_value, None)));
|
||||
} else {
|
||||
let rest = stmts_to_expr(&stmts[i + 1..], arena)?;
|
||||
last_expr = Some(Loc::at_zero(Expr::Return(
|
||||
return_value,
|
||||
Some(arena.alloc(rest)),
|
||||
)));
|
||||
}
|
||||
|
||||
// don't re-process the rest of the statements, they got consumed by the early return
|
||||
break;
|
||||
}
|
||||
Stmt::Expr(e) => {
|
||||
if is_expr_suffixed(&e) && i + 1 < stmts.len() {
|
||||
defs.push_value_def(
|
||||
|
@ -3112,20 +3126,6 @@ fn stmts_to_defs<'a>(
|
|||
last_expr = Some(sp_stmt.item.with_value(e));
|
||||
}
|
||||
}
|
||||
Stmt::ValueDef(ValueDef::Return(return_value)) => {
|
||||
if i == stmts.len() - 1 {
|
||||
last_expr = Some(Loc::at_zero(Expr::Return(return_value, None)));
|
||||
} else {
|
||||
let rest = stmts_to_expr(&stmts[i + 1..], arena)?;
|
||||
last_expr = Some(Loc::at_zero(Expr::Return(
|
||||
return_value,
|
||||
Some(arena.alloc(rest)),
|
||||
)));
|
||||
}
|
||||
|
||||
// don't re-process the rest of the statements, they got consumed by the early return
|
||||
break;
|
||||
}
|
||||
Stmt::Backpassing(pats, call) => {
|
||||
if last_expr.is_some() {
|
||||
return Err(EExpr::StmtAfterExpr(sp_stmt.item.region.start()));
|
||||
|
|
|
@ -440,7 +440,6 @@ impl<'a> Normalize<'a> for ValueDef<'a> {
|
|||
IngestedFileImport(ingested_file_import.normalize(arena))
|
||||
}
|
||||
Stmt(loc_expr) => Stmt(arena.alloc(loc_expr.normalize(arena))),
|
||||
Return(loc_expr) => Return(arena.alloc(loc_expr.normalize(arena))),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue