deque: avoid Copy in pop_{front,back}
diff --git a/src/libstd/deque.rs b/src/libstd/deque.rs
index b548623..7f8732d 100644
--- a/src/libstd/deque.rs
+++ b/src/libstd/deque.rs
@@ -45,6 +45,23 @@
 
     fn peek_front(&self) -> &self/T { get(self.elts, self.lo) }
     fn peek_back(&self) -> &self/T { get(self.elts, self.hi - 1u) }
+
+    fn pop_front(&mut self) -> T {
+        let mut result = self.elts[self.lo].swap_unwrap();
+        self.lo = (self.lo + 1u) % self.elts.len();
+        self.nelts -= 1u;
+        result
+    }
+
+    fn pop_back(&mut self) -> T {
+        if self.hi == 0u {
+            self.hi = self.elts.len() - 1u;
+        } else { self.hi -= 1u; }
+        let mut result = self.elts[self.hi].swap_unwrap();
+        self.elts[self.hi] = None;
+        self.nelts -= 1u;
+        result
+    }
 }
 
 impl<T: Copy> Deque<T> {
@@ -73,24 +90,6 @@
         self.nelts += 1u;
     }
 
-    fn pop_front(&mut self) -> T {
-        let t = { *get(self.elts, self.lo) };
-        self.elts[self.lo] = None;
-        self.lo = (self.lo + 1u) % self.elts.len();
-        self.nelts -= 1u;
-        t
-    }
-
-    fn pop_back(&mut self) -> T {
-        if self.hi == 0u {
-            self.hi = self.elts.len() - 1u;
-        } else { self.hi -= 1u; }
-        let t = { *get(self.elts, self.hi) };
-        self.elts[self.hi] = None;
-        self.nelts -= 1u;
-        t
-    }
-
     fn get(&self, i: int) -> T {
         let idx = (self.lo + (i as uint)) % self.elts.len();
         *get(self.elts, idx)