Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add is_empty() for PathBuf (fixes #30259), Overide methods in iterator implementation for EscapeDefault (#24214), Add help note for E0514, Improve internal docs in librustc #30520

Closed
wants to merge 28 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
0bd458d
Internal documentation and code style
ticki Dec 21, 2015
a503c80
Add help for E0514
ticki Dec 21, 2015
64aea50
Add is_empty() for PathBuf, fix #30259
ticki Dec 22, 2015
92ae54c
Move the is_empty method to Path instead
ticki Dec 22, 2015
3324a14
Tests
ticki Dec 22, 2015
99ee087
Overide methods in iterator implementation for EscapeDefault, see #24214
ticki Dec 22, 2015
47690f2
Merge branch 'master' of https://github.com/rust-lang/rust into HEAD
ticki Dec 22, 2015
0435a46
Fix style nitpicks from travis
ticki Dec 22, 2015
ba511f2
Stop re-exporting the ast::BindingMode variants.
Ms2ger Dec 18, 2015
7e487b4
Register new snapshots
alexcrichton Dec 11, 2015
ed237e5
std: Update jemalloc version
alexcrichton Dec 17, 2015
c0321ed
Fix Universal CRT detection on weird setups
retep998 Dec 22, 2015
2062fd3
std: Remove rust_builtin C support library
alexcrichton Dec 2, 2015
f89581e
Fix style nitpicks from travis
ticki Dec 22, 2015
05df049
Update submodules
ticki Dec 22, 2015
d26fd3e
Merge branch 'master' of github.com:Ticki/rust into HEAD
ticki Dec 22, 2015
7db394a
Add is_empty to OsStr, rename path_extras to os_extras, don\'t go thr…
ticki Dec 22, 2015
1448ce9
Downgrade submodules
ticki Dec 22, 2015
cceeb8f
Fix introduced error
ticki Dec 22, 2015
d410e67
Fix introduced error
ticki Dec 22, 2015
17ff466
Merge branch 'master' of github.com:Ticki/rust into HEAD
ticki Dec 22, 2015
7c59d0c
Fix introduced error
ticki Dec 22, 2015
b2745f3
Merge branch 'master' of github.com:Ticki/rust into HEAD
ticki Dec 22, 2015
efbd47f
Complete the tests
ticki Dec 22, 2015
5573713
Add issue to attr
ticki Dec 22, 2015
6bd9fe1
Documentation
ticki Dec 22, 2015
644f258
Remove unused variables
ticki Dec 22, 2015
1f9941f
Added features
ticki Dec 22, 2015
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 90 additions & 0 deletions src/libcore/char.rs
Original file line number Diff line number Diff line change
Expand Up @@ -537,4 +537,94 @@ impl Iterator for EscapeDefault {
EscapeDefaultState::Done => (0, Some(0)),
}
}

fn count(self) -> usize {
match self.state {
EscapeDefaultState::Char(_) => 1,
EscapeDefaultState::Unicode(iter) => iter.count(),
EscapeDefaultState::Done => 0,
EscapeDefaultState::Backslash(_) => 2,
}
}

fn nth(&mut self, n: usize) -> Option<char> {
let ch = match self.state {
EscapeDefaultState::Backslash(c) => c,
EscapeDefaultState::Char(c) => c,
EscapeDefaultState::Done => return None,
EscapeDefaultState::Unicode(ref mut i) => return i.nth(n),
};

let start = if let Some(x) = self.get_offset() {
x
} else {
return None;
};
let idx = start + n;

// Update state
self.state = match idx {
0 => EscapeDefaultState::Char(ch),
_ => EscapeDefaultState::Done,
};

match idx {
0 => Some('\\'),
1 => Some(ch),
_ => None,
}
}

fn last(self) -> Option<char> {
match self.state {
EscapeDefaultState::Unicode(iter) => iter.last(),
EscapeDefaultState::Done => None,
EscapeDefaultState::Backslash(c) | EscapeDefaultState::Char(c) => Some(c),
}
}
}

#[test]
fn ed_iterator_specializations() {
use super::EscapeDefault;

// Check counting
assert_eq!('\n'.escape_default().count(), 2);
assert_eq!('c'.escape_default().count(), 1);
assert_eq!(' '.escape_default().count(), 1);
assert_eq!('\\'.escape_default().count(), 2);
assert_eq!('\''.escape_default().count(), 2);

// Check nth

// Check that OoB is handled correctly
assert_eq!('\n'.escape_default().nth(2), None);
assert_eq!('c'.escape_default().nth(1), None);
assert_eq!(' '.escape_default().nth(1), None);
assert_eq!('\\'.escape_default().nth(2), None);
assert_eq!('\''.escape_default().nth(2), None);

// Check the first char
assert_eq!('\n'.escape_default().nth(0), Some('\\'));
assert_eq!('c'.escape_default().nth(0), Some('c'));
assert_eq!(' '.escape_default().nth(0), Some(' '));
assert_eq!('\\'.escape_default().nth(0), Some('\\'));
assert_eq!('\''.escape_default().nth(0), Some('\\'));

// Check the second char
assert_eq!('\n'.escape_default().nth(1), Some('n'));
assert_eq!('\\'.escape_default().nth(1), Some('\\'));
assert_eq!('\''.escape_default().nth(1), Some('\''));
}


impl EscapeDefault {
fn get_offset(&self) -> Option<usize> {
match self.state {
EscapeDefaultState::Backslash(_) => Some(0),
EscapeDefaultState::Char(_) => Some(1),
EscapeDefaultState::Done => None,
EscapeDefaultState::Unicode(_) => None,
}
}
}
7 changes: 6 additions & 1 deletion src/librustc/front/map/blocks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,12 @@ struct ClosureParts<'a> {

impl<'a> ClosureParts<'a> {
fn new(d: &'a FnDecl, b: &'a Block, id: NodeId, s: Span) -> ClosureParts<'a> {
ClosureParts { decl: d, body: b, id: id, span: s }
ClosureParts {
decl: d,
body: b,
id: id,
span: s
}
}
}

Expand Down
4 changes: 4 additions & 0 deletions src/librustc/front/map/collector.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,13 @@ use syntax::codemap::Span;
/// A Visitor that walks over an AST and collects Node's into an AST
/// Map.
pub struct NodeCollector<'ast> {
/// The crate
pub krate: &'ast Crate,
/// The node map
pub map: Vec<MapEntry<'ast>>,
/// The definitions, used for name resolution
pub definitions: Definitions,
/// The parrent of this node
pub parent_node: NodeId,
}

Expand Down
32 changes: 26 additions & 6 deletions src/librustc/front/map/definitions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use syntax::ast;
use syntax::parse::token::InternedString;
use util::nodemap::NodeMap;

/// A definition
#[derive(Clone)]
pub struct Definitions {
data: Vec<DefData>,
Expand Down Expand Up @@ -66,36 +67,53 @@ pub type DefPath = Vec<DisambiguatedDefPathData>;
pub enum DefPathData {
// Root: these should only be used for the root nodes, because
// they are treated specially by the `def_path` function.
/// The crate root (marker)
CrateRoot,
/// An inlined root
InlinedRoot(DefPath),

// Catch-all for random DefId things like DUMMY_NODE_ID
Misc,

// Different kinds of items and item-like things:
/// An implementation
Impl(ast::Name),
/// A type (struct, enum, etc.)
Type(ast::Name),
/// A module declaration
Mod(ast::Name),
/// A value
Value(ast::Name),
/// A macro rule
MacroDef(ast::Name),
/// A closure expression
ClosureExpr,

// Subportions of items
/// A type parameter (generic parameter)
TypeParam(ast::Name),
/// A lifetime definition
LifetimeDef(ast::Name),
/// A variant of a enum
EnumVariant(ast::Name),
/// A positional field, for example a tuple field
PositionalField,
/// A struct field
Field(hir::StructFieldKind),
StructCtor, // implicit ctor for a tuple-like struct
Initializer, // initializer for a const
Binding(ast::Name), // pattern binding

// An external crate that does not have an `extern crate` in this
// crate.
/// Implicit ctor for a tuple-like struct
StructCtor,
/// Initializer for a constant
Initializer,
/// A pattern binding
Binding(ast::Name),

/// An external crate that does not have an `extern crate` in this
/// crate.
DetachedCrate(ast::Name),
}

impl Definitions {
/// Create new empty definition map
pub fn new() -> Definitions {
Definitions {
data: vec![],
Expand All @@ -104,6 +122,7 @@ impl Definitions {
}
}

/// Get the number of definitions
pub fn len(&self) -> usize {
self.data.len()
}
Expand Down Expand Up @@ -138,6 +157,7 @@ impl Definitions {
}
}

/// Add a definition with a parrent definition
pub fn create_def_with_parent(&mut self,
parent: Option<DefIndex>,
node_id: ast::NodeId,
Expand Down
41 changes: 19 additions & 22 deletions src/librustc_back/sha2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,10 @@ fn write_u32_be(dst: &mut[u8], input: u32) {

/// Read the value of a vector of bytes as a u32 value in big-endian format.
fn read_u32_be(input: &[u8]) -> u32 {
return
(input[0] as u32) << 24 |
(input[0] as u32) << 24 |
(input[1] as u32) << 16 |
(input[2] as u32) << 8 |
(input[3] as u32);
(input[3] as u32)
}

/// Read a vector of bytes into a vector of u32s. The values are read in big-endian format.
Expand All @@ -50,7 +49,7 @@ trait ToBits {

impl ToBits for u64 {
fn to_bits(self) -> (u64, u64) {
return (self >> 61, self << 3);
(self >> 61, self << 3)
}
}

Expand All @@ -64,7 +63,7 @@ fn add_bytes_to_bits(bits: u64, bytes: u64) -> u64 {
}

match bits.checked_add(new_low_bits) {
Some(x) => return x,
Some(x) => x,
None => panic!("numeric overflow occurred.")
}
}
Expand Down Expand Up @@ -113,10 +112,10 @@ struct FixedBuffer64 {
impl FixedBuffer64 {
/// Create a new FixedBuffer64
fn new() -> FixedBuffer64 {
return FixedBuffer64 {
FixedBuffer64 {
buffer: [0; 64],
buffer_idx: 0
};
}
}
}

Expand Down Expand Up @@ -175,13 +174,13 @@ impl FixedBuffer for FixedBuffer64 {

fn next<'s>(&'s mut self, len: usize) -> &'s mut [u8] {
self.buffer_idx += len;
return &mut self.buffer[self.buffer_idx - len..self.buffer_idx];
&mut self.buffer[self.buffer_idx - len..self.buffer_idx]
}

fn full_buffer<'s>(&'s mut self) -> &'s [u8] {
assert!(self.buffer_idx == 64);
self.buffer_idx = 0;
return &self.buffer[..64];
&self.buffer[..64]
}

fn position(&self) -> usize { self.buffer_idx }
Expand Down Expand Up @@ -278,7 +277,7 @@ struct Engine256State {

impl Engine256State {
fn new(h: &[u32; 8]) -> Engine256State {
return Engine256State {
Engine256State {
h0: h[0],
h1: h[1],
h2: h[2],
Expand All @@ -287,7 +286,7 @@ impl Engine256State {
h5: h[5],
h6: h[6],
h7: h[7]
};
}
}

fn reset(&mut self, h: &[u32; 8]) {
Expand Down Expand Up @@ -433,7 +432,7 @@ struct Engine256 {

impl Engine256 {
fn new(h: &[u32; 8]) -> Engine256 {
return Engine256 {
Engine256 {
length_bits: 0,
buffer: FixedBuffer64::new(),
state: Engine256State::new(h),
Expand All @@ -457,17 +456,15 @@ impl Engine256 {
}

fn finish(&mut self) {
if self.finished {
return;
if !self.finished {
let self_state = &mut self.state;
self.buffer.standard_padding(8, |input: &[u8]| { self_state.process_block(input) });
write_u32_be(self.buffer.next(4), (self.length_bits >> 32) as u32 );
write_u32_be(self.buffer.next(4), self.length_bits as u32);
self_state.process_block(self.buffer.full_buffer());

self.finished = true;
}

let self_state = &mut self.state;
self.buffer.standard_padding(8, |input: &[u8]| { self_state.process_block(input) });
write_u32_be(self.buffer.next(4), (self.length_bits >> 32) as u32 );
write_u32_be(self.buffer.next(4), self.length_bits as u32);
self_state.process_block(self.buffer.full_buffer());

self.finished = true;
}
}

Expand Down
20 changes: 10 additions & 10 deletions src/librustc_back/svh.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,15 @@ impl Svh {
}

pub fn calculate(metadata: &Vec<String>, krate: &hir::Crate) -> Svh {
fn hex(b: u64) -> char {
let b = (b & 0xf) as u8;
let b = match b {
0 ... 9 => '0' as u8 + b,
_ => 'a' as u8 + b - 10,
};
b as char
}

// FIXME (#14132): This is better than it used to be, but it still not
// ideal. We now attempt to hash only the relevant portions of the
// Crate AST as well as the top-level crate attributes. (However,
Expand Down Expand Up @@ -101,17 +110,8 @@ impl Svh {
}

let hash = state.finish();
return Svh {
Svh {
hash: (0..64).step_by(4).map(|i| hex(hash >> i)).collect()
};

fn hex(b: u64) -> char {
let b = (b & 0xf) as u8;
let b = match b {
0 ... 9 => '0' as u8 + b,
_ => 'a' as u8 + b - 10,
};
b as char
}
}
}
Expand Down
3 changes: 3 additions & 0 deletions src/librustc_metadata/creader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,9 @@ impl<'a> CrateReader<'a> {
.as_ref().map(|s|&**s)
.unwrap_or("an old version of rustc")
);

span_help!(self.sess, span,
"consider removing the compiled binaries and recompile");
self.sess.abort_if_errors();
}
}
Expand Down
6 changes: 6 additions & 0 deletions src/libstd/ffi/os_str.rs
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,12 @@ impl OsStr {
self.to_bytes().and_then(|b| CString::new(b).ok())
}

/// Checks if the string is empty.
#[unstable(feature = "os_extras", reason = "recently added", issue = "30259")]
pub fn is_empty(&self) -> bool {
self.inner.inner.is_empty()
}

/// Gets the underlying byte representation.
///
/// Note: it is *crucial* that this API is private, to avoid
Expand Down
2 changes: 2 additions & 0 deletions src/libstd/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@
#![feature(const_fn)]
#![feature(core_float)]
#![feature(core_intrinsics)]
#![feature(convert)]
#![feature(decode_utf16)]
#![feature(drop_in_place)]
#![feature(dropck_parametricity)]
Expand All @@ -243,6 +244,7 @@
#![feature(on_unimplemented)]
#![feature(oom)]
#![feature(optin_builtin_traits)]
#![feature(os_extras)]
#![feature(placement_in_syntax)]
#![feature(rand)]
#![feature(range_inclusive)]
Expand Down
Loading