From eb0cf3a715cad7d0ad6d2407499356ae9dffaa7d Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 4 Sep 2012 17:22:09 -0700 Subject: [PATCH] std: Remove struct ctors --- src/libstd/arc.rs | 7 ++++++- src/libstd/c_vec.rs | 7 ++++++- src/libstd/net_tcp.rs | 14 +++++++++++-- src/libstd/sync.rs | 46 +++++++++++++++++++++++++++++++++++++------ 4 files changed, 64 insertions(+), 10 deletions(-) diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs index ce037dfec98..d8c32a26434 100644 --- a/src/libstd/arc.rs +++ b/src/libstd/arc.rs @@ -223,13 +223,18 @@ fn check_poison(is_mutex: bool, failed: bool) { #[doc(hidden)] struct PoisonOnFail { failed: &mut bool; - new(failed: &mut bool) { self.failed = failed; } drop { /* assert !*self.failed; -- might be false in case of cond.wait() */ if task::failing() { *self.failed = true; } } } +fn PoisonOnFail(failed: &r/mut bool) -> PoisonOnFail/&r { + PoisonOnFail { + failed: failed + } +} + /**************************************************************************** * R/W lock protected ARC ****************************************************************************/ diff --git a/src/libstd/c_vec.rs b/src/libstd/c_vec.rs index a7291ec27da..002029acd94 100644 --- a/src/libstd/c_vec.rs +++ b/src/libstd/c_vec.rs @@ -44,7 +44,6 @@ enum CVec { struct DtorRes { let dtor: Option; - new(dtor: Option) { self.dtor = dtor; } drop { match self.dtor { option::None => (), @@ -53,6 +52,12 @@ struct DtorRes { } } +fn DtorRes(dtor: Option) -> DtorRes { + DtorRes { + dtor: dtor + } +} + /* Section: Introduction forms */ diff --git a/src/libstd/net_tcp.rs b/src/libstd/net_tcp.rs index 496dd575f01..e1751b1762f 100644 --- a/src/libstd/net_tcp.rs +++ b/src/libstd/net_tcp.rs @@ -40,7 +40,6 @@ extern mod rustrt { */ struct TcpSocket { let socket_data: @TcpSocketData; - new(socket_data: @TcpSocketData) { self.socket_data = socket_data; } drop { unsafe { tear_down_socket_data(self.socket_data) @@ -48,6 +47,12 @@ struct TcpSocket { } } +fn TcpSocket(socket_data: @TcpSocketData) -> TcpSocket { + TcpSocket { + socket_data: socket_data + } +} + /** * A buffered wrapper for `net::tcp::tcp_socket` * @@ -56,7 +61,12 @@ struct TcpSocket { */ struct TcpSocketBuf { let data: @TcpBufferedSocketData; - new(data: @TcpBufferedSocketData) { self.data = data; } +} + +fn TcpSocketBuf(data: @TcpBufferedSocketData) -> TcpSocketBuf { + TcpSocketBuf { + data: data + } } /// Contains raw, string-based, error information returned from libuv diff --git a/src/libstd/sync.rs b/src/libstd/sync.rs index d11c3419f7a..2149d179b97 100644 --- a/src/libstd/sync.rs +++ b/src/libstd/sync.rs @@ -154,16 +154,28 @@ impl &Sem<~[mut Waitqueue]> { #[doc(hidden)] struct SemRelease { sem: &Sem<()>; - new(sem: &Sem<()>) { self.sem = sem; } drop { self.sem.release(); } } + +fn SemRelease(sem: &r/Sem<()>) -> SemRelease/&r { + SemRelease { + sem: sem + } +} + #[doc(hidden)] struct SemAndSignalRelease { sem: &Sem<~[mut Waitqueue]>; - new(sem: &Sem<~[mut Waitqueue]>) { self.sem = sem; } drop { self.sem.release(); } } +fn SemAndSignalRelease(sem: &r/Sem<~[mut Waitqueue]>) + -> SemAndSignalRelease/&r { + SemAndSignalRelease { + sem: sem + } +} + /// A mechanism for atomic-unlock-and-deschedule blocking and signalling. struct Condvar { priv sem: &Sem<~[mut Waitqueue]>; drop { } } @@ -234,7 +246,6 @@ impl &Condvar { // bounded in when it gets released, this shouldn't hang forever. struct SemAndSignalReacquire { sem: &Sem<~[mut Waitqueue]>; - new(sem: &Sem<~[mut Waitqueue]>) { self.sem = sem; } drop unsafe { // Needs to succeed, instead of itself dying. do task::unkillable { @@ -242,6 +253,14 @@ impl &Condvar { } } } + + fn SemAndSignalReacquire(sem: &r/Sem<~[mut Waitqueue]>) + -> SemAndSignalReacquire/&r { + SemAndSignalReacquire { + sem: sem + } + } + } /// Wake up a blocked task. Returns false if there was no blocked task. @@ -567,7 +586,6 @@ impl &RWlock { #[doc(hidden)] struct RWlockReleaseRead { lock: &RWlock; - new(lock: &RWlock) { self.lock = lock; } drop unsafe { do task::unkillable { let mut last_reader = false; @@ -587,11 +605,16 @@ struct RWlockReleaseRead { } } +fn RWlockReleaseRead(lock: &r/RWlock) -> RWlockReleaseRead/&r { + RWlockReleaseRead { + lock: lock + } +} + // FIXME(#3136) should go inside of downgrade() #[doc(hidden)] struct RWlockReleaseDowngrade { lock: &RWlock; - new(lock: &RWlock) { self.lock = lock; } drop unsafe { do task::unkillable { let mut writer_or_last_reader = false; @@ -618,6 +641,12 @@ struct RWlockReleaseDowngrade { } } +fn RWlockReleaseDowngrade(lock: &r/RWlock) -> RWlockReleaseDowngrade/&r { + RWlockReleaseDowngrade { + lock: lock + } +} + /// The "write permission" token used for rwlock.write_downgrade(). struct RWlockWriteMode { /* priv */ lock: &RWlock; drop { } } /// The "read permission" token used for rwlock.write_downgrade(). @@ -929,9 +958,14 @@ mod tests { } struct SendOnFailure { c: pipes::Chan<()>; - new(+c: pipes::Chan<()>) { self.c = c; } drop { self.c.send(()); } } + + fn SendOnFailure(+c: pipes::Chan<()>) -> SendOnFailure { + SendOnFailure { + c: c + } + } } #[test] fn test_mutex_cond_signal_on_0() {