Skip to content

Commit

Permalink
auto merge of #6305 : thestinger/rust/rc, r=nikomatsakis
Browse files Browse the repository at this point in the history
  • Loading branch information
bors committed May 8, 2013
2 parents 86500fb + 96eb1e5 commit 625e518
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 6 deletions.
1 change: 1 addition & 0 deletions src/libstd/arc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,7 @@ struct RWARCInner<T> { lock: RWlock, failed: bool, data: T }
*
* Unlike mutex_arcs, rw_arcs are safe, because they cannot be nested.
*/
#[mutable]
struct RWARC<T> {
x: SharedMutableState<RWARCInner<T>>,
cant_nest: ()
Expand Down
13 changes: 7 additions & 6 deletions src/libstd/rc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ struct RcBox<T> {
}

/// Immutable reference counted pointer type
#[non_owned]
pub struct Rc<T> {
priv ptr: *mut RcBox<T>,
priv non_owned: Option<@()> // FIXME: #5601: replace with `#[non_owned]`
}

pub impl<'self, T: Owned> Rc<T> {
Expand All @@ -35,7 +35,7 @@ pub impl<'self, T: Owned> Rc<T> {
let ptr = malloc(sys::size_of::<RcBox<T>>() as size_t) as *mut RcBox<T>;
assert!(!ptr::is_null(ptr));
intrinsics::move_val_init(&mut *ptr, RcBox{value: value, count: 1});
Rc{ptr: ptr, non_owned: None}
Rc{ptr: ptr}
}
}

Expand Down Expand Up @@ -64,7 +64,7 @@ impl<T: Owned> Clone for Rc<T> {
fn clone(&self) -> Rc<T> {
unsafe {
(*self.ptr).count += 1;
Rc{ptr: self.ptr, non_owned: None}
Rc{ptr: self.ptr}
}
}
}
Expand Down Expand Up @@ -113,9 +113,10 @@ struct RcMutBox<T> {
}

/// Mutable reference counted pointer type
#[non_owned]
#[mutable]
pub struct RcMut<T> {
priv ptr: *mut RcMutBox<T>,
priv non_owned: Option<@mut ()> // FIXME: #5601: replace with `#[non_owned]` and `#[non_const]`
}

pub impl<'self, T: Owned> RcMut<T> {
Expand All @@ -124,7 +125,7 @@ pub impl<'self, T: Owned> RcMut<T> {
let ptr = malloc(sys::size_of::<RcMutBox<T>>() as size_t) as *mut RcMutBox<T>;
assert!(!ptr::is_null(ptr));
intrinsics::move_val_init(&mut *ptr, RcMutBox{value: value, count: 1, borrow: Nothing});
RcMut{ptr: ptr, non_owned: None}
RcMut{ptr: ptr}
}
}

Expand Down Expand Up @@ -171,7 +172,7 @@ impl<T: Owned> Clone for RcMut<T> {
fn clone(&self) -> RcMut<T> {
unsafe {
(*self.ptr).count += 1;
RcMut{ptr: self.ptr, non_owned: None}
RcMut{ptr: self.ptr}
}
}
}
Expand Down

0 comments on commit 625e518

Please sign in to comment.