priv value: T,
priv marker1: marker::InvariantType<T>,
priv marker2: marker::NoFreeze,
+ priv marker3: marker::NoShare,
}
impl<T:Pod> Cell<T> {
value: value,
marker1: marker::InvariantType::<T>,
marker2: marker::NoFreeze,
+ marker3: marker::NoShare,
}
}
priv marker1: marker::InvariantType<T>,
priv marker2: marker::NoFreeze,
priv marker3: marker::NoPod,
+ priv marker4: marker::NoShare,
}
// Values [1, MAX-1] represent the number of `Ref` active
marker1: marker::InvariantType::<T>,
marker2: marker::NoFreeze,
marker3: marker::NoPod,
+ marker4: marker::NoShare,
value: value,
borrow: UNUSED,
}
#[unsafe_no_drop_flag]
pub struct Rc<T> {
priv ptr: *mut RcBox<T>,
- priv marker: marker::NoSend
+ priv nosend: marker::NoSend,
+ priv noshare: marker::NoShare
}
impl<T> Rc<T> {
// strong destructor is running, even if the weak
// pointer is stored inside the strong one.
ptr: transmute(~RcBox { value: value, strong: 1, weak: 1 }),
- marker: marker::NoSend,
+ nosend: marker::NoSend,
+ noshare: marker::NoShare
}
}
}
pub fn downgrade(&self) -> Weak<T> {
unsafe {
(*self.ptr).weak += 1;
- Weak { ptr: self.ptr, marker: marker::NoSend }
+ Weak {
+ ptr: self.ptr,
+ nosend: marker::NoSend,
+ noshare: marker::NoShare
+ }
}
}
}
fn clone(&self) -> Rc<T> {
unsafe {
(*self.ptr).strong += 1;
- Rc { ptr: self.ptr, marker: marker::NoSend }
+ Rc { ptr: self.ptr, nosend: marker::NoSend, noshare: marker::NoShare }
}
}
}
#[unsafe_no_drop_flag]
pub struct Weak<T> {
priv ptr: *mut RcBox<T>,
- priv marker: marker::NoSend
+ priv nosend: marker::NoSend,
+ priv noshare: marker::NoShare
}
impl<T> Weak<T> {
None
} else {
(*self.ptr).strong += 1;
- Some(Rc { ptr: self.ptr, marker: marker::NoSend })
+ Some(Rc { ptr: self.ptr, nosend: marker::NoSend, noshare: marker::NoShare })
}
}
}
fn clone(&self) -> Weak<T> {
unsafe {
(*self.ptr).weak += 1;
- Weak { ptr: self.ptr, marker: marker::NoSend }
+ Weak { ptr: self.ptr, nosend: marker::NoSend, noshare: marker::NoShare }
}
}
}