2012-06-01 21:48:02 +00:00
|
|
|
// Ensures that class dtors run if the object is inside an enum
|
|
|
|
// variant
|
2011-07-29 09:44:29 +00:00
|
|
|
|
2012-03-27 01:35:18 +00:00
|
|
|
type closable = @mut bool;
|
2011-07-29 09:44:29 +00:00
|
|
|
|
2012-08-16 01:46:55 +00:00
|
|
|
struct close_res {
|
2012-09-07 02:40:15 +00:00
|
|
|
i: closable,
|
2012-11-14 06:22:37 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
impl close_res : Drop {
|
|
|
|
fn finalize() {
|
|
|
|
*(self.i) = false;
|
|
|
|
}
|
2012-06-01 21:48:02 +00:00
|
|
|
}
|
2011-07-29 09:44:29 +00:00
|
|
|
|
2012-09-05 22:58:43 +00:00
|
|
|
fn close_res(i: closable) -> close_res {
|
|
|
|
close_res {
|
|
|
|
i: i
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-01-20 02:31:08 +00:00
|
|
|
enum option<T> { none, some(T), }
|
2011-07-29 09:44:29 +00:00
|
|
|
|
2011-08-19 22:16:48 +00:00
|
|
|
fn sink(res: option<close_res>) { }
|
2011-07-29 09:44:29 +00:00
|
|
|
|
|
|
|
fn main() {
|
2012-03-27 01:35:18 +00:00
|
|
|
let c = @mut true;
|
2011-07-29 09:44:29 +00:00
|
|
|
sink(none);
|
|
|
|
sink(some(close_res(c)));
|
2011-08-19 22:16:48 +00:00
|
|
|
assert (!*c);
|
2011-07-29 09:44:29 +00:00
|
|
|
}
|