Skip to content

Commit 614e99a

Browse files
committed
---
yaml --- r: 146333 b: refs/heads/try2 c: e976de3 h: refs/heads/master i: 146331: 2cc4131 v: v3
1 parent 517ae6b commit 614e99a

File tree

18 files changed

+69
-58
lines changed

18 files changed

+69
-58
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: a6cd20bff93054d29bd232aebca59803ce64013b
8+
refs/heads/try2: e976de32dc590f759e6c0c72d286844ca373e775
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/src/libextra/treemap.rs

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ impl<K: TotalOrd, V> TreeMap<K, V> {
145145
pub fn iter<'a>(&'a self) -> TreeMapIterator<'a, K, V> {
146146
TreeMapIterator {
147147
stack: ~[],
148-
node: &self.root,
148+
node: deref(&self.root),
149149
remaining_min: self.length,
150150
remaining_max: self.length
151151
}
@@ -162,7 +162,7 @@ impl<K: TotalOrd, V> TreeMap<K, V> {
162162
fn iter_for_traversal<'a>(&'a self) -> TreeMapIterator<'a, K, V> {
163163
TreeMapIterator {
164164
stack: ~[],
165-
node: &self.root,
165+
node: deref(&self.root),
166166
remaining_min: 0,
167167
remaining_max: self.length
168168
}
@@ -173,8 +173,8 @@ impl<K: TotalOrd, V> TreeMap<K, V> {
173173
pub fn lower_bound_iter<'a>(&'a self, k: &K) -> TreeMapIterator<'a, K, V> {
174174
let mut iter: TreeMapIterator<'a, K, V> = self.iter_for_traversal();
175175
loop {
176-
match *iter.node {
177-
Some(ref r) => {
176+
match iter.node {
177+
Some(r) => {
178178
match k.cmp(&r.key) {
179179
Less => iter_traverse_left(&mut iter),
180180
Greater => iter_traverse_right(&mut iter),
@@ -197,8 +197,8 @@ impl<K: TotalOrd, V> TreeMap<K, V> {
197197
pub fn upper_bound_iter<'a>(&'a self, k: &K) -> TreeMapIterator<'a, K, V> {
198198
let mut iter: TreeMapIterator<'a, K, V> = self.iter_for_traversal();
199199
loop {
200-
match *iter.node {
201-
Some(ref r) => {
200+
match iter.node {
201+
Some(r) => {
202202
match k.cmp(&r.key) {
203203
Less => iter_traverse_left(&mut iter),
204204
Greater => iter_traverse_right(&mut iter),
@@ -229,24 +229,34 @@ impl<K: TotalOrd, V> TreeMap<K, V> {
229229

230230
/// Lazy forward iterator over a map
231231
pub struct TreeMapIterator<'self, K, V> {
232-
priv stack: ~[&'self ~TreeNode<K, V>],
233-
priv node: &'self Option<~TreeNode<K, V>>,
232+
priv stack: ~[&'self TreeNode<K, V>],
233+
priv node: Option<&'self TreeNode<K, V>>,
234234
priv remaining_min: uint,
235235
priv remaining_max: uint
236236
}
237237

238+
fn deref<'a, K, V>(node: &'a Option<~TreeNode<K, V>>) -> Option<&'a TreeNode<K, V>> {
239+
match *node {
240+
Some(ref n) => {
241+
let n: &TreeNode<K, V> = *n;
242+
Some(n)
243+
}
244+
None => None
245+
}
246+
}
247+
238248
impl<'self, K, V> TreeMapIterator<'self, K, V> {
239249
#[inline(always)]
240250
fn next_(&mut self, forward: bool) -> Option<(&'self K, &'self V)> {
241251
while !self.stack.is_empty() || self.node.is_some() {
242-
match *self.node {
243-
Some(ref x) => {
252+
match self.node {
253+
Some(x) => {
244254
self.stack.push(x);
245-
self.node = if forward { &x.left } else { &x.right };
255+
self.node = deref(if forward { &x.left } else { &x.right });
246256
}
247257
None => {
248258
let res = self.stack.pop();
249-
self.node = if forward { &res.right } else { &res.left };
259+
self.node = deref(if forward { &res.right } else { &res.left });
250260
self.remaining_max -= 1;
251261
if self.remaining_min > 0 {
252262
self.remaining_min -= 1;
@@ -302,14 +312,14 @@ impl<'self, K, V> Iterator<(&'self K, &'self V)> for TreeMapRevIterator<'self, K
302312
/// - complete initialization with `iter_traverse_complete`
303313
#[inline]
304314
fn iter_traverse_left<'a, K, V>(it: &mut TreeMapIterator<'a, K, V>) {
305-
let node = it.node.get_ref();
315+
let node = it.node.unwrap();
306316
it.stack.push(node);
307-
it.node = &node.left;
317+
it.node = deref(&node.left);
308318
}
309319

310320
#[inline]
311321
fn iter_traverse_right<'a, K, V>(it: &mut TreeMapIterator<'a, K, V>) {
312-
it.node = &(it.node.get_ref().right);
322+
it.node = deref(&it.node.get_ref().right);
313323
}
314324

315325
/// iter_traverse_left, iter_traverse_right and iter_traverse_complete are used to
@@ -321,11 +331,10 @@ fn iter_traverse_right<'a, K, V>(it: &mut TreeMapIterator<'a, K, V>) {
321331
/// traversed left.
322332
#[inline]
323333
fn iter_traverse_complete<'a, K, V>(it: &mut TreeMapIterator<'a, K, V>) {
324-
static none: Option<~TreeNode<K, V>> = None;
325-
match *it.node {
326-
Some(ref n) => {
334+
match it.node {
335+
Some(n) => {
327336
it.stack.push(n);
328-
it.node = &none;
337+
it.node = None;
329338
}
330339
None => ()
331340
}

branches/try2/src/librustc/middle/resolve.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3488,10 +3488,17 @@ impl Resolver {
34883488
return None;
34893489
}
34903490
ConstantItemRibKind => {
3491-
// Still doesn't deal with upvars
3492-
self.resolve_error(span,
3493-
"attempt to use a non-constant \
3494-
value in a constant");
3491+
if is_ty_param {
3492+
// see #9186
3493+
self.resolve_error(span,
3494+
"cannot use an outer type \
3495+
parameter in this context");
3496+
} else {
3497+
// Still doesn't deal with upvars
3498+
self.resolve_error(span,
3499+
"attempt to use a non-constant \
3500+
value in a constant");
3501+
}
34953502

34963503
}
34973504
}
@@ -3764,7 +3771,9 @@ impl Resolver {
37643771

37653772
fn with_constant_rib(&mut self, f: &fn(&mut Resolver)) {
37663773
self.value_ribs.push(@Rib::new(ConstantItemRibKind));
3774+
self.type_ribs.push(@Rib::new(ConstantItemRibKind));
37673775
f(self);
3776+
self.type_ribs.pop();
37683777
self.value_ribs.pop();
37693778
}
37703779

branches/try2/src/librustuv/uvio.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1653,9 +1653,6 @@ impl RtioFileStream for UvFileStream {
16531653
let self_ = unsafe { cast::transmute::<&UvFileStream, &mut UvFileStream>(self) };
16541654
self_.seek_common(0, SEEK_CUR)
16551655
}
1656-
fn flush(&mut self) -> Result<(), IoError> {
1657-
Ok(())
1658-
}
16591656
}
16601657

16611658
pub struct UvProcess {

branches/try2/src/libstd/rt/io/buffered.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,6 @@ mod test {
418418

419419
impl rt::io::Writer for S {
420420
fn write(&mut self, _: &[u8]) {}
421-
fn flush(&mut self) {}
422421
}
423422

424423
impl rt::io::Reader for S {

branches/try2/src/libstd/rt/io/comm_adapters.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@ impl<C: GenericChan<~[u8]>> ChanWriter<C> {
3232

3333
impl<C: GenericChan<~[u8]>> Writer for ChanWriter<C> {
3434
fn write(&mut self, _buf: &[u8]) { fail!() }
35-
36-
fn flush(&mut self) { fail!() }
3735
}
3836

3937
struct ReaderPort<R>;

branches/try2/src/libstd/rt/io/file.rs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -383,15 +383,6 @@ impl Writer for FileStream {
383383
}
384384
}
385385
}
386-
387-
fn flush(&mut self) {
388-
match self.fd.flush() {
389-
Ok(_) => (),
390-
Err(ioerr) => {
391-
io_error::cond.raise(ioerr);
392-
}
393-
}
394-
}
395386
}
396387

397388
/// a `std::rt::io:Seek` trait impl for file I/O.

branches/try2/src/libstd/rt/io/mem.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,6 @@ impl Writer for MemWriter {
6262
// Bump us forward
6363
self.pos += buf.len();
6464
}
65-
66-
fn flush(&mut self) { /* no-op */ }
6765
}
6866

6967
impl Seek for MemWriter {

branches/try2/src/libstd/rt/io/mock.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,16 @@ impl Reader for MockReader {
3232

3333
pub struct MockWriter {
3434
priv write: ~fn(buf: &[u8]),
35-
priv flush: ~fn()
3635
}
3736

3837
impl MockWriter {
3938
pub fn new() -> MockWriter {
4039
MockWriter {
4140
write: |_| (),
42-
flush: || ()
4341
}
4442
}
4543
}
4644

4745
impl Writer for MockWriter {
4846
fn write(&mut self, buf: &[u8]) { (self.write)(buf) }
49-
fn flush(&mut self) { (self.flush)() }
5047
}

branches/try2/src/libstd/rt/io/mod.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -810,8 +810,12 @@ pub trait Writer {
810810
/// Raises the `io_error` condition on error
811811
fn write(&mut self, buf: &[u8]);
812812

813-
/// Flush output
814-
fn flush(&mut self);
813+
/// Flush this output stream, ensuring that all intermediately buffered
814+
/// contents reach their destination.
815+
///
816+
/// This is by default a no-op and implementors of the `Writer` trait should
817+
/// decide whether their stream needs to be buffered or not.
818+
fn flush(&mut self) {}
815819

816820
/// Write the result of passing n through `int::to_str_bytes`.
817821
fn write_int(&mut self, n: int) {

branches/try2/src/libstd/rt/io/native/file.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,6 @@ impl Writer for FileDesc {
132132
raise_error();
133133
}
134134
}
135-
136-
fn flush(&mut self) {}
137135
}
138136

139137
impl Drop for FileDesc {

branches/try2/src/libstd/rt/io/net/tcp.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,6 @@ impl Writer for TcpStream {
8484
Err(ioerr) => io_error::cond.raise(ioerr),
8585
}
8686
}
87-
88-
fn flush(&mut self) { /* no-op */ }
8987
}
9088

9189
pub struct TcpListener {

branches/try2/src/libstd/rt/io/net/udp.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,6 @@ impl Writer for UdpStream {
100100
sock.sendto(buf, self.connectedTo);
101101
}
102102
}
103-
104-
fn flush(&mut self) { fail!() }
105103
}
106104

107105
#[cfg(test)]

branches/try2/src/libstd/rt/io/net/unix.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ impl Reader for UnixStream {
7878

7979
impl Writer for UnixStream {
8080
fn write(&mut self, buf: &[u8]) { self.obj.write(buf) }
81-
fn flush(&mut self) { self.obj.flush() }
8281
}
8382

8483
pub struct UnixListener {

branches/try2/src/libstd/rt/io/pipe.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,4 @@ impl Writer for PipeStream {
8686
}
8787
}
8888
}
89-
90-
fn flush(&mut self) {}
9189
}

branches/try2/src/libstd/rt/io/stdio.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,8 +294,6 @@ impl Writer for StdWriter {
294294
Err(e) => io_error::cond.raise(e)
295295
}
296296
}
297-
298-
fn flush(&mut self) { /* nothing to do */ }
299297
}
300298

301299
#[cfg(test)]

branches/try2/src/libstd/rt/rtio.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,6 @@ pub trait RtioFileStream {
173173
fn pwrite(&mut self, buf: &[u8], offset: u64) -> Result<(), IoError>;
174174
fn seek(&mut self, pos: i64, whence: SeekStyle) -> Result<u64, IoError>;
175175
fn tell(&self) -> Result<u64, IoError>;
176-
fn flush(&mut self) -> Result<(), IoError>;
177176
}
178177

179178
pub trait RtioProcess {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// see #9186
12+
13+
enum Bar<T> { What }
14+
15+
fn foo<T>() {
16+
static a: Bar<T> = What;
17+
//~^ ERROR: cannot use an outer type parameter in this context
18+
}
19+
20+
fn main() {
21+
}

0 commit comments

Comments
 (0)