Skip to content

Commit be4404a

Browse files
committed
---
yaml --- r: 187853 b: refs/heads/tmp c: d9704bd h: refs/heads/master i: 187851: 23cad78 v: v3
1 parent 74d5334 commit be4404a

Some content is hidden

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

52 files changed

+964
-129
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,5 @@ refs/heads/building: 126db549b038c84269a1e4fe46f051b2c15d6970
3434
refs/heads/beta: 522d09dfecbeca1595f25ac58c6d0178bbd21d7d
3535
refs/heads/windistfix: 7608dbad651f02e837ed05eef3d74a6662a6e928
3636
refs/tags/1.0.0-alpha: e42bd6d93a1d3433c486200587f8f9e12590a4d7
37-
refs/heads/tmp: d0bb57cfc38bfa2347c4b65ee6abd20a9462847c
37+
refs/heads/tmp: d9704bdfdb3057ed2a28fcf0dd5c9165ed45189b
3838
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f

branches/tmp/src/etc/htmldocck.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@
9696
highlights for example. If you want to simply check the presence of
9797
given node or attribute, use an empty string (`""`) as a `PATTERN`.
9898
99+
* `@count PATH XPATH COUNT' checks for the occurrence of given XPath
100+
in the given file. The number of occurrences must match the given count.
101+
99102
All conditions can be negated with `!`. `@!has foo/type.NoSuch.html`
100103
checks if the given file does not exist, for example.
101104
@@ -333,6 +336,11 @@ def check_tree_text(tree, path, pat, regexp):
333336
return ret
334337

335338

339+
def check_tree_count(tree, path, count):
340+
path = normalize_xpath(path)
341+
return len(tree.findall(path)) == count
342+
343+
336344
def check(target, commands):
337345
cache = CachedFiles(target)
338346
for c in commands:
@@ -360,6 +368,13 @@ def check(target, commands):
360368
raise RuntimeError('Invalid number of @{} arguments \
361369
at line {}'.format(c.cmd, c.lineno))
362370

371+
elif c.cmd == 'count': # count test
372+
if len(c.args) == 3: # @count <path> <pat> <count> = count test
373+
ret = check_tree_count(cache.get_tree(c.args[0]), c.args[1], int(c.args[2]))
374+
else:
375+
raise RuntimeError('Invalid number of @{} arguments \
376+
at line {}'.format(c.cmd, c.lineno))
377+
363378
elif c.cmd == 'valid-html':
364379
raise RuntimeError('Unimplemented @valid-html at line {}'.format(c.lineno))
365380

branches/tmp/src/liballoc/arc.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,13 @@ pub struct Weak<T> {
139139
unsafe impl<T: Sync + Send> Send for Weak<T> { }
140140
unsafe impl<T: Sync + Send> Sync for Weak<T> { }
141141

142+
#[stable(feature = "rust1", since = "1.0.0")]
143+
impl<T: fmt::Debug> fmt::Debug for Weak<T> {
144+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
145+
write!(f, "(Weak)")
146+
}
147+
}
148+
142149
struct ArcInner<T> {
143150
strong: atomic::AtomicUsize,
144151
weak: atomic::AtomicUsize,

branches/tmp/src/libcollections/btree/node.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,7 +1085,7 @@ impl<K, V> Node<K, V> {
10851085
vals: RawItems::from_slice(self.vals()),
10861086
edges: RawItems::from_slice(self.edges()),
10871087

1088-
ptr: *self.keys as *mut u8,
1088+
ptr: Unique::new(*self.keys as *mut u8),
10891089
capacity: self.capacity(),
10901090
is_leaf: self.is_leaf()
10911091
},
@@ -1354,11 +1354,14 @@ struct MoveTraversalImpl<K, V> {
13541354
edges: RawItems<Node<K, V>>,
13551355

13561356
// For deallocation when we are done iterating.
1357-
ptr: *mut u8,
1357+
ptr: Unique<u8>,
13581358
capacity: usize,
13591359
is_leaf: bool
13601360
}
13611361

1362+
unsafe impl<K: Sync, V: Sync> Sync for MoveTraversalImpl<K, V> {}
1363+
unsafe impl<K: Send, V: Send> Send for MoveTraversalImpl<K, V> {}
1364+
13621365
impl<K, V> TraversalImpl for MoveTraversalImpl<K, V> {
13631366
type Item = (K, V);
13641367
type Edge = Node<K, V>;
@@ -1401,7 +1404,7 @@ impl<K, V> Drop for MoveTraversalImpl<K, V> {
14011404

14021405
let (alignment, size) =
14031406
calculate_allocation_generic::<K, V>(self.capacity, self.is_leaf);
1404-
unsafe { heap::deallocate(self.ptr, size, alignment) };
1407+
unsafe { heap::deallocate(*self.ptr, size, alignment) };
14051408
}
14061409
}
14071410

@@ -1425,12 +1428,12 @@ pub enum TraversalItem<K, V, E> {
14251428
/// A traversal over a node's entries and edges
14261429
pub type Traversal<'a, K, V> = AbsTraversal<ElemsAndEdges<Zip<slice::Iter<'a, K>,
14271430
slice::Iter<'a, V>>,
1428-
slice::Iter<'a, Node<K, V>>>>;
1431+
slice::Iter<'a, Node<K, V>>>>;
14291432

14301433
/// A mutable traversal over a node's entries and edges
14311434
pub type MutTraversal<'a, K, V> = AbsTraversal<ElemsAndEdges<Zip<slice::Iter<'a, K>,
14321435
slice::IterMut<'a, V>>,
1433-
slice::IterMut<'a, Node<K, V>>>>;
1436+
slice::IterMut<'a, Node<K, V>>>>;
14341437

14351438
/// An owning traversal over a node's entries and edges
14361439
pub type MoveTraversal<K, V> = AbsTraversal<MoveTraversalImpl<K, V>>;

branches/tmp/src/libcollections/linked_list.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ struct Rawlink<T> {
5151
}
5252

5353
impl<T> Copy for Rawlink<T> {}
54-
unsafe impl<T:'static+Send> Send for Rawlink<T> {}
55-
unsafe impl<T:Send+Sync> Sync for Rawlink<T> {}
54+
unsafe impl<T:Send> Send for Rawlink<T> {}
55+
unsafe impl<T:Sync> Sync for Rawlink<T> {}
5656

5757
struct Node<T> {
5858
next: Link<T>,

branches/tmp/src/libcollections/vec.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1755,6 +1755,9 @@ pub struct Drain<'a, T:'a> {
17551755
marker: PhantomData<&'a T>,
17561756
}
17571757

1758+
unsafe impl<'a, T: Sync> Sync for Drain<'a, T> {}
1759+
unsafe impl<'a, T: Send> Send for Drain<'a, T> {}
1760+
17581761
#[stable(feature = "rust1", since = "1.0.0")]
17591762
impl<'a, T> Iterator for Drain<'a, T> {
17601763
type Item = T;

branches/tmp/src/libcollections/vec_deque.rs

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ use core::cmp::Ordering;
2424
use core::default::Default;
2525
use core::fmt;
2626
use core::iter::{self, repeat, FromIterator, IntoIterator, RandomAccessIterator};
27-
use core::marker;
2827
use core::mem;
2928
use core::num::{Int, UnsignedInt};
3029
use core::ops::{Index, IndexMut};
@@ -59,12 +58,6 @@ pub struct VecDeque<T> {
5958
ptr: Unique<T>,
6059
}
6160

62-
#[stable(feature = "rust1", since = "1.0.0")]
63-
unsafe impl<T: Send> Send for VecDeque<T> {}
64-
65-
#[stable(feature = "rust1", since = "1.0.0")]
66-
unsafe impl<T: Sync> Sync for VecDeque<T> {}
67-
6861
#[stable(feature = "rust1", since = "1.0.0")]
6962
impl<T: Clone> Clone for VecDeque<T> {
7063
fn clone(&self) -> VecDeque<T> {
@@ -545,9 +538,7 @@ impl<T> VecDeque<T> {
545538
IterMut {
546539
tail: self.tail,
547540
head: self.head,
548-
cap: self.cap,
549-
ptr: *self.ptr,
550-
marker: marker::PhantomData,
541+
ring: unsafe { self.buffer_as_mut_slice() },
551542
}
552543
}
553544

@@ -1515,17 +1506,12 @@ impl<'a, T> RandomAccessIterator for Iter<'a, T> {
15151506
}
15161507
}
15171508

1518-
// FIXME This was implemented differently from Iter because of a problem
1519-
// with returning the mutable reference. I couldn't find a way to
1520-
// make the lifetime checker happy so, but there should be a way.
15211509
/// `VecDeque` mutable iterator.
15221510
#[stable(feature = "rust1", since = "1.0.0")]
15231511
pub struct IterMut<'a, T:'a> {
1524-
ptr: *mut T,
1512+
ring: &'a mut [T],
15251513
tail: usize,
15261514
head: usize,
1527-
cap: usize,
1528-
marker: marker::PhantomData<&'a mut T>,
15291515
}
15301516

15311517
#[stable(feature = "rust1", since = "1.0.0")]
@@ -1538,16 +1524,17 @@ impl<'a, T> Iterator for IterMut<'a, T> {
15381524
return None;
15391525
}
15401526
let tail = self.tail;
1541-
self.tail = wrap_index(self.tail + 1, self.cap);
1527+
self.tail = wrap_index(self.tail + 1, self.ring.len());
15421528

15431529
unsafe {
1544-
Some(&mut *self.ptr.offset(tail as isize))
1530+
let elem = self.ring.get_unchecked_mut(tail);
1531+
Some(&mut *(elem as *mut _))
15451532
}
15461533
}
15471534

15481535
#[inline]
15491536
fn size_hint(&self) -> (usize, Option<usize>) {
1550-
let len = count(self.tail, self.head, self.cap);
1537+
let len = count(self.tail, self.head, self.ring.len());
15511538
(len, Some(len))
15521539
}
15531540
}
@@ -1559,10 +1546,11 @@ impl<'a, T> DoubleEndedIterator for IterMut<'a, T> {
15591546
if self.tail == self.head {
15601547
return None;
15611548
}
1562-
self.head = wrap_index(self.head - 1, self.cap);
1549+
self.head = wrap_index(self.head - 1, self.ring.len());
15631550

15641551
unsafe {
1565-
Some(&mut *self.ptr.offset(self.head as isize))
1552+
let elem = self.ring.get_unchecked_mut(self.head);
1553+
Some(&mut *(elem as *mut _))
15661554
}
15671555
}
15681556
}

branches/tmp/src/libcore/fmt/mod.rs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,7 @@ pub trait Write {
110110
/// traits.
111111
#[stable(feature = "rust1", since = "1.0.0")]
112112
pub struct Formatter<'a> {
113-
#[cfg(not(stage0))]
114113
flags: u32,
115-
#[cfg(stage0)]
116-
flags: usize,
117114
fill: char,
118115
align: rt::v1::Alignment,
119116
width: Option<usize>,
@@ -159,13 +156,6 @@ impl<'a> ArgumentV1<'a> {
159156
}
160157
}
161158

162-
#[cfg(stage0)]
163-
#[doc(hidden)]
164-
#[stable(feature = "rust1", since = "1.0.0")]
165-
pub fn from_uint(x: &uint) -> ArgumentV1 {
166-
ArgumentV1::new(x, ArgumentV1::show_usize)
167-
}
168-
#[cfg(not(stage0))]
169159
#[doc(hidden)]
170160
#[stable(feature = "rust1", since = "1.0.0")]
171161
pub fn from_usize(x: &usize) -> ArgumentV1 {
@@ -605,14 +595,9 @@ impl<'a> Formatter<'a> {
605595
write(self.buf, fmt)
606596
}
607597

608-
#[cfg(not(stage0))]
609598
/// Flags for formatting (packed version of rt::Flag)
610599
#[stable(feature = "rust1", since = "1.0.0")]
611600
pub fn flags(&self) -> u32 { self.flags }
612-
#[cfg(stage0)]
613-
/// Flags for formatting (packed version of rt::Flag)
614-
#[stable(feature = "rust1", since = "1.0.0")]
615-
pub fn flags(&self) -> usize { self.flags }
616601

617602
/// Character used as 'fill' whenever there is alignment
618603
#[unstable(feature = "core", reason = "method was just created")]

branches/tmp/src/libcore/fmt/rt/v1.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,6 @@ pub struct FormatSpec {
3232
pub fill: char,
3333
#[stable(feature = "rust1", since = "1.0.0")]
3434
pub align: Alignment,
35-
#[cfg(stage0)]
36-
#[stable(feature = "rust1", since = "1.0.0")]
37-
pub flags: usize,
38-
#[cfg(not(stage0))]
3935
#[stable(feature = "rust1", since = "1.0.0")]
4036
pub flags: u32,
4137
#[stable(feature = "rust1", since = "1.0.0")]

branches/tmp/src/libcore/intrinsics.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,12 @@ extern "rust-intrinsic" {
241241
/// will trigger a compiler error.
242242
pub fn return_address() -> *const u8;
243243

244-
/// Returns `true` if a type requires drop glue.
244+
/// Returns `true` if the actual type given as `T` requires drop
245+
/// glue; returns `false` if the actual type provided for `T`
246+
/// implements `Copy`.
247+
///
248+
/// If the actual type neither requires drop glue nor implements
249+
/// `Copy`, then may return `true` or `false`.
245250
pub fn needs_drop<T>() -> bool;
246251

247252
/// Returns `true` if a type is managed (will be allocated on the local heap)

branches/tmp/src/libcore/iter.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ use num::{ToPrimitive, Int};
6868
use ops::{Add, Deref, FnMut};
6969
use option::Option;
7070
use option::Option::{Some, None};
71-
use marker::Sized;
71+
use marker::{Send, Sized, Sync};
7272
use usize;
7373

7474
/// An interface for dealing with "external iterators". These types of iterators
@@ -1786,6 +1786,10 @@ pub struct Peekable<I: Iterator> {
17861786
peeked: Option<I::Item>,
17871787
}
17881788

1789+
// FIXME: after #22828 being fixed, the following unsafe impl should be removed
1790+
unsafe impl<I: Iterator> Sync for Peekable<I> where I: Sync, I::Item: Sync {}
1791+
unsafe impl<I: Iterator> Send for Peekable<I> where I: Send, I::Item: Send {}
1792+
17891793
impl<I: Iterator + Clone> Clone for Peekable<I> where I::Item: Clone {
17901794
fn clone(&self) -> Peekable<I> {
17911795
Peekable {

branches/tmp/src/libcore/macros.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@ macro_rules! panic {
1515
panic!("explicit panic")
1616
);
1717
($msg:expr) => ({
18-
#[cfg(stage0)]
19-
static _MSG_FILE_LINE: (&'static str, &'static str, usize) = ($msg, file!(), line!());
20-
#[cfg(not(stage0))]
2118
static _MSG_FILE_LINE: (&'static str, &'static str, u32) = ($msg, file!(), line!());
2219
::core::panicking::panic(&_MSG_FILE_LINE)
2320
});
@@ -26,9 +23,6 @@ macro_rules! panic {
2623
// used inside a dead function. Just `#[allow(dead_code)]` is
2724
// insufficient, since the user may have
2825
// `#[forbid(dead_code)]` and which cannot be overridden.
29-
#[cfg(stage0)]
30-
static _FILE_LINE: (&'static str, usize) = (file!(), line!());
31-
#[cfg(not(stage0))]
3226
static _FILE_LINE: (&'static str, u32) = (file!(), line!());
3327
::core::panicking::panic_fmt(format_args!($fmt, $($arg)*), &_FILE_LINE)
3428
});

branches/tmp/src/libcore/panicking.rs

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -34,49 +34,20 @@ use fmt;
3434

3535
#[cold] #[inline(never)] // this is the slow path, always
3636
#[lang="panic"]
37-
#[cfg(stage0)]
38-
pub fn panic(expr_file_line: &(&'static str, &'static str, usize)) -> ! {
39-
let (expr, file, line) = *expr_file_line;
40-
panic_fmt(format_args!("{}", expr), &(file, line))
41-
}
42-
#[cold] #[inline(never)] // this is the slow path, always
43-
#[lang="panic"]
44-
#[cfg(not(stage0))]
4537
pub fn panic(expr_file_line: &(&'static str, &'static str, u32)) -> ! {
4638
let (expr, file, line) = *expr_file_line;
4739
panic_fmt(format_args!("{}", expr), &(file, line))
4840
}
4941

5042
#[cold] #[inline(never)]
5143
#[lang="panic_bounds_check"]
52-
#[cfg(stage0)]
53-
fn panic_bounds_check(file_line: &(&'static str, usize),
54-
index: usize, len: usize) -> ! {
55-
panic_fmt(format_args!("index out of bounds: the len is {} but the index is {}",
56-
len, index), file_line)
57-
}
58-
#[cold] #[inline(never)]
59-
#[lang="panic_bounds_check"]
60-
#[cfg(not(stage0))]
6144
fn panic_bounds_check(file_line: &(&'static str, u32),
6245
index: usize, len: usize) -> ! {
6346
panic_fmt(format_args!("index out of bounds: the len is {} but the index is {}",
6447
len, index), file_line)
6548
}
6649

6750
#[cold] #[inline(never)]
68-
#[cfg(stage0)]
69-
pub fn panic_fmt(fmt: fmt::Arguments, file_line: &(&'static str, usize)) -> ! {
70-
#[allow(improper_ctypes)]
71-
extern {
72-
#[lang = "panic_fmt"]
73-
fn panic_impl(fmt: fmt::Arguments, file: &'static str, line: uint) -> !;
74-
}
75-
let (file, line) = *file_line;
76-
unsafe { panic_impl(fmt, file, line as uint) }
77-
}
78-
#[cold] #[inline(never)]
79-
#[cfg(not(stage0))]
8051
pub fn panic_fmt(fmt: fmt::Arguments, file_line: &(&'static str, u32)) -> ! {
8152
#[allow(improper_ctypes)]
8253
extern {

branches/tmp/src/libcore/slice.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ use ptr;
5151
use ptr::PtrExt;
5252
use mem;
5353
use mem::size_of;
54-
use marker::{Sized, self};
54+
use marker::{Send, Sized, Sync, self};
5555
use raw::Repr;
5656
// Avoid conflicts with *both* the Slice trait (buggy) and the `slice::raw` module.
5757
use raw::Slice as RawSlice;
@@ -740,6 +740,9 @@ pub struct Iter<'a, T: 'a> {
740740
_marker: marker::PhantomData<&'a T>,
741741
}
742742

743+
unsafe impl<'a, T: Sync> Sync for Iter<'a, T> {}
744+
unsafe impl<'a, T: Sync> Send for Iter<'a, T> {}
745+
743746
#[unstable(feature = "core")]
744747
impl<'a, T> ops::Index<ops::Range<usize>> for Iter<'a, T> {
745748
type Output = [T];
@@ -830,6 +833,8 @@ pub struct IterMut<'a, T: 'a> {
830833
_marker: marker::PhantomData<&'a mut T>,
831834
}
832835

836+
unsafe impl<'a, T: Sync> Sync for IterMut<'a, T> {}
837+
unsafe impl<'a, T: Send> Send for IterMut<'a, T> {}
833838

834839
#[unstable(feature = "core")]
835840
impl<'a, T> ops::Index<ops::Range<usize>> for IterMut<'a, T> {

0 commit comments

Comments
 (0)