Commit Graph

11 Commits

Author SHA1 Message Date
dianne
36ff87e90e EUV: fix place of deref pattern's interior's scrutinee
The place previously used here was that of the temporary holding the
reference returned by `Deref::deref` or `DerefMut::deref_mut`. However,
since the inner pattern of `deref!(inner)` expects the deref-target type
itself, this would ICE when that type was inspected (e.g. by the EUV
case for slice patterns). This adds a deref projection to fix that.

Since current in-tree consumers of EUV (upvar inference and clippy)
don't care about Rvalues, the place could be simplified to
`self.cat_rvalue(pat.hir_id, self.pat_ty_adjusted(subpat)?)` to save
some cycles. I personally find EUV to be a bit fragile, so I've opted
for pedantic correctness. Maybe a `HACK` comment would suffice though?
2025-03-13 01:01:26 -07:00
dianne
04d9bb7a9a add_move_error_suggestions: use a HIR visitor rather than SourceMap 2024-11-25 20:29:04 -08:00
Nadrieril
217a4dff7d Test or-patterns inside deref patterns 2024-04-20 16:04:06 +02:00
Nadrieril
436c61266c Use deep fake borrows for deref patterns 2024-04-20 16:04:05 +02:00
Nadrieril
b55afe475a Address closure-related review 2024-04-20 15:59:54 +02:00
Nadrieril
377e095371 Allow mutable bindings inside deref patterns 2024-04-20 15:59:54 +02:00
Nadrieril
1dabacd059 Don't fake borrow inside a deref pattern 2024-04-20 15:59:54 +02:00
Nadrieril
c623319a30 Lower deref patterns to MIR
This handles using deref patterns to choose the correct match arm. This
does not handle bindings or guards.

Co-authored-by: Deadbeef <ent3rm4n@gmail.com>
2024-04-20 15:59:54 +02:00
Michael Goulet
5fdc7555c1 Require DerefMut if deref pattern has nested ref mut binding 2024-03-25 19:39:45 -04:00
Michael Goulet
2d633317f3 Implement macro-based deref!() syntax for deref patterns
Stop using `box PAT` syntax for deref patterns, as it's misleading and
also causes their semantics being tangled up.
2024-03-21 11:42:49 -04:00
Nadrieril
120d3570aa Add barest-bones deref patterns
Co-authored-by: Deadbeef <ent3rm4n@gmail.com>
2024-03-20 22:30:27 +01:00