mirror of
https://github.com/erg-lang/erg.git
synced 2025-08-04 02:39:20 +00:00
feat: array unpacking
This commit is contained in:
parent
74e89f6d5b
commit
95e675cccd
8 changed files with 153 additions and 26 deletions
|
@ -893,6 +893,15 @@ impl Parser {
|
|||
debug_exit_info!(self);
|
||||
return Ok(ArrayInner::WithLength(elems.remove_pos(0), len));
|
||||
}
|
||||
Some(PreStar) => {
|
||||
self.lpop();
|
||||
let rest = self
|
||||
.try_reduce_expr(false, false, false, false)
|
||||
.map_err(|_| self.stack_dec(fn_name!()))?;
|
||||
elems.set_var_args(PosArg::new(rest));
|
||||
debug_exit_info!(self);
|
||||
return Ok(ArrayInner::Normal(elems));
|
||||
}
|
||||
Some(Inclusion) => {
|
||||
self.lpop();
|
||||
let Expr::Accessor(Accessor::Ident(sym)) = elems.remove_pos(0).expr else {
|
||||
|
@ -981,6 +990,14 @@ impl Parser {
|
|||
Some(RParen | RSqBr | RBrace | Dedent) => {
|
||||
break;
|
||||
}
|
||||
Some(PreStar) => {
|
||||
self.lpop();
|
||||
let rest = self
|
||||
.try_reduce_expr(false, false, false, false)
|
||||
.map_err(|_| self.stack_dec(fn_name!()))?;
|
||||
elems.set_var_args(PosArg::new(rest));
|
||||
break;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
elems.push_pos(
|
||||
|
@ -2485,6 +2502,7 @@ impl Parser {
|
|||
debug_exit_info!(self);
|
||||
Ok(call_or_acc)
|
||||
}
|
||||
// REVIEW: correct?
|
||||
Some(t) if t.is(PreStar) || t.is(PreDblStar) => {
|
||||
let kind = t.kind;
|
||||
let _ = self.lpop();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue