11598: feat: Parse destructuring assignment r=Veykril a=ChayimFriedman2

Part of #11532.

Lowering is not as easy and may not even be feasible right now as it requires generating identifiers: `(a, b) = (b, a)` is desugared into
```rust
{
    let (<gensym_a>, <gensym_b>) = (b, a);
    a = <gensym_a>;
    b = <gensym_b>;
}
```

rustc uses hygiene to implement that, but we don't support hygiene yet.

However, I think parsing was the main problem as lowering will just affect type inference, and while `{unknown}` is not nice it's much better than a syntax error.

I'm still looking for the best way to do lowering, though.

Fixes #11454.

Co-authored-by: Chayim Refael Friedman <chayimfr@gmail.com>
This commit is contained in:
bors[bot] 2022-03-05 11:31:29 +00:00 committed by GitHub
commit 8f504dc873
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
20 changed files with 582 additions and 221 deletions

View file

@ -143,6 +143,7 @@ pub(crate) const KINDS_SRC: KindsSrc = KindsSrc {
"RETURN_EXPR",
"YIELD_EXPR",
"LET_EXPR",
"UNDERSCORE_EXPR",
"MATCH_EXPR",
"MATCH_ARM_LIST",
"MATCH_ARM",