Skip to content

Commit 6e6d20a

Browse files
committed
Merge remote-tracking branch 'mozilla/incoming'
2 parents 5281771 + f60cdf2 commit 6e6d20a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+179
-124
lines changed

RELEASES.txt

+41
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,44 @@
1+
Version 0.3 (June 2012) - not yet!
2+
-----------------------------------
3+
4+
* ~1500 changes, numerous bugfixes
5+
6+
* New coding conveniences
7+
* Integer-literal suffix inference
8+
* Per-module control over warnings, errors
9+
* #[cfg(windows)] and #[cfg(unix)] attributes
10+
11+
* Semantic cleanup
12+
* Resolve pass and exhaustiveness checker rewritten
13+
* Borrow-check taking over from alias-analysis
14+
* Liveness taking over from last-use, typestate
15+
* Extensive work on region pointers
16+
17+
* Experimental new language features
18+
* Slices and fixed-size, interior-allocated vectors
19+
* #!-comments for lang versioning, shell execution
20+
* More work on classes
21+
* Type reflection
22+
23+
* Removal of various obsolete features
24+
* Keywords: be, prove, syntax, note, mutable, do, bind
25+
* Constructs: do-while loops, fn binding,
26+
27+
* Compiler reorganization
28+
* Syntax-layer of compiler split into separate crate
29+
* Clang (from LLVM project) integrated into build
30+
* Typechecker split into sub-modules
31+
32+
* New library code
33+
* New time functions
34+
* Extension methods for many built-in types
35+
* Arc: atomic-refcount read-only / exclusive-use shared cells
36+
* Par: parallel map and search routines
37+
* Extensive work on libuv interface
38+
* Much vector code moved to libraries
39+
* Syntax extensions: #line, #col, #file, #mod,
40+
#stringify, #include, #include_str, #include_bin.
41+
142
Version 0.2 (March 2012)
243
-------------------------
344

src/libcore/comm.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ fn test_recv_chan_wrong_task() {
440440
let po = port();
441441
let ch = chan(po);
442442
send(ch, "flower");
443-
assert result::is_failure(task::try {||
443+
assert result::is_err(task::try {||
444444
recv_chan(ch)
445445
})
446446
}

src/libcore/core.rs

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import option::extensions;
1111
import option_iter::extensions;
1212
import ptr::extensions;
1313
import rand::extensions;
14+
import result::extensions;
1415

1516
export path, option, some, none, unreachable;
1617
export extensions;

src/libcore/priv.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -232,5 +232,5 @@ fn test_weaken_task_fail() unsafe {
232232
fail;
233233
}
234234
};
235-
assert result::is_failure(res);
235+
assert result::is_err(res);
236236
}

src/libcore/result.rs

+30-24
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,16 @@ pure fn get_err<T, U: copy>(res: result<T, U>) -> U {
4343
}
4444

4545
#[doc = "Returns true if the result is `ok`"]
46-
pure fn is_success<T, U>(res: result<T, U>) -> bool {
46+
pure fn is_ok<T, U>(res: result<T, U>) -> bool {
4747
alt res {
4848
ok(_) { true }
4949
err(_) { false }
5050
}
5151
}
5252

53-
#[doc = "Returns true if the result is `error`"]
54-
pure fn is_failure<T, U>(res: result<T, U>) -> bool {
55-
!is_success(res)
53+
#[doc = "Returns true if the result is `err`"]
54+
pure fn is_err<T, U>(res: result<T, U>) -> bool {
55+
!is_ok(res)
5656
}
5757

5858
#[doc = "
@@ -180,22 +180,10 @@ fn map_err<T: copy, E, F: copy>(res: result<T, E>, op: fn(E) -> F)
180180
}
181181
}
182182

183-
impl extensions<T:copy, E:copy> for result<T,E> {
184-
fn get() -> T { get(self) }
185-
186-
fn get_err() -> E { get_err(self) }
187-
188-
fn is_success() -> bool { is_success(self) }
189-
190-
fn is_failure() -> bool { is_failure(self) }
191-
192-
fn chain<U:copy>(op: fn(T) -> result<U,E>) -> result<U,E> {
193-
chain(self, op)
194-
}
183+
impl extensions<T, E> for result<T, E> {
184+
fn is_ok() -> bool { is_ok(self) }
195185

196-
fn chain_err<F:copy>(op: fn(E) -> result<T,F>) -> result<T,F> {
197-
chain_err(self, op)
198-
}
186+
fn is_err() -> bool { is_err(self) }
199187

200188
fn iter(f: fn(T)) {
201189
alt self {
@@ -210,19 +198,37 @@ impl extensions<T:copy, E:copy> for result<T,E> {
210198
err(e) { f(e) }
211199
}
212200
}
201+
}
202+
203+
impl extensions<T:copy, E> for result<T, E> {
204+
fn get() -> T { get(self) }
205+
206+
fn map_err<F:copy>(op: fn(E) -> F) -> result<T,F> {
207+
alt self {
208+
ok(t) { ok(t) }
209+
err(e) { err(op(e)) }
210+
}
211+
}
212+
}
213+
214+
impl extensions<T, E:copy> for result<T, E> {
215+
fn get_err() -> E { get_err(self) }
213216

214217
fn map<U:copy>(op: fn(T) -> U) -> result<U,E> {
215218
alt self {
216219
ok(t) { ok(op(t)) }
217220
err(e) { err(e) }
218221
}
219222
}
223+
}
220224

221-
fn map_err<F:copy>(op: fn(E) -> F) -> result<T,F> {
222-
alt self {
223-
ok(t) { ok(t) }
224-
err(e) { err(op(e)) }
225-
}
225+
impl extensions<T:copy, E:copy> for result<T,E> {
226+
fn chain<U:copy>(op: fn(T) -> result<U,E>) -> result<U,E> {
227+
chain(self, op)
228+
}
229+
230+
fn chain_err<F:copy>(op: fn(E) -> result<T,F>) -> result<T,F> {
231+
chain_err(self, op)
226232
}
227233
}
228234

src/libcore/vec.rs

+16-1
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,6 @@ fn shift<T>(&v: [T]) -> T {
385385
let mut r <- *vv;
386386

387387
for uint::range(1u, ln) {|i|
388-
// FIXME (#2703): this isn't legal, per se...
389388
let r <- *ptr::offset(vv, i);
390389
push(v, r);
391390
}
@@ -397,6 +396,15 @@ fn shift<T>(&v: [T]) -> T {
397396
}
398397
}
399398

399+
#[doc = "Prepend an element to the vector"]
400+
fn unshift<T>(&v: [T], +x: T) {
401+
let mut vv = [x];
402+
v <-> vv;
403+
while len(vv) > 0 {
404+
push(v, shift(vv));
405+
}
406+
}
407+
400408
#[doc = "Remove the last element from a vector and return it"]
401409
fn pop<T>(&v: [const T]) -> T unsafe {
402410
let ln = len(v);
@@ -2198,6 +2206,13 @@ mod tests {
21982206
assert addr == addr_imm;
21992207
}
22002208

2209+
#[test]
2210+
fn test_unshift() {
2211+
let mut x = [1, 2, 3];
2212+
unshift(x, 0);
2213+
assert x == [0, 1, 2, 3];
2214+
}
2215+
22012216
#[test]
22022217
fn test_capacity() {
22032218
let mut v = [0u64];

src/libstd/net_tcp.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -813,7 +813,7 @@ fn read_common_impl(socket_data: *tcp_socket_data, timeout_msecs: uint)
813813
log(debug, "starting tcp::read");
814814
let iotask = (*socket_data).iotask;
815815
let rs_result = read_start_common_impl(socket_data);
816-
if result::is_failure(rs_result) {
816+
if result::is_err(rs_result) {
817817
let err_data = result::get_err(rs_result);
818818
result::err(err_data)
819819
}
@@ -1424,7 +1424,7 @@ mod test {
14241424

14251425
let accept_result = accept(new_conn);
14261426
log(debug, "SERVER: after accept()");
1427-
if result::is_failure(accept_result) {
1427+
if result::is_err(accept_result) {
14281428
log(debug, "SERVER: error accept connection");
14291429
let err_data = result::get_err(accept_result);
14301430
comm::send(kill_ch, some(err_data));
@@ -1465,7 +1465,7 @@ mod test {
14651465
log(debug, "SERVER: recv'd on cont_ch..leaving listen cb");
14661466
});
14671467
// err check on listen_result
1468-
if result::is_failure(listen_result) {
1468+
if result::is_err(listen_result) {
14691469
let err_data = result::get_err(listen_result);
14701470
log(debug, #fmt("SERVER: exited abnormally name %s msg %s",
14711471
err_data.err_name, err_data.err_msg));
@@ -1486,7 +1486,7 @@ mod test {
14861486
let server_ip_addr = ip::v4::parse_addr(server_ip);
14871487
let new_listener_result =
14881488
new_listener(server_ip_addr, server_port, 128u, iotask);
1489-
if result::is_failure(new_listener_result) {
1489+
if result::is_err(new_listener_result) {
14901490
let err_data = result::get_err(new_listener_result);
14911491
log(debug, #fmt("SERVER: exited abnormally name %s msg %s",
14921492
err_data.err_name, err_data.err_msg));
@@ -1498,7 +1498,7 @@ mod test {
14981498
// in a loop {}, but we're just going to take a single
14991499
// client.. get their req, write a resp and then exit
15001500
let new_conn_result = server_port.recv();
1501-
if result::is_failure(new_conn_result) {
1501+
if result::is_err(new_conn_result) {
15021502
let err_data = result::get_err(new_conn_result);
15031503
log(debug, #fmt("SERVER: exited abnormally name %s msg %s",
15041504
err_data.err_name, err_data.err_msg));
@@ -1535,7 +1535,7 @@ mod test {
15351535

15361536
log(debug, "CLIENT: starting..");
15371537
let connect_result = connect(server_ip_addr, server_port, iotask);
1538-
if result::is_failure(connect_result) {
1538+
if result::is_err(connect_result) {
15391539
log(debug, "CLIENT: failed to connect");
15401540
let err_data = result::get_err(connect_result);
15411541
log(debug, #fmt("CLIENT: connect err name: %s msg: %s",
@@ -1547,7 +1547,7 @@ mod test {
15471547
let resp_bytes = str::bytes(resp);
15481548
tcp_write_single(sock, resp_bytes);
15491549
let read_result = sock.read(0u);
1550-
if read_result.is_failure() {
1550+
if read_result.is_err() {
15511551
log(debug, "CLIENT: failure to read");
15521552
""
15531553
}
@@ -1564,7 +1564,7 @@ mod test {
15641564
fn tcp_write_single(sock: tcp_socket, val: [u8]) {
15651565
let write_result_future = sock.write_future(val);
15661566
let write_result = write_result_future.get();
1567-
if result::is_failure(write_result) {
1567+
if result::is_err(write_result) {
15681568
log(debug, "tcp_write_single: write failed!");
15691569
let err_data = result::get_err(write_result);
15701570
log(debug, #fmt("tcp_write_single err name: %s msg: %s",

src/libsyntax/ext/auto_serialize.rs

+11-8
Original file line numberDiff line numberDiff line change
@@ -452,10 +452,7 @@ fn ser_ty(cx: ext_ctxt, tps: ser_tps_map,
452452
[]
453453
}
454454

455-
ast::ty_vstore(_, _) {
456-
cx.span_unimpl(ty.span, "serialization for vstore types");
457-
}
458-
455+
ast::ty_vstore(@{node: ast::ty_vec(mt),_}, ast::vstore_uniq) |
459456
ast::ty_vec(mt) {
460457
let ser_e =
461458
cx.expr(
@@ -472,6 +469,11 @@ fn ser_ty(cx: ext_ctxt, tps: ser_tps_map,
472469
std::serialization::emit_from_vec($(s), $(v), {|__e| $(ser_e) })
473470
}]
474471
}
472+
473+
ast::ty_vstore(_, _) {
474+
cx.span_unimpl(ty.span, "serialization for vstore types");
475+
}
476+
475477
}
476478
}
477479

@@ -673,14 +675,15 @@ fn deser_ty(cx: ext_ctxt, tps: deser_tps_map,
673675
#ast{ fail }
674676
}
675677

676-
ast::ty_vstore(_, _) {
677-
cx.span_unimpl(ty.span, "deserialization for vstore types");
678-
}
679-
678+
ast::ty_vstore(@{node: ast::ty_vec(mt),_}, ast::vstore_uniq) |
680679
ast::ty_vec(mt) {
681680
let l = deser_lambda(cx, tps, mt.ty, cx.clone(d));
682681
#ast{ std::serialization::read_to_vec($(d), $(l)) }
683682
}
683+
684+
ast::ty_vstore(_, _) {
685+
cx.span_unimpl(ty.span, "deserialization for vstore types");
686+
}
684687
}
685688
}
686689

src/libsyntax/parse/parser.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1979,7 +1979,7 @@ class parser {
19791979
let rp = self.parse_region_param();
19801980
let ty_params = self.parse_ty_params();
19811981
let class_path = self.ident_to_path_tys(class_name, rp, ty_params);
1982-
let ifaces : [@iface_ref] = if self.eat_keyword("implements")
1982+
let ifaces : [@iface_ref] = if self.eat(token::COLON)
19831983
{ self.parse_iface_ref_list() }
19841984
else { [] };
19851985
self.expect(token::LBRACE);

src/libsyntax/parse/token.rs

-1
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,6 @@ fn contextual_keyword_table() -> hashmap<str, ()> {
251251
let keys = [
252252
"as",
253253
"else",
254-
"implements",
255254
"move",
256255
"of",
257256
"priv", "pub",

src/libsyntax/print/pprust.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -527,9 +527,11 @@ fn print_item(s: ps, &&item: @ast::item) {
527527
word_nbsp(s, *item.ident);
528528
print_region_param(s, rp);
529529
print_type_params(s, tps);
530-
word_space(s, "implements");
531-
commasep(s, inconsistent, ifaces, {|s, p|
532-
print_path(s, p.path, false)});
530+
if vec::len(ifaces) != 0u {
531+
word_space(s, ":");
532+
commasep(s, inconsistent, ifaces, {|s, p|
533+
print_path(s, p.path, false)});
534+
}
533535
bopen(s);
534536
hardbreak_if_not_bol(s);
535537
maybe_print_comment(s, ctor.span.lo);

src/rt/rust_builtin.cpp

+2-6
Original file line numberDiff line numberDiff line change
@@ -891,9 +891,7 @@ rust_unlock_cond_lock(rust_cond_lock *lock) {
891891
extern "C" void
892892
rust_wait_cond_lock(rust_cond_lock *lock) {
893893
rust_task *task = rust_get_current_task();
894-
#ifdef DEBUG_LOCKS
895-
assert(lock->lock.lock_held_by_current_thread());
896-
#endif
894+
lock->lock.must_have_lock();
897895
assert(NULL == lock->waiting);
898896
lock->waiting = task;
899897
task->block(lock, "waiting for signal");
@@ -905,9 +903,7 @@ rust_wait_cond_lock(rust_cond_lock *lock) {
905903

906904
extern "C" bool
907905
rust_signal_cond_lock(rust_cond_lock *lock) {
908-
#ifdef DEBUG_LOCKS
909-
assert(lock->lock.lock_held_by_current_thread());
910-
#endif
906+
lock->lock.must_have_lock();
911907
if(NULL == lock->waiting) {
912908
return false;
913909
}

src/rustc/middle/trans/base.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1797,7 +1797,6 @@ fn trans_assign_op(bcx: block, ex: @ast::expr, op: ast::binop,
17971797
arg_exprs([src]), save_in(target));
17981798

17991799
ret move_val(bcx, DROP_EXISTING, lhs_res.val,
1800-
// FIXME (#2704): should kind be owned?
18011800
{bcx: bcx, val: target, kind: owned},
18021801
dty);
18031802
}

0 commit comments

Comments
 (0)