]> git.lizzy.rs Git - rust.git/commitdiff
Convert the test suite to use the Drop trait
authorBen Striegel <ben.striegel@gmail.com>
Wed, 14 Nov 2012 06:22:37 +0000 (01:22 -0500)
committerBrian Anderson <banderson@mozilla.com>
Thu, 15 Nov 2012 03:26:37 +0000 (19:26 -0800)
75 files changed:
src/test/auxiliary/issue-2526.rs
src/test/auxiliary/issue-3012-1.rs
src/test/auxiliary/issue2170lib.rs
src/test/auxiliary/test_comm.rs
src/test/bench/task-perf-alloc-unwind.rs
src/test/compile-fail/bind-by-move-neither-can-live-while-the-other-survives-1.rs
src/test/compile-fail/bind-by-move-neither-can-live-while-the-other-survives-2.rs
src/test/compile-fail/bind-by-move-neither-can-live-while-the-other-survives-3.rs
src/test/compile-fail/bind-by-move-neither-can-live-while-the-other-survives-4.rs
src/test/compile-fail/bind-by-move-no-lvalues-1.rs
src/test/compile-fail/bind-by-move-no-lvalues-2.rs
src/test/compile-fail/bind-by-move-no-sub-bindings.rs
src/test/compile-fail/block-must-not-have-result-res.rs
src/test/compile-fail/borrowck-borrowed-uniq-rvalue-2.rs
src/test/compile-fail/borrowck-unary-move-2.rs
src/test/compile-fail/cap-clause-illegal-cap.rs
src/test/compile-fail/copy-a-resource.rs
src/test/compile-fail/disallowed-deconstructing-destructing-struct.rs
src/test/compile-fail/functional-struct-update.rs
src/test/compile-fail/issue-2487-b.rs
src/test/compile-fail/issue-2548.rs
src/test/compile-fail/issue-2587-2.rs
src/test/compile-fail/issue-2823.rs
src/test/compile-fail/issue-2825-b.rs [deleted file]
src/test/compile-fail/issue-3214.rs
src/test/compile-fail/liveness-unused.rs
src/test/compile-fail/no-send-res-ports.rs
src/test/compile-fail/non-const.rs
src/test/compile-fail/noncopyable-class.rs
src/test/compile-fail/pinned-deep-copy.rs
src/test/compile-fail/record-with-resource.rs
src/test/compile-fail/regions-in-rsrcs.rs
src/test/compile-fail/repeat-to-run-dtor-twice.rs
src/test/compile-fail/unique-object-noncopyable.rs
src/test/compile-fail/unique-pinned-nocopy.rs
src/test/compile-fail/unique-vec-res.rs
src/test/compile-fail/vec-res-add.rs
src/test/run-fail/issue-2061.rs
src/test/run-fail/morestack2.rs
src/test/run-fail/morestack3.rs
src/test/run-fail/morestack4.rs
src/test/run-fail/rt-set-exit-status-fail2.rs
src/test/run-fail/unwind-box-res.rs
src/test/run-fail/unwind-resource-fail.rs
src/test/run-fail/unwind-resource-fail3.rs
src/test/run-pass/class-attributes-1.rs
src/test/run-pass/class-attributes-2.rs
src/test/run-pass/class-dtor.rs
src/test/run-pass/init-res-into-things.rs
src/test/run-pass/issue-2487-a.rs
src/test/run-pass/issue-2708.rs
src/test/run-pass/issue-2718.rs
src/test/run-pass/issue-2735-2.rs
src/test/run-pass/issue-2735-3.rs
src/test/run-pass/issue-2895.rs
src/test/run-pass/issue-3220.rs
src/test/run-pass/issue-979.rs
src/test/run-pass/option-unwrap.rs
src/test/run-pass/pipe-presentation-examples.rs
src/test/run-pass/resource-assign-is-not-copy.rs
src/test/run-pass/resource-cycle.rs
src/test/run-pass/resource-cycle2.rs
src/test/run-pass/resource-cycle3.rs
src/test/run-pass/resource-destruct.rs
src/test/run-pass/resource-generic.rs
src/test/run-pass/resource-in-struct.rs
src/test/run-pass/send-resource.rs
src/test/run-pass/struct-literal-dtor.rs
src/test/run-pass/task-compare.rs
src/test/run-pass/task-killjoin-rsrc.rs
src/test/run-pass/type-param-constraints.rs
src/test/run-pass/unique-pinned-nocopy-2.rs
src/test/run-pass/unwind-resource.rs
src/test/run-pass/unwind-resource2.rs
src/test/run-pass/vec-slice-drop.rs

index 8352c3163a2a8b3ada6502695146d11e94f7849d..d17de197e24a97e5582578997a301f864e6ecbfa 100644 (file)
@@ -9,7 +9,10 @@
 
 struct arc_destruct<T:Const> {
   _data: int,
-  drop {}
+}
+
+impl<T:Const> arc_destruct<T> : Drop {
+    fn finalize() {}
 }
 
 fn arc_destruct<T: Const>(data: int) -> arc_destruct<T> {
@@ -28,8 +31,10 @@ fn init() -> arc_destruct<context_res> unsafe {
 
 struct context_res {
     ctx : int,
+}
 
-    drop { }
+impl context_res : Drop {
+    fn finalize() {}
 }
 
 fn context_res() -> context_res {
index d774669cd13268311dc69c2166abe36192e34505..ba123cf5254e1071cd69333ea51abe154ff8039e 100644 (file)
@@ -9,7 +9,12 @@ mod socket {
 
 struct socket_handle {
     sockfd: libc::c_int,
-    drop { /* c::close(self.sockfd); */ }
+}
+
+impl socket_handle : Drop {
+    fn finalize() {
+        /* c::close(self.sockfd); */
+    }
 }
 
     fn socket_handle(x: libc::c_int) -> socket_handle {
index 50af402a12c8492eabaf18ce2431e825a37753cf..3ce738fd5e0c6420df55f9a156cb2f570109a630 100644 (file)
@@ -5,11 +5,16 @@ fn foo(_x: i32) {
 
 struct rsrc {
   x: i32,
-  drop { foo(self.x); }
+}
+
+impl rsrc : Drop {
+    fn finalize() {
+        foo(self.x);
+    }
 }
 
 fn rsrc(x: i32) -> rsrc {
     rsrc {
         x: x
     }
-}
\ No newline at end of file
+}
index 18960d0ad8aa2db800123f77905ab6a0313c93ab..9664dc24c333578ea7eae546c5f7aa74d0b54f2d 100644 (file)
@@ -29,23 +29,28 @@ fn port<T: Send>() -> port<T> {
 
 struct port_ptr<T:Send> {
    po: *rust_port,
-   drop unsafe {
-    debug!("in the port_ptr destructor");
-       do task::unkillable {
-        let yield = 0u;
-        let yieldp = ptr::addr_of(&yield);
-        rustrt::rust_port_begin_detach(self.po, yieldp);
-        if yield != 0u {
-            task::yield();
-        }
-        rustrt::rust_port_end_detach(self.po);
+}
 
-        while rustrt::rust_port_size(self.po) > 0u as size_t {
-            recv_::<T>(self.po);
+impl<T:Send> port_ptr<T> : Drop {
+    fn finalize() {
+        unsafe {
+            debug!("in the port_ptr destructor");
+               do task::unkillable {
+                let yield = 0u;
+                let yieldp = ptr::addr_of(&yield);
+                rustrt::rust_port_begin_detach(self.po, yieldp);
+                if yield != 0u {
+                    task::yield();
+                }
+                rustrt::rust_port_end_detach(self.po);
+
+                while rustrt::rust_port_size(self.po) > 0u as size_t {
+                    recv_::<T>(self.po);
+                }
+                rustrt::del_port(self.po);
+            }
         }
-        rustrt::del_port(self.po);
     }
-  }
 }
 
 fn port_ptr<T: Send>(po: *rust_port) -> port_ptr<T> {
index 55d75ff7c82d3c9300f6317f4ed80895ac11ad3d..65fb9ec17391846ae6138973d53401c3073dbaec 100644 (file)
@@ -42,7 +42,10 @@ enum st {
 
 struct r {
   _l: @nillist,
-  drop {}
+}
+
+impl r : Drop {
+    fn finalize() {}
 }
 
 fn r(l: @nillist) -> r {
index 8a518edf736018b174cd6aba5a2eb44f55c8b748..1f7989d1ae935706be5c6ec3c4293d79f7272be7 100644 (file)
@@ -1,4 +1,10 @@
-struct X { x: (), drop { error!("destructor runs"); } }
+struct X { x: () }
+
+impl X : Drop {
+    fn finalize() {
+        error!("destructor runs");
+    }
+}
 
 fn main() {
     let x = Some(X { x: () });
index b99d4197848f84286058311013a1487b8f3cb266..598fc4b0a0805141eec1dd8fdf1231643a346f6e 100644 (file)
@@ -1,4 +1,10 @@
-struct X { x: (), drop { error!("destructor runs"); } }
+struct X { x: (), }
+
+impl X : Drop {
+    fn finalize() {
+        error!("destructor runs");
+    }
+}
 
 fn main() {
     let x = Some((X { x: () }, X { x: () }));
index 496ec09513b112ff59b44853dba7b129774a2957..1cd62e928892266016d1a2ca98f58e0601a9d694 100644 (file)
@@ -1,4 +1,10 @@
-struct X { x: (), drop { error!("destructor runs"); } }
+struct X { x: (), }
+
+impl X : Drop {
+    fn finalize() {
+        error!("destructor runs");
+    }
+}
 
 enum double_option<T,U> { some2(T,U), none2 }
 
index 93096751d5cf9bcc1f62525127d4eaaaae5a6c6a..3cd6c45af0b8a02f08e98f4e117b71082b54cf4d 100644 (file)
@@ -1,4 +1,10 @@
-struct X { x: (), drop { error!("destructor runs"); } }
+struct X { x: (), }
+
+impl X : Drop {
+    fn finalize() {
+        error!("destructor runs");
+    }
+}
 
 fn main() {
     let x = Some((X { x: () }, X { x: () }));
index 8e881d1d4295844dc0b659aa5be1a7976887a71f..29d21ee670d8bb23600d96b0b473bc26801959be 100644 (file)
@@ -1,4 +1,10 @@
-struct X { x: (), drop { error!("destructor runs"); } }
+struct X { x: (), }
+
+impl X : Drop {
+    fn finalize() {
+        error!("destructor runs");
+    }
+}
 
 fn main() {
     let x = Some(X { x: () });
index f65f5f0de6154ccd72791daf3fd4d9c4ab4b4a42..b1b38b587e8697da608c9fe8b5e71eb72a2398f8 100644 (file)
@@ -1,4 +1,11 @@
-struct X { x: (), drop { error!("destructor runs"); } }
+struct X { x: (), }
+
+impl X : Drop {
+    fn finalize() {
+        error!("destructor runs");
+    }
+}
+
 struct Y { y: Option<X> }
 
 fn main() {
index 1a511ccef53cb76a88625a41240a7595919747ea..2a36d9e0db6f69006267ddd4637e430e43cb835b 100644 (file)
@@ -1,4 +1,10 @@
-struct X { x: (), drop { error!("destructor runs"); } }
+struct X { x: (), }
+
+impl X : Drop {
+    fn finalize() {
+        error!("destructor runs");
+    }
+}
 
 fn main() {
     let x = Some(X { x: () });
index 3ab4a6a72f278d568f2faa50b62a55d13ce7458f..a282352123426cfd81942f77e6d31f82b9dafc39 100644 (file)
@@ -1,8 +1,12 @@
 // error-pattern:mismatched types: expected `()` but found `bool`
 
-struct r {
-  drop { true }
+struct r {}
+
+impl r : Drop {
+    fn finalize() {
+        true
+    }
 }
 
 fn main() {
-}
\ No newline at end of file
+}
index 6cd22b7f5350221a1f70daedf2817c5fd67f900f..4920a0239a57764f962d0fdd407e681cca5f391f 100644 (file)
@@ -1,6 +1,11 @@
 struct defer {
     x: &[&str],
-    drop { error!("%?", self.x); }
+}
+
+impl defer : Drop {
+    fn finalize() {
+        error!("%?", self.x);
+    }
 }
 
 fn defer(x: &r/[&r/str]) -> defer/&r {
index 1d1595383ee7f3f0a0a8dda1a1c39540330c8b48..b8fcf695c3fdcfaadd0c3339c5be6fcb5e51c75c 100644 (file)
@@ -1,5 +1,11 @@
 struct noncopyable {
-    i: (), drop { error!("dropped"); }
+    i: (),
+}
+
+impl noncopyable : Drop {
+    fn finalize() {
+        error!("dropped");
+    }
 }
 
 fn noncopyable() -> noncopyable {
index c5c3ff034dfc64de0e751c240f15b25f65880247..be630ec851810db70e17cc31aa52285962f64734 100644 (file)
@@ -1,6 +1,10 @@
 // error-pattern: copying a noncopyable value
 
-struct foo { x: int, drop { } }
+struct foo { x: int, }
+
+impl foo : Drop {
+    fn finalize() {}
+}
 
 fn foo(x: int) -> foo {
     foo {
index dc9237e6318003fbbccc2ca6ce8b7223ac865939..9f86b9e894a5883229ea17f84ec583b323492857 100644 (file)
@@ -2,7 +2,10 @@
 
 struct foo {
   i: int,
-  drop {}
+}
+
+impl foo : Drop {
+    fn finalize() {}
 }
 
 fn foo(i:int) -> foo {
index 0ee8bf0c7c7dc90e7e5693cffa357e73a2385daa..407b786016d60ea2b787387440da4284fb04e4d5 100644 (file)
@@ -1,6 +1,9 @@
 struct X {
     x: ~str,
-    drop {
+}
+
+impl X : Drop {
+    fn finalize() {
         error!("value: %s", self.x);
     }
 }
index 8d7913a62faa70da2cff8fecc91fc8dae5a49eeb..13012f146bf28c113026de29bfc4d3523827546b 100644 (file)
@@ -1,6 +1,11 @@
 struct Bar {
     x: int,
-    drop { io::println("Goodbye, cruel world"); }
+}
+
+impl Bar : Drop {
+    fn finalize() {
+        io::println("Goodbye, cruel world");
+    }
 }
 
 struct Foo {
index acf85de8bd7072fd38ca8056c25e958dedfa7421..5476ab240007fd3111833ae9a9eaff811918ac7e 100644 (file)
@@ -1,7 +1,9 @@
 struct socket {
     sock: int,
+}
 
-    drop { }
+impl socket : Drop {
+    fn finalize() {}
 }
 
 impl socket {
index 33886b289347f404738869bd8734afc1b07cdc27..5567e5855e47b05e4be197282a67158d43e6077c 100644 (file)
@@ -4,7 +4,10 @@ struct foo {
     x: @mut int,
 
 
-    drop {
+}
+
+impl foo : Drop {
+    fn finalize() {
         io::println("Goodbye, World!");
         *self.x += 1;
     }
index 576496e736c2614b0b617573b4bebfa01a7f9ff5..375da3849f8bf5d175cd514a6c739c92d30ea00e 100644 (file)
 
 struct S {
     x: int,
-    drop {}
+}
+
+impl S : Drop {
+    fn finalize() {}
 }
 
 fn S(x: int) -> S { S { x: x } }
index 67e028dcd46d38d3057e3346165a42cb59cf361e..5b02a6da45892da4946742d04c7dcca3b3ea4566 100644 (file)
@@ -1,6 +1,9 @@
 struct C {
     x: int,
-    drop {
+}
+
+impl C : Drop {
+    fn finalize() {
         error!("dropping: %?", self.x);
     }
 }
@@ -9,4 +12,4 @@ fn main() {
     let c = C{ x: 2};
     let d = copy c; //~ ERROR copying a noncopyable value
     error!("%?", d.x);
-}
\ No newline at end of file
+}
diff --git a/src/test/compile-fail/issue-2825-b.rs b/src/test/compile-fail/issue-2825-b.rs
deleted file mode 100644 (file)
index 5ddb6b5..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-struct example {
-    x: int,
-    drop {} //~ ERROR First destructor declared
-    drop {
-        debug!("Goodbye, cruel world");
-    }
-}
-
-fn example() -> example {
-    example {
-        x: 1
-    }
-}
-
-fn main(_args: ~[~str]) {
-  let e: example = example();
-}
index 7008f8c4ce29356af1b2b366fde5412a90e6a69a..9e38c39bb72a3881d09f65def016b653aa22dbc8 100644 (file)
@@ -2,7 +2,10 @@ fn foo<T>() {
     struct foo {
         mut x: T, //~ ERROR attempt to use a type argument out of scope
         //~^ ERROR use of undeclared type name
-        drop { }
+    }
+
+    impl<T> foo<T> : Drop {
+        fn finalize() {}
     }
 }
 fn main() { }
index 473a133730a4f9103d504812cfe1565116fa38a2..3aaaa2ef16fd0a1613d480a95b6939f50dc63298 100644 (file)
@@ -50,8 +50,12 @@ fn f4b() -> int {
 // leave this in here just to trigger compile-fail:
 struct r {
     x: (),
-    drop {}
 }
+
+impl r : Drop {
+    fn finalize() {}
+}
+
 fn main() {
     let x = r { x: () };
     fn@(move x) { copy x; }; //~ ERROR copying a noncopyable value
index d0455f4d8a98b92d0cf89aa00e61ddcb3f6181a5..7f5c7e1f59b5fa4fa9765c9d1be46afaa93da23e 100644 (file)
@@ -1,7 +1,10 @@
 fn main() {
     struct foo {
       _x: comm::Port<()>,
-      drop {}
+    }
+
+    impl foo : Drop {
+        fn finalize() {}
     }
 
     fn foo(x: comm::Port<()>) -> foo {
index d2cf08fc8471b6939a8d9c8f2475fd0da1715e4a..084b357561acd59a840c38d0d7d25a2e60fb3223 100644 (file)
@@ -4,7 +4,10 @@ fn foo<T: Const>(_x: T) { }
 
 struct r {
   x:int,
-  drop {}
+}
+
+impl r : Drop {
+    fn finalize() {}
 }
 
 fn r(x:int) -> r {
@@ -15,7 +18,10 @@ fn r(x:int) -> r {
 
 struct r2 {
   x:@mut int,
-  drop {}
+}
+
+impl r2 : Drop {
+    fn finalize() {}
 }
 
 fn r2(x:@mut int) -> r2 {
index af43fe66b4b30468315827143042ae69ed76eace..0d56867225d6d4a8a59ea65813eb1be0ced2d8c9 100644 (file)
@@ -4,7 +4,10 @@
 // copied
 struct bar {
   x: int,
-  drop {}
+}
+
+impl bar : Drop {
+    fn finalize() {}
 }
 
 fn bar(x:int) -> bar {
index d17d0c7e911cbe95c38c8f6d4fb127bc38b82c4c..c95e2f0b54d1ebd53e5ff3233f0abe5e02c810a1 100644 (file)
@@ -2,7 +2,12 @@
 
 struct r {
   i: @mut int,
-  drop { *(self.i) = *(self.i) + 1; }
+}
+
+impl r : Drop {
+    fn finalize() {
+        *(self.i) = *(self.i) + 1;
+    }
 }
 
 fn r(i: @mut int) -> r {
@@ -20,4 +25,4 @@ fn main() {
         log(debug, x);
     }
     log(error, *i);
-}
\ No newline at end of file
+}
index 15821b21c4d335790abf7e9d39b2458b7f2ed01b..6bcac8f56e0a64157311751d8731e64f14d67515 100644 (file)
@@ -2,7 +2,12 @@
 
 struct my_resource {
   x: int,
-  drop { log(error, self.x); }
+}
+
+impl my_resource : Drop {
+    fn finalize() {
+        log(error, self.x);
+    }
 }
 
 fn my_resource(x: int) -> my_resource {
index 1380eed2fe911044e843f0722f23419e4bca8458..cce998bea2db7ad3fcd22b6b71cd1d9ec0d085e1 100644 (file)
@@ -1,16 +1,25 @@
 struct yes0 {
   x: &uint,
-  drop {}
+}
+
+impl yes0 : Drop {
+    fn finalize() {}
 }
 
 struct yes1 {
   x: &self/uint,
-  drop {}
+}
+
+impl yes1 : Drop {
+    fn finalize() {}
 }
 
 struct yes2 {
   x: &foo/uint, //~ ERROR named regions other than `self` are not allowed as part of a type declaration
-  drop {}
 }
 
-fn main() {}
\ No newline at end of file
+impl yes2 : Drop {
+    fn finalize() {}
+}
+
+fn main() {}
index a028e7c1e37646ec3545f9406cfd6a10787b1683..fb5b2509cb890634cea7bb9fa9cbaa9483c4c29b 100644 (file)
@@ -4,7 +4,10 @@
 struct Foo {
     x: int,
 
-    drop {
+}
+
+impl Foo : Drop {
+    fn finalize() {
         io::println("Goodbye!");
     }
 }
index 2d4c391841bf44b14316182181e67a61e4a1015d..32739a1075ae2cc89abac65c6223f6202d99ee96 100644 (file)
@@ -4,7 +4,10 @@ trait Foo {
 
 struct Bar {
     x: int,
-    drop {}
+}
+
+impl Bar : Drop {
+    fn finalize() {}
 }
 
 impl Bar : Foo {
index 83d1b8393e8546f7da167e8ce076116ced84df98..6a665c29240374898ee530497d70c41a4e66a61c 100644 (file)
@@ -2,11 +2,14 @@
 
 struct r {
   b:bool,
-  drop {}
+}
+
+impl r : Drop {
+    fn finalize() {}
 }
 
 fn main() {
     let i = move ~r { b: true };
     let j = i;
     log(debug, i);
-}
\ No newline at end of file
+}
index c89a61f12205cea9952d9aa986f57b83cd9cbaca..157b4435d077ed4eac61b1ddf616d533a1f301da 100644 (file)
@@ -2,7 +2,12 @@
 
 struct r {
   i: @mut int,
-  drop { *(self.i) = *(self.i) + 1; }
+}
+
+impl r : Drop {
+    fn finalize() {
+        *(self.i) = *(self.i) + 1;
+    }
 }
 
 fn f<T>(+i: ~[T], +j: ~[T]) {
@@ -17,4 +22,4 @@ fn main() {
     f(r1, r2);
     log(debug, (r2, *i1));
     log(debug, (r1, *i2));
-}
\ No newline at end of file
+}
index 737f0382b6260c556bc09e7c8eda45827716752f..2978b4dc32f4027a07578ebf3ed26aaf59d0948b 100644 (file)
@@ -4,7 +4,10 @@
 struct r {
   let i:int;
   new(i:int) {self.i = i;}
-  drop {}
+}
+
+impl r : Drop {
+    fn finalize() {}
 }
 
 fn main() {
index e6e18089d903631927e4a25bd725e91aea0a4867..bed54138acb4e4629144ff67138850da2938c2b0 100644 (file)
@@ -2,7 +2,10 @@
 // error-pattern: ran out of stack
 struct R {
     b: int,
-    drop {
+}
+
+impl R : Drop {
+    fn finalize() {
         let _y = R { b: self.b };
     }
 }
index d0b6f727b64a5e7f7c89282ef46c3017881d8a5a..29ea363ecaea8bb2d94ba72b0e30f763b8596b5e 100644 (file)
@@ -23,14 +23,17 @@ fn getbig_call_c_and_fail(i: int) {
 
 struct and_then_get_big_again {
   x:int,
-  drop {
-    fn getbig(i: int) {
-        if i != 0 {
-            getbig(i - 1);
+}
+
+impl and_then_get_big_again : Drop {
+    fn finalize() {
+        fn getbig(i: int) {
+            if i != 0 {
+                getbig(i - 1);
+            }
         }
+        getbig(10000);
     }
-    getbig(10000);
-  }
 }
 
 fn and_then_get_big_again(x:int) -> and_then_get_big_again {
@@ -44,4 +47,4 @@ fn main() {
         let r = and_then_get_big_again(4);
         getbig_call_c_and_fail(10000);
     };
-}
\ No newline at end of file
+}
index 120d70d9f928c55889363bcbe3bc53df7083e253..9d021b96226c4356cc2b0cd7b866f01c8edf1e2d 100644 (file)
@@ -15,14 +15,17 @@ fn getbig_and_fail(&&i: int) {
 
 struct and_then_get_big_again {
   x:int,
-  drop {
-    fn getbig(i: int) {
-        if i != 0 {
-            getbig(i - 1);
+}
+
+impl and_then_get_big_again : Drop {
+    fn finalize() {
+        fn getbig(i: int) {
+            if i != 0 {
+                getbig(i - 1);
+            }
         }
+        getbig(100);
     }
-    getbig(100);
-  }
 }
 
 fn and_then_get_big_again(x:int) -> and_then_get_big_again {
@@ -35,4 +38,4 @@ fn main() {
     do task::spawn {
         getbig_and_fail(400);
     };
-}
\ No newline at end of file
+}
index 358e59a1265d0bc70ea08b70de7316efdd079145..fac54ae250770e6778f7614a7160c11824a33321 100644 (file)
@@ -15,7 +15,10 @@ fn getbig_and_fail(&&i: int) {
 
 struct and_then_get_big_again {
   x:int,
-  drop {}
+}
+
+impl and_then_get_big_again : Drop {
+    fn finalize() {}
 }
 
 fn and_then_get_big_again(x:int) -> and_then_get_big_again {
@@ -28,4 +31,4 @@ fn main() {
     do task::spawn {
         getbig_and_fail(1);
     };
-}
\ No newline at end of file
+}
index 4551830f5fab5bb4eac5577537573760eadd2379..d8c5662e193aefb06e8ec7603e3e720e2f48e59c 100644 (file)
@@ -2,12 +2,15 @@
 
 struct r {
   x:int,
-            // Setting the exit status after the runtime has already
-            // failed has no effect and the process exits with the
-            // runtime's exit code
-  drop {
-    os::set_exit_status(50);
-  }
+}
+
+// Setting the exit status after the runtime has already
+// failed has no effect and the process exits with the
+// runtime's exit code
+impl r : Drop {
+    fn finalize() {
+        os::set_exit_status(50);
+    }
 }
 
 fn r(x:int) -> r {
@@ -22,4 +25,4 @@ fn main() {
       let i = r(5);
     };
     fail;
-}
\ No newline at end of file
+}
index ca85aa970173449fc02a57be5d4c1b5df806dda0..d9e347079f42cf562434fab3813367145265fda1 100644 (file)
@@ -6,9 +6,14 @@ fn failfn() {
 
 struct r {
   v: *int,
-  drop unsafe {
-    let _v2: ~int = cast::reinterpret_cast(&self.v);
-  }
+}
+
+impl r : Drop {
+    fn finalize() {
+        unsafe {
+            let _v2: ~int = cast::reinterpret_cast(&self.v);
+        }
+    }
 }
 
 fn r(v: *int) -> r {
@@ -24,4 +29,4 @@ fn main() unsafe {
     let x = @r(i1p);
     failfn();
     log(error, x);
-}
\ No newline at end of file
+}
index 076f1280f9669f5e14362e3ad34fc033523c8bb1..fd7cb4a3d62cad38ac499fbc0d45cb4c92e56d41 100644 (file)
@@ -9,4 +9,4 @@
 fn main() {
     @0;
     let r = move r(0);
-}
\ No newline at end of file
+}
index c7eeec2e5480ac8fb70fd43750940b991033953e..0be7f5cfe8b5c11fa1b9de18628b515336907a24 100644 (file)
@@ -5,7 +5,12 @@
   let i: @int;
   new(i: @int) { self.i = i; }
   // What happens to the box pointer owned by this class?
-  drop { fail "quux"; }
+}
+
+impl faily_box : Drop {
+    fn finalize() {
+        fail "quux";
+    }
 }
 
 fn main() {
index 0c89ecaf916dc38f2b8b87c2cd70abc6f6c54612..f3f887230d24d6fab1eaf320622a02dd90b37588 100644 (file)
@@ -1,11 +1,15 @@
 // pp-exact - Make sure we actually print the attributes
 
 struct cat {
-    #[cat_dropper]
-    drop { error!("%s landed on hir feet",self.name); }
     name: ~str,
 }
 
+impl cat: Drop {
+    #[cat_dropper]
+    fn finalize() { error!("%s landed on hir feet",self.name); }
+}
+
+
 #[cat_maker]
 fn cat(name: ~str) -> cat { cat{name: name,} }
 
index 4709b2c5b5b9d830ec3430a3fc1ee1f66feb7823..5bcec8d3b0d74302176b93885e02d1c9db044c11 100644 (file)
@@ -1,10 +1,15 @@
 struct cat {
   name: ~str,
-  #[cat_dropper]
-  /**
-     Actually, cats don't always land on their feet when you drop them.
-  */
-  drop { error!("%s landed on hir feet", self.name); }
+}
+
+impl cat : Drop {
+    #[cat_dropper]
+    /**
+       Actually, cats don't always land on their feet when you drop them.
+    */
+    fn finalize() {
+        error!("%s landed on hir feet", self.name);
+    }
 }
 
 #[cat_maker]
index 5fa8a71aa54f4d6d05e5f3ac2d296558dd655253..318392921d873790712050b185262c8552fc12eb 100644 (file)
@@ -1,7 +1,12 @@
 struct cat {
   done : extern fn(uint),
   meows : uint,
-  drop { self.done(self.meows); }
+}
+
+impl cat : Drop {
+    fn finalize() {
+        self.done(self.meows);
+    }
 }
 
 fn cat(done: extern fn(uint)) -> cat {
index ca03c0736a2d0e1fbb68531ca9adf3c0b1e9f305..04520d925b1c3bb7d5daad7c581d8ff0b3bd0457 100644 (file)
@@ -3,7 +3,12 @@
 
 struct r {
   i: @mut int,
-  drop { *(self.i) = *(self.i) + 1; }
+}
+
+impl r : Drop {
+    fn finalize() {
+        *(self.i) = *(self.i) + 1;
+    }
 }
 
 fn r(i: @mut int) -> r {
index 8a21f128a99165de82ec4127ee3d6ab52b6def5b..15c46ffbaf875d27820ed23c9381448d3f88f44f 100644 (file)
@@ -1,7 +1,10 @@
 struct socket {
     sock: int,
 
-    drop { }
+}
+
+impl socket : Drop {
+    fn finalize() {}
 }
 
 impl socket {
index b2651045e52995762b086ca516450c99ea468c1c..aefcca9004b9e73353cb962d6838688dbfa466eb 100644 (file)
@@ -3,7 +3,10 @@ struct Font {
     cairo_font: uint,
     font_dtor: uint,
 
-    drop { }
+}
+
+impl Font : Drop {
+    fn finalize() {}
 }
 
 fn Font() -> Font {
index ebc601245963d68f7ea61ed09a0fc109e17d5310..14ac611e720f157b75d82f6ac0562b075b0f682c 100644 (file)
@@ -141,7 +141,10 @@ fn receiver_terminate<T: Send>(p: *packet<T>) {
 
     struct send_packet<T: Send> {
         mut p: Option<*packet<T>>,
-        drop {
+    }
+
+    impl<T: Send> send_packet<T> : Drop {
+        fn finalize() {
             if self.p != None {
                 let mut p = None;
                 p <-> self.p;
@@ -166,7 +169,10 @@ fn send_packet<T: Send>(p: *packet<T>) -> send_packet<T> {
 
     struct recv_packet<T: Send> {
         mut p: Option<*packet<T>>,
-        drop {
+    }
+
+    impl<T: Send> recv_packet<T> : Drop {
+        fn finalize() {
             if self.p != None {
                 let mut p = None;
                 p <-> self.p;
index a0406d2735f3572dce51ab40fc69f3996f95348d..86458989ffd0a735b05a0b910d7d38dd1f1bc30b 100644 (file)
@@ -1,7 +1,12 @@
 // This test should behave exactly like issue-2735-3
 struct defer {
     b: &mut bool,
-    drop { *(self.b) = true; }
+}
+
+impl defer : Drop {
+    fn finalize() {
+        *(self.b) = true;
+    }
 }
 
 fn defer(b: &r/mut bool) -> defer/&r {
index 8e4fea93491236746ef856f6d648840a76df864f..4a93de936bc0bc62e97a90aebb4f61638cf2391b 100644 (file)
@@ -1,7 +1,12 @@
 // This test should behave exactly like issue-2735-2
 struct defer {
     b: &mut bool,
-    drop { *(self.b) = true; }
+}
+
+impl defer : Drop {
+    fn finalize() {
+        *(self.b) = true;
+    }
 }
 
 fn defer(b: &r/mut bool) -> defer/&r {
index 1765e8638a637cd4c12518c335b74e5de3c89505..d15edccaa183042888f11f6323bf64e4a48b3fab 100644 (file)
@@ -7,7 +7,10 @@ struct Cat {
 
 struct Kitty {
     x: int,
-    drop {}
+}
+
+impl Kitty : Drop {
+    fn finalize() {}
 }
 
 #[cfg(target_arch = "x86_64")]
index eb3eddd2681d02b186ff3c1ac0981020a6278d72..273db8505a1ab3b41d28d321c06e2d8b042e84eb 100644 (file)
@@ -1,4 +1,9 @@
-struct thing { x: int, drop { } }
+struct thing { x: int, }
+
+impl thing : Drop {
+    fn finalize() {}
+}
+
 fn thing() -> thing {
     thing {
         x: 0
index 9b1aa574e91295133868e1c108d822303d0e6fd7..970afb0597ecfaaedda0a84c34434cd3c0a6ab7e 100644 (file)
@@ -1,6 +1,11 @@
 struct r {
   b: @mut int,
-  drop { *(self.b) += 1; }
+}
+
+impl r : Drop {
+    fn finalize() {
+        *(self.b) += 1;
+    }
 }
 
 fn r(b: @mut int) -> r {
@@ -16,4 +21,4 @@ fn main() {
     }
 
     assert *b == 1;
-}
\ No newline at end of file
+}
index 7481b06d873df11ac1bf87e1e406c9a4099942a6..d2ae1e02a41d3631eacf637ed087cc52af10935a 100644 (file)
@@ -1,7 +1,10 @@
 struct dtor {
     x: @mut int,
 
-    drop {
+}
+
+impl dtor : Drop {
+    fn finalize() {
         // abuse access to shared mutable state to write this code
         *self.x -= 1;
     }
@@ -23,4 +26,4 @@ fn main() {
     }
 
     assert *x == 0;
-}
\ No newline at end of file
+}
index cd5fcaabf5cb498f29a6b6e3b988da99bc8ffa1b..06c1734a28f731abff6e0457d11e691acc38b166 100644 (file)
@@ -66,7 +66,10 @@ macro_rules! select (
 struct Buffer {
     foo: (),
 
-    drop { }
+}
+
+impl Buffer : Drop {
+    fn finalize() {}
 }
 
 proto! double_buffer (
index f0bea875df90c30d17eda25c2e964a3bbd88ca2b..522392d99add9219ab44640ba36861055f5bc165 100644 (file)
@@ -1,6 +1,11 @@
 struct r {
   i: @mut int,
-  drop { *(self.i) += 1; }
+}
+
+impl r : Drop {
+    fn finalize() {
+        *(self.i) += 1;
+    }
 }
 
 fn r(i: @mut int) -> r {
index 893042842d0915129c0c787661ca4350d500b615..6b637e668edc4742b4ec7dcb4fda0e1bbfaf726f 100644 (file)
@@ -2,12 +2,18 @@
 
 struct r {
   v: *int,
-  drop unsafe {
-    debug!("r's dtor: self = %x, self.v = %x, self.v's value = %x",
-           cast::reinterpret_cast::<*r, uint>(&ptr::addr_of(&self)),
-           cast::reinterpret_cast::<**int, uint>(&ptr::addr_of(&(self.v))),
-           cast::reinterpret_cast::<*int, uint>(&self.v));
-    let v2: ~int = cast::reinterpret_cast(&self.v); }
+}
+
+impl r : Drop {
+    fn finalize() {
+        unsafe {
+            debug!("r's dtor: self = %x, self.v = %x, self.v's value = %x",
+              cast::reinterpret_cast::<*r, uint>(&ptr::addr_of(&self)),
+              cast::reinterpret_cast::<**int, uint>(&ptr::addr_of(&(self.v))),
+              cast::reinterpret_cast::<*int, uint>(&self.v));
+            let v2: ~int = cast::reinterpret_cast(&self.v);
+        }
+    }
 }
 
 fn r(v: *int) -> r unsafe {
index a38950e17e36aab6558b184f37a679dccbb468ba..ec04699ae986bdc28143bb108fb7711d9a64eb22 100644 (file)
@@ -8,9 +8,14 @@
 
 struct r {
   v: u,
-  drop unsafe {
-    let v2: ~int = cast::reinterpret_cast(&self.v.c);
-  }
+}
+
+impl r : Drop {
+    fn finalize() {
+        unsafe {
+            let v2: ~int = cast::reinterpret_cast(&self.v.c);
+        }
+    }
 }
 
 fn r(v: u) -> r {
index aa0f18089d9e9d3575455562b2ee8153b03724ff..22b0f1272a84c01c2a799ea676738fc37bf1574a 100644 (file)
@@ -12,10 +12,15 @@ struct r {
   v: u,
   w: int,
   x: *int,
-  drop unsafe {
-    let _v2: ~int = cast::reinterpret_cast(&self.v.c);
-    // let _v3: ~int = unsafe::reinterpret_cast(self.x);
-  }
+}
+
+impl r : Drop {
+    fn finalize() {
+        unsafe {
+            let _v2: ~int = cast::reinterpret_cast(&self.v.c);
+            // let _v3: ~int = unsafe::reinterpret_cast(self.x);
+        }
+    }
 }
 
 fn r(v: u, w: int, _x: *int) -> r unsafe {
index 2d3110c4518579fcf81533c6693bbfe39fcb8a3b..92a57004b50748d071c5bac3f6d2cea80dbf6827 100644 (file)
@@ -1,6 +1,11 @@
 struct shrinky_pointer {
   i: @@mut int,
-  drop { log(error, ~"Hello!"); **(self.i) -= 1; }
+}
+
+impl shrinky_pointer : Drop {
+    fn finalize() {
+        log(error, ~"Hello!"); **(self.i) -= 1;
+    }
 }
 
 impl shrinky_pointer {
index f109775dd7b50faa1871368dba3e777bf4928526..476f695e783db06f88167867100754ce17480333 100644 (file)
@@ -3,7 +3,12 @@
 
 struct finish<T: Copy> {
   arg: {val: T, fin: extern fn(T)},
-  drop { self.arg.fin(self.arg.val); }
+}
+
+impl<T: Copy> finish<T> : Drop {
+    fn finalize() {
+        self.arg.fin(self.arg.val);
+    }
 }
 
 fn finish<T: Copy>(arg: {val: T, fin: extern fn(T)}) -> finish<T> {
index 9c14bd462abaca5753608fb892dab72a7b473150..b350955bec0c524229457f491d50499703e31465 100644 (file)
@@ -5,8 +5,13 @@
 
 struct close_res {
   i: closable,
-  drop { *(self.i) = false; }
+
+}
+
+impl close_res : Drop {
+    fn finalize() {
+        *(self.i) = false;
+    }
 }
 
 fn close_res(i: closable) -> close_res {
index a2ef71b14124404f32ebf1b506c58adb24311ac2..ebef3f39eea6db109d05cb45ce94502ced85e63e 100644 (file)
@@ -3,7 +3,10 @@
 
 struct test {
   f: int,
-  drop {}
+}
+
+impl test : Drop {
+    fn finalize() {}
 }
 
 fn test(f: int) -> test {
@@ -24,4 +27,4 @@ fn main() {
     }
 
     p.recv().send(test(42));
-}
\ No newline at end of file
+}
index 2b56cee9f6b41efdd61cde1bb98ffb7ebddbba2a..6bc605f2a08657fcc6be561d4253bb3bed24b1f1 100644 (file)
@@ -1,6 +1,11 @@
 struct foo {
     x: ~str,
-    drop { error!("%s", self.x); }
+}
+
+impl foo : Drop {
+    fn finalize() {
+        error!("%s", self.x);
+    }
 }
 
 fn main() {
index 4b5852a1d97298eacf3ffb0d7db73889256554c3..2996ce8ff73cb06a122a8ecbd373ebb91e10a128 100644 (file)
@@ -9,7 +9,10 @@ fn child() { }
 
 struct notify {
     ch: comm::Chan<bool>, v: @mut bool,
-    drop {
+}
+
+impl notify : Drop {
+    fn finalize() {
         error!("notify: task=%? v=%x unwinding=%b b=%b",
                task::get_task(),
                ptr::addr_of(&(*(self.v))) as uint,
index 1e8da40b5b309cae01e894668a9512789c555d52..fbbdaea2c943a2cc7d02c5c25bdf3bfa671eb27a 100644 (file)
@@ -7,7 +7,10 @@
 
 struct notify {
     ch: comm::Chan<bool>, v: @mut bool,
-    drop {
+}
+
+impl notify : Drop {
+    fn finalize() {
         error!("notify: task=%? v=%x unwinding=%b b=%b",
                task::get_task(),
                ptr::addr_of(&(*(self.v))) as uint,
index 24ffc218e0b5aea672d8b954c88877b66bcebad8..3016778dea35c6e9ff8adc59c2cc2c284f4fbb44 100644 (file)
@@ -7,7 +7,10 @@ fn u_foo<T: Send>(unique: T) { }
 
 struct r {
   i: int,
-  drop {}
+}
+
+impl r : Drop {
+    fn finalize() {}
 }
 
 fn r(i:int) -> r {
index 194b74d09d1c86b96615746442963b8b219fdc50..ad7e8d20400ea21cfccff94af7eb93577345bc3a 100644 (file)
@@ -1,6 +1,11 @@
 struct r {
   i: @mut int,
-  drop { *(self.i) = *(self.i) + 1; }
+}
+
+impl r : Drop {
+    fn finalize() {
+        *(self.i) = *(self.i) + 1;
+    }
 }
 
 fn r(i: @mut int) -> r {
@@ -15,4 +20,4 @@ fn main() {
         let j = ~r(i);
     }
     assert *i == 1;
-}
\ No newline at end of file
+}
index a03564d0801ca02f7afbc1a83226800626eecb40..00ab35e9e6181fbe852ab912ca5b18dc142c41a7 100644 (file)
@@ -3,9 +3,14 @@
 
 struct complainer {
   c: comm::Chan<bool>,
-  drop { error!("About to send!");
-    comm::send(self.c, true);
-    error!("Sent!"); }
+}
+
+impl complainer : Drop {
+    fn finalize() {
+        error!("About to send!");
+        comm::send(self.c, true);
+        error!("Sent!");
+    }
 }
 
 fn complainer(c: comm::Chan<bool>) -> complainer {
index 1470d7d7169dcb68c69c3d3f89541f4fcccba04c..7a159464aabf3b19dca355429609f253dbf6979f 100644 (file)
@@ -3,7 +3,10 @@
 
 struct complainer {
   c: @int,
-  drop {}
+}
+
+impl complainer : Drop {
+    fn finalize() {}
 }
 
 fn complainer(c: @int) -> complainer {
index 5587193cc51573fe9486094894e3a0158587ca62..e057117c4a57c79fd098467f1d440444a74bffb6 100644 (file)
@@ -1,7 +1,12 @@
 // Make sure that destructors get run on slice literals
 struct foo {
     x: @mut int,
-    drop { *self.x += 1; }
+}
+
+impl foo : Drop {
+    fn finalize() {
+        *self.x += 1;
+    }
 }
 
 fn foo(x: @mut int) -> foo {