mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-29 12:24:45 +00:00
Update parse.rs
This commit is contained in:
parent
1b1b31a245
commit
01a8b05707
1 changed files with 11 additions and 1 deletions
|
@ -935,10 +935,19 @@ impl Parser {
|
||||||
}
|
}
|
||||||
Some(op) if op.category_is(TC::DefOp) => {
|
Some(op) if op.category_is(TC::DefOp) => {
|
||||||
let op = self.lpop();
|
let op = self.lpop();
|
||||||
|
let is_multiline_block = self.cur_is(Newline);
|
||||||
let lhs = enum_unwrap!(stack.pop(), Some:(ExprOrOp::Expr:(_)));
|
let lhs = enum_unwrap!(stack.pop(), Some:(ExprOrOp::Expr:(_)));
|
||||||
let sig = self.convert_rhs_to_sig(lhs).map_err(|_| self.stack_dec())?;
|
let sig = self.convert_rhs_to_sig(lhs).map_err(|_| self.stack_dec())?;
|
||||||
self.counter.inc();
|
self.counter.inc();
|
||||||
let block = self.try_reduce_block().map_err(|_| self.stack_dec())?;
|
let block = if is_multiline_block {
|
||||||
|
self.try_reduce_block().map_err(|_| self.stack_dec())?
|
||||||
|
} else {
|
||||||
|
// precedence: `=` < `,`
|
||||||
|
let expr = self
|
||||||
|
.try_reduce_expr(true, false, false, false)
|
||||||
|
.map_err(|_| self.stack_dec())?;
|
||||||
|
Block::new(vec![expr])
|
||||||
|
};
|
||||||
let body = DefBody::new(op, block, self.counter);
|
let body = DefBody::new(op, block, self.counter);
|
||||||
self.level -= 1;
|
self.level -= 1;
|
||||||
return Ok(Expr::Def(Def::new(sig, body)));
|
return Ok(Expr::Def(Def::new(sig, body)));
|
||||||
|
@ -954,6 +963,7 @@ impl Parser {
|
||||||
let block = if is_multiline_block {
|
let block = if is_multiline_block {
|
||||||
self.try_reduce_block().map_err(|_| self.stack_dec())?
|
self.try_reduce_block().map_err(|_| self.stack_dec())?
|
||||||
} else {
|
} else {
|
||||||
|
// precedence: `->` > `,`
|
||||||
let expr = self
|
let expr = self
|
||||||
.try_reduce_expr(false, false, false, false)
|
.try_reduce_expr(false, false, false, false)
|
||||||
.map_err(|_| self.stack_dec())?;
|
.map_err(|_| self.stack_dec())?;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue