about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libstd/managed.rs7
-rw-r--r--src/libstd/sys.rs10
-rw-r--r--src/test/run-pass/match-pattern-drop.rs20
-rw-r--r--src/test/run-pass/unique-copy-box.rs6
4 files changed, 20 insertions, 23 deletions
diff --git a/src/libstd/managed.rs b/src/libstd/managed.rs
index 57230b2fd24..a27c8aa4a76 100644
--- a/src/libstd/managed.rs
+++ b/src/libstd/managed.rs
@@ -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 {
diff --git a/src/libstd/sys.rs b/src/libstd/sys.rs
index 0299ca0b49a..0f38671bfc2 100644
--- a/src/libstd/sys.rs
+++ b/src/libstd/sys.rs
@@ -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;
diff --git a/src/test/run-pass/match-pattern-drop.rs b/src/test/run-pass/match-pattern-drop.rs
index 26aedf55705..416c932b6c7 100644
--- a/src/test/run-pass/match-pattern-drop.rs
+++ b/src/test/run-pass/match-pattern-drop.rs
@@ -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) => {
@@ -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);
 }
diff --git a/src/test/run-pass/unique-copy-box.rs b/src/test/run-pass/unique-copy-box.rs
index 2d91cd9b8a9..6f4c8596035 100644
--- a/src/test/run-pass/unique-copy-box.rs
+++ b/src/test/run-pass/unique-copy-box.rs
@@ -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);
 }