summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2013-12-19 15:05:16 -0800
committerPatrick Walton <pcwalton@mimiga.net>2013-12-26 13:01:25 -0800
commit07dc0f3a74f3bba5620c91a12320e5bf2773f7b8 (patch)
treecbe3eb604482267af2dca76cba7d4a33288d15d5 /src/libstd
parentd40974a5fe0b1d3899647be1876ee021b8364983 (diff)
downloadrust-07dc0f3a74f3bba5620c91a12320e5bf2773f7b8.tar.gz
rust-07dc0f3a74f3bba5620c91a12320e5bf2773f7b8.zip
libstd: Make a temporary separate `stage0` implementation for `Cell` to
avoid a crash in later stages
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/cell.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/libstd/cell.rs b/src/libstd/cell.rs
index 62fc08fd9d3..c5fdddfec76 100644
--- a/src/libstd/cell.rs
+++ b/src/libstd/cell.rs
@@ -21,6 +21,33 @@ pub struct Cell<T> {
     priv value: T,
 }
 
+#[cfg(stage0)]
+impl<T> Cell<T> {
+    /// Creates a new `Cell` containing the given value.
+    pub fn new(value: T) -> Cell<T> {
+        Cell {
+            value: value,
+        }
+    }
+
+    /// Returns a copy of the contained value.
+    #[inline]
+    pub fn get(&self) -> T {
+        unsafe {
+            ::cast::transmute_copy(&self.value)
+        }
+    }
+
+    /// Sets the contained value.
+    #[inline]
+    pub fn set(&self, value: T) {
+        unsafe {
+            *cast::transmute_mut(&self.value) = value
+        }
+    }
+}
+
+#[cfg(not(stage0))]
 impl<T: ::kinds::Pod> Cell<T> {
     /// Creates a new `Cell` containing the given value.
     pub fn new(value: T) -> Cell<T> {