Skip to content

Commit

Permalink
Move sys::refcount to managed::refcount
Browse files Browse the repository at this point in the history
More progress on rust-lang#2240
  • Loading branch information
alexcrichton committed Oct 18, 2013
1 parent d8d1b8f commit 82f5f65
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 23 deletions.
7 changes: 7 additions & 0 deletions src/libstd/managed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,13 @@ use ptr::to_unsafe_ptr;
pub static RC_MANAGED_UNIQUE : uint = (-2) as uint;
pub static RC_IMMORTAL : uint = 0x77777777;

/// Returns the refcount of a shared box (as just before calling this)
#[inline]
pub fn refcount<T>(t: @T) -> uint {
use unstable::raw::Repr;
unsafe { (*t.repr()).ref_count }
}

/// Determine if two shared boxes point to the same object
#[inline]
pub fn ptr_eq<T>(a: @T, b: @T) -> bool {
Expand Down
10 changes: 0 additions & 10 deletions src/libstd/sys.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,12 @@
#[allow(missing_doc)];

use c_str::ToCStr;
use cast;
use libc::size_t;
use libc;
use repr;
use rt::task;
use str;

/// Returns the refcount of a shared box (as just before calling this)
#[inline]
pub fn refcount<T>(t: @T) -> uint {
unsafe {
let ref_ptr: *uint = cast::transmute_copy(&t);
*ref_ptr - 1
}
}

pub fn log_str<T>(t: &T) -> ~str {
use rt::io;
use rt::io::Decorator;
Expand Down
20 changes: 10 additions & 10 deletions src/test/run-pass/match-pattern-drop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@
enum t { make_t(@int), clam, }

fn foo(s: @int) {
info2!("{:?}", ::std::sys::refcount(s));
let count = ::std::sys::refcount(s);
info2!("{:?}", ::std::managed::refcount(s));
let count = ::std::managed::refcount(s);
let x: t = make_t(s); // ref up
assert_eq!(::std::sys::refcount(s), count + 1u);
info2!("{:?}", ::std::sys::refcount(s));
assert_eq!(::std::managed::refcount(s), count + 1u);
info2!("{:?}", ::std::managed::refcount(s));

match x {
make_t(y) => {
Expand All @@ -27,19 +27,19 @@ fn foo(s: @int) {
}
_ => { info2!("?"); fail2!(); }
}
info2!("{:?}", ::std::sys::refcount(s));
assert_eq!(::std::sys::refcount(s), count + 1u);
let _ = ::std::sys::refcount(s); // don't get bitten by last-use.
info2!("{:?}", ::std::managed::refcount(s));
assert_eq!(::std::managed::refcount(s), count + 1u);
let _ = ::std::managed::refcount(s); // don't get bitten by last-use.
}

pub fn main() {
let s: @int = @0; // ref up

let count = ::std::sys::refcount(s);
let count = ::std::managed::refcount(s);

foo(s); // ref up then down

info2!("{}", ::std::sys::refcount(s));
let count2 = ::std::sys::refcount(s);
info2!("{}", ::std::managed::refcount(s));
let count2 = ::std::managed::refcount(s);
assert_eq!(count, count2);
}
6 changes: 3 additions & 3 deletions src/test/run-pass/unique-copy-box.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@

#[allow(unused_variable)];

use std::sys;
use std::managed;

pub fn main() {
let i = ~@1;
let j = ~@2;
let rc1 = sys::refcount(*i);
let rc1 = managed::refcount(*i);
let j = i.clone();
let rc2 = sys::refcount(*i);
let rc2 = managed::refcount(*i);
error2!("rc1: {} rc2: {}", rc1, rc2);
assert_eq!(rc1 + 1u, rc2);
}

1 comment on commit 82f5f65

@thestinger
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

r+

Please sign in to comment.