diff options
| author | bors <bors@rust-lang.org> | 2013-08-07 00:56:18 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-08-07 00:56:18 -0700 |
| commit | 4da1cfe92369725b2e6bf34acb1fdebdbaff9339 (patch) | |
| tree | 49b56d74ac57a6900fc250a5e04b57994b6fd011 /src/libstd/managed.rs | |
| parent | 62dbdc4ea2aa5d57d52bca4159a176942e0ad214 (diff) | |
| parent | 4f3944a34fb5b2f644a2ff6783e0af4116e5a832 (diff) | |
| download | rust-4da1cfe92369725b2e6bf34acb1fdebdbaff9339.tar.gz rust-4da1cfe92369725b2e6bf34acb1fdebdbaff9339.zip | |
auto merge of #8285 : huonw/rust/deriving+++, r=alexcrichton
Some general clean-up relating to deriving: - `TotalOrd` was too eager, and evaluated the `.cmp` call for every field, even if it could short-circuit earlier. - the pointer types didn't have impls for `TotalOrd` or `TotalEq`. - the Makefiles didn't reach deep enough into libsyntax for dependencies. (Split out from https://github.com/mozilla/rust/pull/8258.)
Diffstat (limited to 'src/libstd/managed.rs')
| -rw-r--r-- | src/libstd/managed.rs | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/libstd/managed.rs b/src/libstd/managed.rs index bd4dc69537c..57230b2fd24 100644 --- a/src/libstd/managed.rs +++ b/src/libstd/managed.rs @@ -12,7 +12,7 @@ use ptr::to_unsafe_ptr; -#[cfg(not(test))] use cmp::{Eq, Ord}; +#[cfg(not(test))] use cmp::*; pub static RC_MANAGED_UNIQUE : uint = (-2) as uint; pub static RC_IMMORTAL : uint = 0x77777777; @@ -71,6 +71,29 @@ impl<T:Ord> Ord for @mut T { fn gt(&self, other: &@mut T) -> bool { *(*self) > *(*other) } } +#[cfg(not(test))] +impl<T: TotalOrd> TotalOrd for @T { + #[inline] + fn cmp(&self, other: &@T) -> Ordering { (**self).cmp(*other) } +} + +#[cfg(not(test))] +impl<T: TotalOrd> TotalOrd for @mut T { + #[inline] + fn cmp(&self, other: &@mut T) -> Ordering { (**self).cmp(*other) } +} + +#[cfg(not(test))] +impl<T: TotalEq> TotalEq for @T { + #[inline] + fn equals(&self, other: &@T) -> bool { (**self).equals(*other) } +} + +#[cfg(not(test))] +impl<T: TotalEq> TotalEq for @mut T { + #[inline] + fn equals(&self, other: &@mut T) -> bool { (**self).equals(*other) } +} #[test] fn test() { let x = @3; |
