Skip to content

Commit 02b1c32

Browse files
committed
core: Remove struct ctors
1 parent ab9cf45 commit 02b1c32

File tree

11 files changed

+174
-67
lines changed

11 files changed

+174
-67
lines changed

src/libcore/comm.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@ fn listen<T: send, U>(f: fn(Chan<T>) -> U) -> U {
9999

100100
struct PortPtr<T:send> {
101101
let po: *rust_port;
102-
new(po: *rust_port) { self.po = po; }
103102
drop unsafe {
104103
do task::unkillable {
105104
// Once the port is detached it's guaranteed not to receive further
@@ -122,6 +121,12 @@ struct PortPtr<T:send> {
122121
}
123122
}
124123

124+
fn PortPtr<T: send>(po: *rust_port) -> PortPtr<T> {
125+
PortPtr {
126+
po: po
127+
}
128+
}
129+
125130
/**
126131
* Internal function for converting from a channel to a port
127132
*
@@ -134,14 +139,19 @@ fn as_raw_port<T: send, U>(ch: comm::Chan<T>, f: fn(*rust_port) -> U) -> U {
134139

135140
struct PortRef {
136141
let p: *rust_port;
137-
new(p: *rust_port) { self.p = p; }
138142
drop {
139143
if !ptr::is_null(self.p) {
140144
rustrt::rust_port_drop(self.p);
141145
}
142146
}
143147
}
144148

149+
fn PortRef(p: *rust_port) -> PortRef {
150+
PortRef {
151+
p: p
152+
}
153+
}
154+
145155
let p = PortRef(rustrt::rust_port_take(*ch));
146156

147157
if ptr::is_null(p.p) {

src/libcore/io.rs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -247,10 +247,15 @@ impl<T: Reader, C> {base: T, cleanup: C}: Reader {
247247

248248
struct FILERes {
249249
let f: *libc::FILE;
250-
new(f: *libc::FILE) { self.f = f; }
251250
drop { libc::fclose(self.f); }
252251
}
253252

253+
fn FILERes(f: *libc::FILE) -> FILERes {
254+
FILERes {
255+
f: f
256+
}
257+
}
258+
254259
fn FILE_reader(f: *libc::FILE, cleanup: bool) -> Reader {
255260
if cleanup {
256261
{base: f, cleanup: FILERes(f)} as Reader
@@ -417,10 +422,15 @@ impl fd_t: Writer {
417422

418423
struct FdRes {
419424
let fd: fd_t;
420-
new(fd: fd_t) { self.fd = fd; }
421425
drop { libc::close(self.fd); }
422426
}
423427

428+
fn FdRes(fd: fd_t) -> FdRes {
429+
FdRes {
430+
fd: fd
431+
}
432+
}
433+
424434
fn fd_writer(fd: fd_t, cleanup: bool) -> Writer {
425435
if cleanup {
426436
{base: fd, cleanup: FdRes(fd)} as Writer
@@ -768,7 +778,6 @@ mod fsync {
768778
// Artifacts that need to fsync on destruction
769779
struct Res<t> {
770780
let arg: Arg<t>;
771-
new(-arg: Arg<t>) { self.arg <- arg; }
772781
drop {
773782
match self.arg.opt_level {
774783
option::None => (),
@@ -780,6 +789,12 @@ mod fsync {
780789
}
781790
}
782791

792+
fn Res<t>(-arg: Arg<t>) -> Res<t>{
793+
Res {
794+
arg: move arg
795+
}
796+
}
797+
783798
type Arg<t> = {
784799
val: t,
785800
opt_level: Option<Level>,

src/libcore/option.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,9 +292,15 @@ fn test_unwrap_str() {
292292
fn test_unwrap_resource() {
293293
struct R {
294294
let i: @mut int;
295-
new(i: @mut int) { self.i = i; }
296295
drop { *(self.i) += 1; }
297296
}
297+
298+
fn R(i: @mut int) -> R {
299+
R {
300+
i: i
301+
}
302+
}
303+
298304
let i = @mut 0;
299305
{
300306
let x = R(i);

src/libcore/pipes.rs

Lines changed: 54 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,16 @@ struct BufferHeader {
135135
// get away with restricting it to 0 or 1, if we're careful.
136136
let mut ref_count: int;
137137

138-
new() { self.ref_count = 0; }
139-
140138
// We may want a drop, and to be careful about stringing this
141139
// thing along.
142140
}
143141

142+
fn BufferHeader() -> BufferHeader{
143+
BufferHeader {
144+
ref_count: 0
145+
}
146+
}
147+
144148
// XXX remove me
145149
#[cfg(stage0)]
146150
fn buffer_header() -> BufferHeader { BufferHeader() }
@@ -160,12 +164,6 @@ struct PacketHeader {
160164
// to a buffer_header if need be.
161165
let mut buffer: *libc::c_void;
162166

163-
new() {
164-
self.state = Empty;
165-
self.blocked_task = ptr::null();
166-
self.buffer = ptr::null();
167-
}
168-
169167
// Returns the old state.
170168
unsafe fn mark_blocked(this: *rust_task) -> State {
171169
rustrt::rust_task_ref(this);
@@ -197,6 +195,14 @@ struct PacketHeader {
197195
}
198196
}
199197

198+
fn PacketHeader() -> PacketHeader {
199+
PacketHeader {
200+
state: Empty,
201+
blocked_task: ptr::null(),
202+
buffer: ptr::null()
203+
}
204+
}
205+
200206
#[doc(hidden)]
201207
type Packet<T: send> = {
202208
header: PacketHeader,
@@ -368,12 +374,6 @@ unsafe fn get_buffer<T: send>(p: *PacketHeader) -> ~Buffer<T> {
368374
// This could probably be done with SharedMutableState to avoid move_it!().
369375
struct BufferResource<T: send> {
370376
let buffer: ~Buffer<T>;
371-
new(+b: ~Buffer<T>) {
372-
//let p = ptr::addr_of(*b);
373-
//error!("take %?", p);
374-
atomic_add_acq(&mut b.header.ref_count, 1);
375-
self.buffer = b;
376-
}
377377

378378
drop unsafe {
379379
let b = move_it!(self.buffer);
@@ -392,6 +392,16 @@ struct BufferResource<T: send> {
392392
}
393393
}
394394

395+
fn BufferResource<T: send>(+b: ~Buffer<T>) -> BufferResource<T> {
396+
//let p = ptr::addr_of(*b);
397+
//error!("take %?", p);
398+
atomic_add_acq(&mut b.header.ref_count, 1);
399+
400+
BufferResource {
401+
buffer: b
402+
}
403+
}
404+
395405
#[doc(hidden)]
396406
fn send<T: send, Tbuffer: send>(+p: SendPacketBuffered<T, Tbuffer>,
397407
+payload: T) -> bool {
@@ -770,15 +780,6 @@ fn send_packet<T: send>(p: *packet<T>) -> SendPacket<T> {
770780
struct SendPacketBuffered<T: send, Tbuffer: send> {
771781
let mut p: Option<*Packet<T>>;
772782
let mut buffer: Option<BufferResource<Tbuffer>>;
773-
new(p: *Packet<T>) {
774-
//debug!("take send %?", p);
775-
self.p = Some(p);
776-
unsafe {
777-
self.buffer = Some(
778-
BufferResource(
779-
get_buffer(ptr::addr_of((*p).header))));
780-
};
781-
}
782783
drop {
783784
//if self.p != none {
784785
// debug!("drop send %?", option::get(self.p));
@@ -819,6 +820,18 @@ struct SendPacketBuffered<T: send, Tbuffer: send> {
819820
}
820821
}
821822

823+
fn SendPacketBuffered<T: send, Tbuffer: send>(p: *Packet<T>)
824+
-> SendPacketBuffered<T, Tbuffer> {
825+
//debug!("take send %?", p);
826+
SendPacketBuffered {
827+
p: Some(p),
828+
buffer: unsafe {
829+
Some(BufferResource(
830+
get_buffer(ptr::addr_of((*p).header))))
831+
}
832+
}
833+
}
834+
822835
// XXX remove me
823836
#[cfg(stage0)]
824837
#[allow(non_camel_case_types)]
@@ -848,15 +861,6 @@ fn recv_packet<T: send>(p: *packet<T>) -> RecvPacket<T> {
848861
struct RecvPacketBuffered<T: send, Tbuffer: send> : Selectable {
849862
let mut p: Option<*Packet<T>>;
850863
let mut buffer: Option<BufferResource<Tbuffer>>;
851-
new(p: *Packet<T>) {
852-
//debug!("take recv %?", p);
853-
self.p = Some(p);
854-
unsafe {
855-
self.buffer = Some(
856-
BufferResource(
857-
get_buffer(ptr::addr_of((*p).header))));
858-
};
859-
}
860864
drop {
861865
//if self.p != none {
862866
// debug!("drop recv %?", option::get(self.p));
@@ -897,6 +901,18 @@ struct RecvPacketBuffered<T: send, Tbuffer: send> : Selectable {
897901
}
898902
}
899903

904+
fn RecvPacketBuffered<T: send, Tbuffer: send>(p: *Packet<T>)
905+
-> RecvPacketBuffered<T, Tbuffer> {
906+
//debug!("take recv %?", p);
907+
RecvPacketBuffered {
908+
p: Some(p),
909+
buffer: unsafe {
910+
Some(BufferResource(
911+
get_buffer(ptr::addr_of((*p).header))))
912+
}
913+
}
914+
}
915+
900916
// XXX remove me
901917
#[cfg(stage0)]
902918
#[allow(non_camel_case_types)]
@@ -1083,8 +1099,6 @@ impl<T: send> Port<T>: Recv<T> {
10831099
struct PortSet<T: send> : Recv<T> {
10841100
let mut ports: ~[pipes::Port<T>];
10851101

1086-
new() { self.ports = ~[]; }
1087-
10881102
fn add(+port: pipes::Port<T>) {
10891103
vec::push(self.ports, port)
10901104
}
@@ -1131,6 +1145,12 @@ struct PortSet<T: send> : Recv<T> {
11311145
}
11321146
}
11331147

1148+
fn PortSet<T: send>() -> PortSet<T>{
1149+
PortSet {
1150+
ports: ~[]
1151+
}
1152+
}
1153+
11341154
impl<T: send> Port<T>: Selectable {
11351155
pure fn header() -> *PacketHeader unchecked {
11361156
match self.endp {

src/libcore/priv.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,16 @@ unsafe fn weaken_task(f: fn(comm::Port<()>)) {
196196

197197
struct Unweaken {
198198
let ch: comm::Chan<()>;
199-
new(ch: comm::Chan<()>) { self.ch = ch; }
200199
drop unsafe {
201200
rustrt::rust_task_unweaken(unsafe::reinterpret_cast(&self.ch));
202201
}
203202
}
203+
204+
fn Unweaken(ch: comm::Chan<()>) -> Unweaken {
205+
Unweaken {
206+
ch: ch
207+
}
208+
}
204209
}
205210

206211
#[test]

src/libcore/rand.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,10 +245,15 @@ impl Rng {
245245

246246
struct RandRes {
247247
let c: *rctx;
248-
new(c: *rctx) { self.c = c; }
249248
drop { rustrt::rand_free(self.c); }
250249
}
251250

251+
fn RandRes(c: *rctx) -> RandRes {
252+
RandRes {
253+
c: c
254+
}
255+
}
256+
252257
impl @RandRes: Rng {
253258
fn next() -> u32 { return rustrt::rand_next((*self).c); }
254259
}

src/libcore/run.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,10 +228,15 @@ fn start_program(prog: &str, args: &[~str]) -> Program {
228228
}
229229
struct ProgRes {
230230
let r: ProgRepr;
231-
new(+r: ProgRepr) { self.r = r; }
232231
drop { destroy_repr(&self.r); }
233232
}
234233

234+
fn ProgRes(+r: ProgRepr) -> ProgRes {
235+
ProgRes {
236+
r: r
237+
}
238+
}
239+
235240
impl ProgRes: Program {
236241
fn get_id() -> pid_t { return self.r.pid; }
237242
fn input() -> io::Writer { io::fd_writer(self.r.in_fd, false) }

src/libcore/stackwalk.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ type Word = uint;
88

99
struct Frame {
1010
let fp: *Word;
11+
}
1112

12-
new(fp: *Word) {
13-
self.fp = fp;
13+
fn Frame(fp: *Word) -> Frame {
14+
Frame {
15+
fp: fp
1416
}
1517
}
1618

0 commit comments

Comments
 (0)