Desugar field assignment

This commit is contained in:
Joscha 2022-11-21 14:05:07 +01:00
parent 3f8320941a
commit ebc48fff5a

View file

@ -75,18 +75,82 @@ impl Field {
value, value,
span, span,
} => { } => {
let new = Expr::Field(Self::Assign { let (expr, desugared) = expr.desugar();
expr, if desugared {
s0, let new = Expr::Field(Self::Assign {
s1, expr: Box::new(expr),
index, s0,
s2, s1,
s3, index,
s4, s2,
value, s3,
s4,
value,
span,
});
return (new, true);
}
let (index, desugared) = index.desugar();
if desugared {
let new = Expr::Field(Self::Assign {
expr: Box::new(expr),
s0,
s1,
index: Box::new(index),
s2,
s3,
s4,
value,
span,
});
return (new, true);
}
let (value, desugared) = value.desugar();
if desugared {
let new = Expr::Field(Self::Assign {
expr: Box::new(expr),
s0,
s1,
index: Box::new(index),
s2,
s3,
s4,
value: Box::new(value),
span,
});
return (new, true);
}
let elems = Separated::NonEmpty {
first_elem: TableConstrElem::Lit(TableLitElem::Positional(Box::new(expr))),
last_elems: vec![
(
(Space::empty(span), Space::empty(span)),
TableConstrElem::Lit(TableLitElem::Positional(Box::new(index))),
),
(
(Space::empty(span), Space::empty(span)),
TableConstrElem::Lit(TableLitElem::Positional(Box::new(value))),
),
],
trailing: None,
span,
};
let constr = TableConstr {
s0: Space::empty(span),
elems,
s1: Space::empty(span),
span,
};
let new = Expr::Call(Call::Constr {
expr: Box::new(Expr::Lit(Lit::Builtin(Builtin::Set, span))),
s0: Space::empty(span),
constr,
span, span,
}); });
(new, true) // TODO Implement (new, true)
} }
Self::AccessIdent { Self::AccessIdent {