Skip to content

Commit 21399dc

Browse files
committed
Change resources to classes in libstd and rustc
1 parent 25aa360 commit 21399dc

File tree

8 files changed

+85
-52
lines changed

8 files changed

+85
-52
lines changed

src/libstd/c_vec.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,15 @@ enum c_vec<T> {
4141
c_vec_({ base: *mut T, len: uint, rsrc: @dtor_res})
4242
}
4343

44-
resource dtor_res(dtor: option<fn@()>) {
45-
alt dtor {
44+
class dtor_res {
45+
let dtor: option<fn@()>;
46+
new(dtor: option<fn@()>) { self.dtor = dtor; }
47+
drop {
48+
alt self.dtor {
4649
option::none { }
4750
option::some(f) { f(); }
4851
}
52+
}
4953
}
5054

5155
/*

src/libstd/net_tcp.rs

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -35,40 +35,49 @@ Encapsulates an open TCP/IP connection through libuv
3535
underlying libuv data structures when it goes out of scope. This is the
3636
data structure that is used for read/write operations over a TCP stream.
3737
"]
38-
resource tcp_socket(socket_data: @tcp_socket_data)
38+
class tcp_socket {
39+
let socket_data: @tcp_socket_data;
40+
new(socket_data: @tcp_socket_data) { self.socket_data = socket_data; }
41+
drop {
3942
unsafe {
40-
let closed_po = comm::port::<()>();
41-
let closed_ch = comm::chan(closed_po);
42-
let close_data = {
43-
closed_ch: closed_ch
44-
};
45-
let close_data_ptr = ptr::addr_of(close_data);
46-
let stream_handle_ptr = (*socket_data).stream_handle_ptr;
47-
iotask::interact((*socket_data).iotask) {|loop_ptr|
48-
log(debug, #fmt("interact dtor for tcp_socket stream %? loop %?",
43+
let closed_po = comm::port::<()>();
44+
let closed_ch = comm::chan(closed_po);
45+
let close_data = {
46+
closed_ch: closed_ch
47+
};
48+
let close_data_ptr = ptr::addr_of(close_data);
49+
let stream_handle_ptr = (*(self.socket_data)).stream_handle_ptr;
50+
iotask::interact((*(self.socket_data)).iotask) {|loop_ptr|
51+
log(debug, #fmt("interact dtor for tcp_socket stream %? loop %?",
4952
stream_handle_ptr, loop_ptr));
50-
uv::ll::set_data_for_uv_handle(stream_handle_ptr,
53+
uv::ll::set_data_for_uv_handle(stream_handle_ptr,
5154
close_data_ptr);
52-
uv::ll::close(stream_handle_ptr, tcp_socket_dtor_close_cb);
53-
};
54-
comm::recv(closed_po);
55-
log(debug, #fmt("about to free socket_data at %?", socket_data));
56-
rustrt::rust_uv_current_kernel_free(stream_handle_ptr
57-
as *libc::c_void);
58-
log(debug, "exiting dtor for tcp_socket");
55+
uv::ll::close(stream_handle_ptr, tcp_socket_dtor_close_cb);
56+
};
57+
comm::recv(closed_po);
58+
log(debug, #fmt("about to free socket_data at %?", self.socket_data));
59+
rustrt::rust_uv_current_kernel_free(stream_handle_ptr
60+
as *libc::c_void);
61+
log(debug, "exiting dtor for tcp_socket");
62+
}
63+
}
5964
}
6065

61-
resource tcp_conn_port(conn_data: @tcp_conn_port_data) unsafe {
62-
let conn_data_ptr = ptr::addr_of(*conn_data);
66+
class tcp_conn_port {
67+
let conn_data: @tcp_conn_port_data;
68+
new(conn_data: @tcp_conn_port_data) { self.conn_data = conn_data; }
69+
drop unsafe {
70+
let conn_data_ptr = ptr::addr_of(*(self.conn_data));
6371
let server_stream_ptr = ptr::addr_of((*conn_data_ptr).server_stream);
64-
let stream_closed_po = (*conn_data).stream_closed_po;
72+
let stream_closed_po = (*(self.conn_data)).stream_closed_po;
6573
let iotask = (*conn_data_ptr).iotask;
6674
iotask::interact(iotask) {|loop_ptr|
6775
log(debug, #fmt("dtor for tcp_conn_port loop: %?",
6876
loop_ptr));
6977
uv::ll::close(server_stream_ptr, tcp_nl_close_cb);
7078
}
7179
comm::recv(stream_closed_po);
80+
}
7281
}
7382

7483
#[doc="
@@ -207,7 +216,7 @@ value as the `err` variant
207216
"]
208217
fn write(sock: tcp_socket, raw_write_data: [u8])
209218
-> result::result<(), tcp_err_data> unsafe {
210-
let socket_data_ptr = ptr::addr_of(**sock);
219+
let socket_data_ptr = ptr::addr_of(*(sock.socket_data));
211220
write_common_impl(socket_data_ptr, raw_write_data)
212221
}
213222

@@ -240,7 +249,7 @@ value as the `err` variant
240249
"]
241250
fn write_future(sock: tcp_socket, raw_write_data: [u8])
242251
-> future::future<result::result<(), tcp_err_data>> unsafe {
243-
let socket_data_ptr = ptr::addr_of(**sock);
252+
let socket_data_ptr = ptr::addr_of(*(sock.socket_data));
244253
future::spawn {||
245254
write_common_impl(socket_data_ptr, raw_write_data)
246255
}
@@ -262,7 +271,7 @@ on) from until `read_stop` is called, or a `tcp_err_data` record
262271
fn read_start(sock: tcp_socket)
263272
-> result::result<comm::port<
264273
result::result<[u8], tcp_err_data>>, tcp_err_data> unsafe {
265-
let socket_data = ptr::addr_of(**sock);
274+
let socket_data = ptr::addr_of(*(sock.socket_data));
266275
read_start_common_impl(socket_data)
267276
}
268277

@@ -275,7 +284,7 @@ Stop reading from an open TCP connection; used with `read_start`
275284
"]
276285
fn read_stop(sock: tcp_socket) ->
277286
result::result<(), tcp_err_data> unsafe {
278-
let socket_data = ptr::addr_of(**sock);
287+
let socket_data = ptr::addr_of(*(sock.socket_data));
279288
read_stop_common_impl(socket_data)
280289
}
281290

@@ -295,7 +304,7 @@ read attempt. Pass `0u` to wait indefinitely
295304
"]
296305
fn read(sock: tcp_socket, timeout_msecs: uint)
297306
-> result::result<[u8],tcp_err_data> {
298-
let socket_data = ptr::addr_of(**sock);
307+
let socket_data = ptr::addr_of(*(sock.socket_data));
299308
read_common_impl(socket_data, timeout_msecs)
300309
}
301310

@@ -329,7 +338,7 @@ read attempt. Pass `0u` to wait indefinitely
329338
"]
330339
fn read_future(sock: tcp_socket, timeout_msecs: uint)
331340
-> future::future<result::result<[u8],tcp_err_data>> {
332-
let socket_data = ptr::addr_of(**sock);
341+
let socket_data = ptr::addr_of(*(sock.socket_data));
333342
future::spawn {||
334343
read_common_impl(socket_data, timeout_msecs)
335344
}
@@ -444,8 +453,8 @@ variant
444453
"]
445454
fn conn_recv(server_port: tcp_conn_port)
446455
-> result::result<tcp_socket, tcp_err_data> {
447-
let new_conn_po = (**server_port).new_conn_po;
448-
let iotask = (**server_port).iotask;
456+
let new_conn_po = (*(server_port.conn_data)).new_conn_po;
457+
let iotask = (*(server_port.conn_data)).iotask;
449458
let new_conn_result = comm::recv(new_conn_po);
450459
alt new_conn_result {
451460
ok(client_stream_ptr) {
@@ -475,8 +484,8 @@ once a new connection is recv'd. Its parameter:
475484
"]
476485
fn conn_recv_spawn(server_port: tcp_conn_port,
477486
+cb: fn~(result::result<tcp_socket, tcp_err_data>)) {
478-
let new_conn_po = (**server_port).new_conn_po;
479-
let iotask = (**server_port).iotask;
487+
let new_conn_po = (*(server_port.conn_data)).new_conn_po;
488+
let iotask = (*(server_port.conn_data)).iotask;
480489
let new_conn_result = comm::recv(new_conn_po);
481490
task::spawn {||
482491
let sock_create_result = alt new_conn_result {
@@ -507,7 +516,7 @@ connection
507516
none.
508517
"]
509518
fn conn_peek(server_port: tcp_conn_port) -> bool {
510-
let new_conn_po = (**server_port).new_conn_po;
519+
let new_conn_po = (*(server_port.conn_data)).new_conn_po;
511520
comm::peek(new_conn_po)
512521
}
513522

src/rustc/driver/rustc.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,10 @@ fn monitor(+f: fn~(diagnostic::emitter)) {
223223
diagnostic::emit(cmsp, msg, lvl);
224224
};
225225

226-
resource finally(ch: comm::chan<monitor_msg>) {
227-
comm::send(ch, done);
226+
class finally {
227+
let ch: comm::chan<monitor_msg>;
228+
new(ch: comm::chan<monitor_msg>) { self.ch = ch; }
229+
drop { comm::send(self.ch, done); }
228230
}
229231

230232
let _finally = finally(ch);

src/rustc/lib/llvm.rs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1092,8 +1092,10 @@ fn fn_ty_param_tys(fn_ty: TypeRef) -> [TypeRef] unsafe {
10921092

10931093
/* Memory-managed interface to target data. */
10941094

1095-
resource target_data_res(TD: TargetDataRef) {
1096-
llvm::LLVMDisposeTargetData(TD);
1095+
class target_data_res {
1096+
let TD: TargetDataRef;
1097+
new(TD: TargetDataRef) { self.TD = TD; }
1098+
drop { llvm::LLVMDisposeTargetData(self.TD); }
10971099
}
10981100

10991101
type target_data = {lltd: TargetDataRef, dtor: @target_data_res};
@@ -1106,8 +1108,10 @@ fn mk_target_data(string_rep: str) -> target_data {
11061108

11071109
/* Memory-managed interface to pass managers. */
11081110

1109-
resource pass_manager_res(PM: PassManagerRef) {
1110-
llvm::LLVMDisposePassManager(PM);
1111+
class pass_manager_res {
1112+
let PM: PassManagerRef;
1113+
new(PM: PassManagerRef) { self.PM = PM; }
1114+
drop { llvm::LLVMDisposePassManager(self.PM); }
11111115
}
11121116

11131117
type pass_manager = {llpm: PassManagerRef, dtor: @pass_manager_res};
@@ -1119,8 +1123,10 @@ fn mk_pass_manager() -> pass_manager {
11191123

11201124
/* Memory-managed interface to object files. */
11211125

1122-
resource object_file_res(ObjectFile: ObjectFileRef) {
1123-
llvm::LLVMDisposeObjectFile(ObjectFile);
1126+
class object_file_res {
1127+
let ObjectFile: ObjectFileRef;
1128+
new(ObjectFile: ObjectFileRef) { self.ObjectFile = ObjectFile; }
1129+
drop { llvm::LLVMDisposeObjectFile(self.ObjectFile); }
11241130
}
11251131

11261132
type object_file = {llof: ObjectFileRef, dtor: @object_file_res};
@@ -1133,8 +1139,10 @@ fn mk_object_file(llmb: MemoryBufferRef) -> option<object_file> {
11331139

11341140
/* Memory-managed interface to section iterators. */
11351141

1136-
resource section_iter_res(SI: SectionIteratorRef) {
1137-
llvm::LLVMDisposeSectionIterator(SI);
1142+
class section_iter_res {
1143+
let SI: SectionIteratorRef;
1144+
new(SI: SectionIteratorRef) { self.SI = SI; }
1145+
drop { llvm::LLVMDisposeSectionIterator(self.SI); }
11381146
}
11391147

11401148
type section_iter = {llsi: SectionIteratorRef, dtor: @section_iter_res};

src/rustc/middle/trans/base.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,13 @@ fn dup_for_join(dest: dest) -> dest {
8888
}
8989
}
9090

91-
resource icx_popper(ccx: @crate_ctxt) {
92-
if ccx.sess.count_llvm_insns() {
93-
vec::pop(*ccx.stats.llvm_insn_ctxt);
91+
class icx_popper {
92+
let ccx: @crate_ctxt;
93+
new(ccx: @crate_ctxt) { self.ccx = ccx; }
94+
drop {
95+
if self.ccx.sess.count_llvm_insns() {
96+
vec::pop(*(self.ccx.stats.llvm_insn_ctxt));
97+
}
9498
}
9599
}
96100

@@ -5186,7 +5190,7 @@ fn create_main_wrapper(ccx: @crate_ctxt, sp: span, main_llfn: ValueRef,
51865190
let llbb = str::as_c_str("top", {|buf|
51875191
llvm::LLVMAppendBasicBlock(llfn, buf)
51885192
});
5189-
let bld = *ccx.builder;
5193+
let bld = ccx.builder.B;
51905194
llvm::LLVMPositionBuilderAtEnd(bld, llbb);
51915195
let crate_map = ccx.crate_map;
51925196
let start_ty = T_fn([val_ty(rust_main), ccx.int_type, ccx.int_type,

src/rustc/middle/trans/build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import common::*;
1010
import driver::session::session;
1111

1212
fn B(cx: block) -> BuilderRef {
13-
let b = *cx.fcx.ccx.builder;
13+
let b = cx.fcx.ccx.builder.B;
1414
llvm::LLVMPositionBuilderAtEnd(b, cx.llbb);
1515
ret b;
1616
}

src/rustc/middle/trans/common.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,11 @@ type stats =
6262
llvm_insns: hashmap<str, uint>,
6363
fn_times: @mut [{ident: str, time: int}]};
6464

65-
resource BuilderRef_res(B: BuilderRef) { llvm::LLVMDisposeBuilder(B); }
65+
class BuilderRef_res {
66+
let B: BuilderRef;
67+
new(B: BuilderRef) { self.B = B; }
68+
drop { llvm::LLVMDisposeBuilder(self.B); }
69+
}
6670

6771
// Crate context. Every crate we compile has one of these.
6872
type crate_ctxt = {

src/rustc/util/common.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@ fn indent<R>(op: fn() -> R) -> R {
1414
ret r;
1515
}
1616

17-
resource _indenter(_i: ()) {
18-
#debug["<<"];
17+
class _indenter {
18+
let _i: ();
19+
new(_i: ()) { self._i = (); }
20+
drop { #debug["<<"]; }
1921
}
2022

2123
fn indenter() -> _indenter {

0 commit comments

Comments
 (0)