Skip to content

Commit 9689896

Browse files
committed
---
yaml --- r: 97715 b: refs/heads/snap-stage3 c: 149fc76 h: refs/heads/master i: 97713: 9d68c9b 97711: a3c2c98 v: v3
1 parent ca3e2f2 commit 9689896

Some content is hidden

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

51 files changed

+424
-297
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: 0da105a8b7b6b1e0568e8ff20f6ff4b13cc7ecc2
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4-
refs/heads/snap-stage3: 86c60b68f996c45565543370b9fb93f2ce14865d
4+
refs/heads/snap-stage3: 149fc76698318f8f7cdfaa37a818e347721764e7
55
refs/heads/try: c274a6888410ce3e357e014568b43310ed787d36
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b

branches/snap-stage3/Makefile.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,7 @@ export CFG_PREFIX
418418
export CFG_LIBDIR
419419
export CFG_RUSTLIBDIR
420420
export CFG_LIBDIR_RELATIVE
421+
export CFG_DISABLE_INJECT_STD_VERSION
421422

422423
######################################################################
423424
# Subprograms

branches/snap-stage3/configure

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,7 @@ opt clang 0 "prefer clang to gcc for building the runtime"
381381
opt ccache 0 "invoke gcc/clang via ccache to reuse object files between builds"
382382
opt local-rust 0 "use an installed rustc rather than downloading a snapshot"
383383
opt pax-flags 0 "apply PaX flags to rustc binaries (required for GRSecurity/PaX-patched kernels)"
384+
opt inject-std-version 1 "inject the current compiler version of libstd into programs"
384385
valopt prefix "/usr/local" "set installation prefix"
385386
valopt local-rust-root "/usr/local" "set prefix for local rust binary"
386387
valopt llvm-root "" "set LLVM root"
@@ -1042,6 +1043,7 @@ putvar CFG_DISABLE_MANAGE_SUBMODULES
10421043
putvar CFG_ANDROID_CROSS_PATH
10431044
putvar CFG_MINGW32_CROSS_PATH
10441045
putvar CFG_MANDIR
1046+
putvar CFG_DISABLE_INJECT_STD_VERSION
10451047

10461048
# Avoid spurious warnings from clang by feeding it original source on
10471049
# ccache-miss rather than preprocessed input.

branches/snap-stage3/doc/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
[Macros](guide-macros.html)
2020
[Packaging](guide-rustpkg.html)
2121
[Testing](guide-testing.html)
22-
[Conditions](guide-conditions.html)
22+
[Conditions](guide-conditions.html)
2323
[Rust's Runtime](guide-runtime.html)
2424

2525
# Libraries

branches/snap-stage3/src/libextra/comm.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ Higher level communication abstractions.
1616

1717
#[allow(missing_doc)];
1818

19+
use std::comm;
20+
1921
/// An extension of `pipes::stream` that allows both sending and receiving.
2022
pub struct DuplexStream<T, U> {
2123
priv chan: Chan<T>,
@@ -40,7 +42,7 @@ impl<T:Send,U:Send> DuplexStream<T, U> {
4042
pub fn recv(&self) -> U {
4143
self.port.recv()
4244
}
43-
pub fn try_recv(&self) -> Option<U> {
45+
pub fn try_recv(&self) -> comm::TryRecvResult<U> {
4446
self.port.try_recv()
4547
}
4648
pub fn recv_opt(&self) -> Option<U> {
@@ -77,11 +79,11 @@ impl<T: Send> SyncPort<T> {
7779
})
7880
}
7981

80-
pub fn try_recv(&self) -> Option<T> {
81-
self.duplex_stream.try_recv().map(|val| {
82-
self.duplex_stream.try_send(());
83-
val
84-
})
82+
pub fn try_recv(&self) -> comm::TryRecvResult<T> {
83+
match self.duplex_stream.try_recv() {
84+
comm::Data(t) => { self.duplex_stream.try_send(()); comm::Data(t) }
85+
state => state,
86+
}
8587
}
8688
}
8789

branches/snap-stage3/src/libextra/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ Rust extras are part of the standard Rust distribution.
2020
2121
*/
2222

23-
#[crate_id = "extra#0.10-pre"];
23+
// NOTE: upgrade to 0.10-pre after the next snapshot
24+
#[crate_id = "extra#0.9"];
2425
#[comment = "Rust extras"];
2526
#[license = "MIT/ASL2"];
2627
#[crate_type = "rlib"];

branches/snap-stage3/src/libextra/sync.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020

2121
use std::borrow;
22+
use std::comm;
2223
use std::unstable::sync::Exclusive;
2324
use std::sync::arc::UnsafeArc;
2425
use std::sync::atomics;
@@ -49,7 +50,7 @@ impl WaitQueue {
4950
// Signals one live task from the queue.
5051
fn signal(&self) -> bool {
5152
match self.head.try_recv() {
52-
Some(ch) => {
53+
comm::Data(ch) => {
5354
// Send a wakeup signal. If the waiter was killed, its port will
5455
// have closed. Keep trying until we get a live task.
5556
if ch.try_send_deferred(()) {
@@ -58,20 +59,20 @@ impl WaitQueue {
5859
self.signal()
5960
}
6061
}
61-
None => false
62+
_ => false
6263
}
6364
}
6465

6566
fn broadcast(&self) -> uint {
6667
let mut count = 0;
6768
loop {
6869
match self.head.try_recv() {
69-
None => break,
70-
Some(ch) => {
70+
comm::Data(ch) => {
7171
if ch.try_send_deferred(()) {
7272
count += 1;
7373
}
7474
}
75+
_ => break
7576
}
7677
}
7778
count

branches/snap-stage3/src/libextra/time.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1459,7 +1459,7 @@ mod tests {
14591459
}
14601460
14611461
#[test]
1462-
#[ignore(cfg(android))] // FIXME #10958
1462+
#[ignore(cfg(target_os = "android"))] // FIXME #10958
14631463
fn run_tests() {
14641464
// The tests race on tzset. So instead of having many independent
14651465
// tests, we will just call the functions now.

branches/snap-stage3/src/libgreen/macros.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#[macro_escape];
1414

1515
use std::fmt;
16-
use std::libc;
1716

1817
// Indicates whether we should perform expensive sanity checks, including rtassert!
1918
// XXX: Once the runtime matures remove the `true` below to turn off rtassert, etc.
@@ -124,6 +123,7 @@ memory and partly incapable of presentation to others.",
124123
abort();
125124

126125
fn abort() -> ! {
127-
unsafe { libc::abort() }
126+
use std::unstable::intrinsics;
127+
unsafe { intrinsics::abort() }
128128
}
129129
}

branches/snap-stage3/src/libgreen/sched.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -958,6 +958,7 @@ fn new_sched_rng() -> XorShiftRng {
958958

959959
#[cfg(test)]
960960
mod test {
961+
use std::comm;
961962
use std::task::TaskOpts;
962963
use std::rt::Runtime;
963964
use std::rt::task::Task;
@@ -1376,7 +1377,7 @@ mod test {
13761377
// This task should not be able to starve the sender;
13771378
// The sender should get stolen to another thread.
13781379
do spawn {
1379-
while port.try_recv().is_none() { }
1380+
while port.try_recv() != comm::Data(()) { }
13801381
}
13811382

13821383
chan.send(());
@@ -1393,7 +1394,7 @@ mod test {
13931394
// This task should not be able to starve the other task.
13941395
// The sends should eventually yield.
13951396
do spawn {
1396-
while port.try_recv().is_none() {
1397+
while port.try_recv() != comm::Data(()) {
13971398
chan2.send(());
13981399
}
13991400
}

branches/snap-stage3/src/librustc/back/abi.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,8 @@ pub static tydesc_field_align: uint = 1u;
4545
pub static tydesc_field_take_glue: uint = 2u;
4646
pub static tydesc_field_drop_glue: uint = 3u;
4747
pub static tydesc_field_visit_glue: uint = 4u;
48-
pub static tydesc_field_borrow_offset: uint = 5u;
49-
pub static tydesc_field_name_offset: uint = 6u;
50-
pub static n_tydesc_fields: uint = 7u;
48+
pub static tydesc_field_name_offset: uint = 5u;
49+
pub static n_tydesc_fields: uint = 6u;
5150

5251
// The two halves of a closure: code and environment.
5352
pub static fn_field_code: uint = 0u;

branches/snap-stage3/src/librustc/front/std_inject.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ use syntax::fold;
2121
use syntax::opt_vec;
2222
use syntax::util::small_vector::SmallVector;
2323

24+
// NOTE: upgrade to 0.10-pre after the next snapshot
25+
pub static VERSION: &'static str = "0.9";
26+
2427
pub fn maybe_inject_libstd_ref(sess: Session, crate: ast::Crate)
2528
-> ast::Crate {
2629
if use_std(&crate) {
@@ -53,11 +56,21 @@ struct StandardLibraryInjector {
5356
sess: Session,
5457
}
5558

59+
pub fn with_version(crate: &str) -> Option<(@str, ast::StrStyle)> {
60+
match option_env!("CFG_DISABLE_INJECT_STD_VERSION") {
61+
Some("1") => None,
62+
_ => {
63+
Some((format!("{}\\#{}", crate, VERSION).to_managed(),
64+
ast::CookedStr))
65+
}
66+
}
67+
}
68+
5669
impl fold::Folder for StandardLibraryInjector {
5770
fn fold_crate(&mut self, crate: ast::Crate) -> ast::Crate {
5871
let mut vis = ~[ast::ViewItem {
5972
node: ast::ViewItemExternMod(self.sess.ident_of("std"),
60-
None,
73+
with_version("std"),
6174
ast::DUMMY_NODE_ID),
6275
attrs: ~[],
6376
vis: ast::Private,
@@ -67,15 +80,15 @@ impl fold::Folder for StandardLibraryInjector {
6780
if use_uv(&crate) && !self.sess.building_library.get() {
6881
vis.push(ast::ViewItem {
6982
node: ast::ViewItemExternMod(self.sess.ident_of("green"),
70-
None,
83+
with_version("green"),
7184
ast::DUMMY_NODE_ID),
7285
attrs: ~[],
7386
vis: ast::Private,
7487
span: DUMMY_SP
7588
});
7689
vis.push(ast::ViewItem {
7790
node: ast::ViewItemExternMod(self.sess.ident_of("rustuv"),
78-
None,
91+
with_version("rustuv"),
7992
ast::DUMMY_NODE_ID),
8093
attrs: ~[],
8194
vis: ast::Private,

branches/snap-stage3/src/librustc/front/test.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use driver::session;
1515
use front::config;
16+
use front::std_inject::with_version;
1617

1718
use std::cell::RefCell;
1819
use std::vec;
@@ -292,7 +293,7 @@ fn mk_std(cx: &TestCtxt) -> ast::ViewItem {
292293
ast::DUMMY_NODE_ID))])
293294
} else {
294295
ast::ViewItemExternMod(id_extra,
295-
None,
296+
with_version("extra"),
296297
ast::DUMMY_NODE_ID)
297298
};
298299
ast::ViewItem {

branches/snap-stage3/src/librustc/middle/trans/_match.rs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1584,14 +1584,9 @@ fn compile_submatch_continue<'r,
15841584
}
15851585

15861586
if any_uniq_pat(m, col) {
1587-
let pat_ty = node_id_type(bcx, pat_id);
15881587
let llbox = Load(bcx, val);
1589-
let unboxed = match ty::get(pat_ty).sty {
1590-
ty::ty_uniq(..) if !ty::type_contents(bcx.tcx(), pat_ty).owns_managed() => llbox,
1591-
_ => GEPi(bcx, llbox, [0u, abi::box_field_body])
1592-
};
15931588
compile_submatch(bcx, enter_uniq(bcx, dm, m, col, val),
1594-
vec::append(~[unboxed], vals_left), chk);
1589+
vec::append(~[llbox], vals_left), chk);
15951590
return;
15961591
}
15971592

@@ -2231,13 +2226,8 @@ fn bind_irrefutable_pat<'a>(
22312226
}
22322227
}
22332228
ast::PatUniq(inner) => {
2234-
let pat_ty = node_id_type(bcx, pat.id);
22352229
let llbox = Load(bcx, val);
2236-
let unboxed = match ty::get(pat_ty).sty {
2237-
ty::ty_uniq(..) if !ty::type_contents(bcx.tcx(), pat_ty).owns_managed() => llbox,
2238-
_ => GEPi(bcx, llbox, [0u, abi::box_field_body])
2239-
};
2240-
bcx = bind_irrefutable_pat(bcx, inner, unboxed, binding_mode);
2230+
bcx = bind_irrefutable_pat(bcx, inner, llbox, binding_mode);
22412231
}
22422232
ast::PatRegion(inner) => {
22432233
let loaded_val = Load(bcx, val);

branches/snap-stage3/src/librustc/middle/trans/base.rs

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ pub fn malloc_raw_dyn<'a>(
368368
} else {
369369
// we treat ~fn, @fn and @[] as @ here, which isn't ideal
370370
let langcall = match heap {
371-
heap_managed | heap_managed_unique => {
371+
heap_managed => {
372372
require_alloc_fn(bcx, t, MallocFnLangItem)
373373
}
374374
heap_exchange_closure => {
@@ -392,9 +392,7 @@ pub fn malloc_raw_dyn<'a>(
392392
langcall,
393393
[tydesc, size],
394394
None);
395-
let r = rslt(r.bcx, PointerCast(r.bcx, r.val, llty));
396-
maybe_set_managed_unique_rc(r.bcx, r.val, heap);
397-
r
395+
rslt(r.bcx, PointerCast(r.bcx, r.val, llty))
398396
}
399397
}
400398

@@ -441,27 +439,6 @@ pub fn malloc_general<'a>(bcx: &'a Block, t: ty::t, heap: heap)
441439
malloc_general_dyn(bcx, t, heap, llsize_of(bcx.ccx(), ty))
442440
}
443441

444-
pub fn heap_for_unique(bcx: &Block, t: ty::t) -> heap {
445-
if ty::type_contents(bcx.tcx(), t).owns_managed() {
446-
heap_managed_unique
447-
} else {
448-
heap_exchange
449-
}
450-
}
451-
452-
pub fn maybe_set_managed_unique_rc(bcx: &Block, bx: ValueRef, heap: heap) {
453-
assert!(heap != heap_exchange);
454-
if heap == heap_managed_unique {
455-
// In cases where we are looking at a unique-typed allocation in the
456-
// managed heap (thus have refcount 1 from the managed allocator),
457-
// such as a ~(@foo) or such. These need to have their refcount forced
458-
// to -2 so the annihilator ignores them.
459-
let rc = GEPi(bcx, bx, [0u, abi::box_field_refcnt]);
460-
let rc_val = C_int(bcx.ccx(), -2);
461-
Store(bcx, rc_val, rc);
462-
}
463-
}
464-
465442
// Type descriptor and type glue stuff
466443

467444
pub fn get_tydesc_simple(ccx: &CrateContext, t: ty::t) -> ValueRef {

branches/snap-stage3/src/librustc/middle/trans/closure.rs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -150,14 +150,6 @@ pub fn mk_closure_tys(tcx: ty::ctxt,
150150
return cdata_ty;
151151
}
152152

153-
fn heap_for_unique_closure(bcx: &Block, t: ty::t) -> heap {
154-
if ty::type_contents(bcx.tcx(), t).owns_managed() {
155-
heap_managed_unique
156-
} else {
157-
heap_exchange_closure
158-
}
159-
}
160-
161153
pub fn allocate_cbox<'a>(
162154
bcx: &'a Block<'a>,
163155
sigil: ast::Sigil,
@@ -173,7 +165,7 @@ pub fn allocate_cbox<'a>(
173165
tcx.sess.bug("trying to trans allocation of @fn")
174166
}
175167
ast::OwnedSigil => {
176-
malloc_raw(bcx, cdata_ty, heap_for_unique_closure(bcx, cdata_ty))
168+
malloc_raw(bcx, cdata_ty, heap_exchange_closure)
177169
}
178170
ast::BorrowedSigil => {
179171
let cbox_ty = tuplify_box_ty(tcx, cdata_ty);

branches/snap-stage3/src/librustc/middle/trans/common.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ pub struct tydesc_info {
9090
tydesc: ValueRef,
9191
size: ValueRef,
9292
align: ValueRef,
93-
borrow_offset: ValueRef,
9493
name: ValueRef,
9594
take_glue: Cell<Option<ValueRef>>,
9695
drop_glue: Cell<Option<ValueRef>>,
@@ -316,7 +315,6 @@ pub fn warn_not_to_commit(ccx: &CrateContext, msg: &str) {
316315
#[deriving(Eq)]
317316
pub enum heap {
318317
heap_managed,
319-
heap_managed_unique,
320318
heap_exchange,
321319
heap_exchange_closure
322320
}
@@ -498,7 +496,7 @@ pub fn add_clean_temp_mem_in_scope_(bcx: &Block, scope_id: Option<ast::NodeId>,
498496

499497
pub fn add_clean_free(cx: &Block, ptr: ValueRef, heap: heap) {
500498
let free_fn = match heap {
501-
heap_managed | heap_managed_unique => {
499+
heap_managed => {
502500
@GCHeapFreeingCleanupFunction {
503501
ptr: ptr,
504502
} as @CleanupFunction

0 commit comments

Comments
 (0)