diff options
Diffstat (limited to 'src/libsyntax/ptr.rs')
| -rw-r--r-- | src/libsyntax/ptr.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/libsyntax/ptr.rs b/src/libsyntax/ptr.rs index 92315a870f2..71cb2635280 100644 --- a/src/libsyntax/ptr.rs +++ b/src/libsyntax/ptr.rs @@ -31,8 +31,14 @@ impl<T: 'static> P<T> { f(*self.ptr) } - pub fn map(self, f: |T| -> T) -> P<T> { - self.and_then(|x| P(f(x))) + pub fn map(mut self, f: |T| -> T) -> P<T> { + use std::{mem, ptr}; + unsafe { + let p = &mut *self.ptr; + // FIXME(#5016) this shouldn't need to zero to be safe. + mem::move_val_init(p, f(ptr::read_and_zero(p))); + } + self } } |
