diff options
| author | Pavel Grigorenko <grigorenkopv@ya.ru> | 2024-02-19 17:37:43 +0300 |
|---|---|---|
| committer | Pavel Grigorenko <grigorenkopv@ya.ru> | 2024-02-19 17:39:25 +0300 |
| commit | 5be3d4bee4f1cdd79b47579c84199a484a09f3e9 (patch) | |
| tree | d131f479f59afbbd13ff1a44b56332c3171454eb | |
| parent | 43d3470f11a18d7bfa0b288954bf327cbf7549ab (diff) | |
| download | rust-5be3d4bee4f1cdd79b47579c84199a484a09f3e9.tar.gz rust-5be3d4bee4f1cdd79b47579c84199a484a09f3e9.zip | |
Remove `RefMutL` hack in `proc_macro::bridge`
| -rw-r--r-- | library/proc_macro/src/bridge/client.rs | 7 | ||||
| -rw-r--r-- | library/proc_macro/src/bridge/scoped_cell.rs | 22 |
2 files changed, 3 insertions, 26 deletions
diff --git a/library/proc_macro/src/bridge/client.rs b/library/proc_macro/src/bridge/client.rs index 9255c3abc8a..52b9ef470dc 100644 --- a/library/proc_macro/src/bridge/client.rs +++ b/library/proc_macro/src/bridge/client.rs @@ -296,12 +296,7 @@ impl BridgeState<'_> { /// N.B., while `f` is running, the thread-local state /// is `BridgeState::InUse`. fn with<R>(f: impl FnOnce(&mut BridgeState<'_>) -> R) -> R { - BRIDGE_STATE.with(|state| { - state.replace(BridgeState::InUse, |mut state| { - // FIXME(#52812) pass `f` directly to `replace` when `RefMutL` is gone - f(&mut *state) - }) - }) + BRIDGE_STATE.with(|state| state.replace(BridgeState::InUse, f)) } } diff --git a/library/proc_macro/src/bridge/scoped_cell.rs b/library/proc_macro/src/bridge/scoped_cell.rs index 2cde1f65adf..53eae1ebdb0 100644 --- a/library/proc_macro/src/bridge/scoped_cell.rs +++ b/library/proc_macro/src/bridge/scoped_cell.rs @@ -2,7 +2,6 @@ use std::cell::Cell; use std::mem; -use std::ops::{Deref, DerefMut}; /// Type lambda application, with a lifetime. #[allow(unused_lifetimes)] @@ -15,23 +14,6 @@ pub trait LambdaL: for<'a> ApplyL<'a> {} impl<T: for<'a> ApplyL<'a>> LambdaL for T {} -// HACK(eddyb) work around projection limitations with a newtype -// FIXME(#52812) replace with `&'a mut <T as ApplyL<'b>>::Out` -pub struct RefMutL<'a, 'b, T: LambdaL>(&'a mut <T as ApplyL<'b>>::Out); - -impl<'a, 'b, T: LambdaL> Deref for RefMutL<'a, 'b, T> { - type Target = <T as ApplyL<'b>>::Out; - fn deref(&self) -> &Self::Target { - self.0 - } -} - -impl<'a, 'b, T: LambdaL> DerefMut for RefMutL<'a, 'b, T> { - fn deref_mut(&mut self) -> &mut Self::Target { - self.0 - } -} - pub struct ScopedCell<T: LambdaL>(Cell<<T as ApplyL<'static>>::Out>); impl<T: LambdaL> ScopedCell<T> { @@ -46,7 +28,7 @@ impl<T: LambdaL> ScopedCell<T> { pub fn replace<'a, R>( &self, replacement: <T as ApplyL<'a>>::Out, - f: impl for<'b, 'c> FnOnce(RefMutL<'b, 'c, T>) -> R, + f: impl for<'b, 'c> FnOnce(&'b mut <T as ApplyL<'c>>::Out) -> R, ) -> R { /// Wrapper that ensures that the cell always gets filled /// (with the original state, optionally changed by `f`), @@ -71,7 +53,7 @@ impl<T: LambdaL> ScopedCell<T> { })), }; - f(RefMutL(put_back_on_drop.value.as_mut().unwrap())) + f(put_back_on_drop.value.as_mut().unwrap()) } /// Sets the value in `self` to `value` while running `f`. |
