diff --git a/man/rustdoc.1 b/man/rustdoc.1 index 4c6557f0f6580..830884b19bde2 100644 --- a/man/rustdoc.1 +++ b/man/rustdoc.1 @@ -35,9 +35,27 @@ space-separated list of plugins to run (default: '') --plugin-path directory to load plugins from (default: /tmp/rustdoc_ng/plugins) .TP +--target +target triple to document +.TP +--crate-name +specify the name of this crate +.TP -L --library-path directory to add to crate search path .TP +--cfg +pass a --cfg to rustc +.TP +--extern +pass an --extern to rustc +.TP +--test +run code examples as tests +.TP +--test-args +pass arguments to the test runner +.TP --html-in-header file to add to .TP @@ -47,8 +65,20 @@ file to add in , before content --html-after-content file to add in , after content .TP +--markdown-css +CSS files to include via in a rendered Markdown file +.TP +--markdown-playground-url +URL to send code snippets to +.TP +--markdown-no-toc +don't include table of contents +.TP -h, --help Print help +.TP +-V, --version +Print rustdoc's version .SH "OUTPUT FORMATS" diff --git a/src/doc/guide-crates.md b/src/doc/guide-crates.md index 8277988b7fe29..85badc11d64f0 100644 --- a/src/doc/guide-crates.md +++ b/src/doc/guide-crates.md @@ -1,4 +1,4 @@ % The (old) Rust Crates and Modules Guide -This content has moved into the +This content has moved into [the Rust Programming Language book](book/crates-and-modules.html). diff --git a/src/doc/guide-error-handling.md b/src/doc/guide-error-handling.md index 215fe6a441e0e..54fa529f3aa8e 100644 --- a/src/doc/guide-error-handling.md +++ b/src/doc/guide-error-handling.md @@ -1,4 +1,4 @@ % Error Handling in Rust -This content has moved into the +This content has moved into [the Rust Programming Language book](book/error-handling.html). diff --git a/src/doc/guide-ffi.md b/src/doc/guide-ffi.md index 4c818cacbfaf3..1130a10bd1c55 100644 --- a/src/doc/guide-ffi.md +++ b/src/doc/guide-ffi.md @@ -1,4 +1,4 @@ % The (old) Rust Foreign Function Interface Guide -This content has moved into the +This content has moved into [the Rust Programming Language book](book/ffi.html). diff --git a/src/doc/guide-macros.md b/src/doc/guide-macros.md index 534ae3504c3a2..228cb3c624f89 100644 --- a/src/doc/guide-macros.md +++ b/src/doc/guide-macros.md @@ -1,4 +1,4 @@ % The (old) Rust Macros Guide -This content has moved into the +This content has moved into [the Rust Programming Language book](book/macros.html). diff --git a/src/doc/guide-ownership.md b/src/doc/guide-ownership.md index 26e059aeb2680..884f14726ca87 100644 --- a/src/doc/guide-ownership.md +++ b/src/doc/guide-ownership.md @@ -1,4 +1,4 @@ % The (old) Rust Ownership Guide -This content has moved into the +This content has moved into [the Rust Programming Language book](book/ownership.html). diff --git a/src/doc/guide-plugins.md b/src/doc/guide-plugins.md index abfe7a44703a2..d6495d02e1189 100644 --- a/src/doc/guide-plugins.md +++ b/src/doc/guide-plugins.md @@ -1,4 +1,4 @@ % The (old) Rust Compiler Plugins Guide -This content has moved into the +This content has moved into [the Rust Programming Language book](book/plugins.html). diff --git a/src/doc/guide-pointers.md b/src/doc/guide-pointers.md index e72eaf62720b7..0374166405c62 100644 --- a/src/doc/guide-pointers.md +++ b/src/doc/guide-pointers.md @@ -1,4 +1,4 @@ % The (old) Rust Pointer Guide -This content has moved into the +This content has moved into [the Rust Programming Language book](book/pointers.html). diff --git a/src/doc/guide-strings.md b/src/doc/guide-strings.md index fd1420024c665..d030614489bcc 100644 --- a/src/doc/guide-strings.md +++ b/src/doc/guide-strings.md @@ -1,4 +1,4 @@ % The (old) Guide to Rust Strings -This content has moved into the +This content has moved into [the Rust Programming Language book](book/strings.html). diff --git a/src/doc/guide-tasks.md b/src/doc/guide-tasks.md index be8cb67098620..197559bef0408 100644 --- a/src/doc/guide-tasks.md +++ b/src/doc/guide-tasks.md @@ -1,4 +1,4 @@ % The (old) Rust Threads and Communication Guide -This content has moved into the +This content has moved into [the Rust Programming Language book](book/tasks.html). diff --git a/src/doc/guide-testing.md b/src/doc/guide-testing.md index 79721300d941d..67bcb0a5e546a 100644 --- a/src/doc/guide-testing.md +++ b/src/doc/guide-testing.md @@ -1,4 +1,4 @@ % The (old) Rust Testing Guide -This content has moved into the +This content has moved into [the Rust Programming Language book](book/testing.html). diff --git a/src/doc/guide-unsafe.md b/src/doc/guide-unsafe.md index fe8fcc4c19d84..3c1a82d017449 100644 --- a/src/doc/guide-unsafe.md +++ b/src/doc/guide-unsafe.md @@ -1,4 +1,4 @@ % Writing Safe Low-level and Unsafe Code in Rust -This content has moved into the +This content has moved into [the Rust Programming Language book](book/unsafe.html). diff --git a/src/doc/guide.md b/src/doc/guide.md index ba1e2590e7fa5..b9e70e7cfd7e0 100644 --- a/src/doc/guide.md +++ b/src/doc/guide.md @@ -1,4 +1,4 @@ % The (old) Rust Guide -This content has moved into the +This content has moved into [the Rust Programming Language book](book/README.html). diff --git a/src/doc/reference.md b/src/doc/reference.md index a27d6c6e268a9..8d5a895c2a8c3 100644 --- a/src/doc/reference.md +++ b/src/doc/reference.md @@ -257,10 +257,10 @@ cases mentioned in [Number literals](#number-literals) below. | [Number literals](#number-literals)`*` | Example | Exponentiation | Suffixes | |----------------------------------------|---------|----------------|----------| -| Decimal integer | `98_222i` | `N/A` | Integer suffixes | -| Hex integer | `0xffi` | `N/A` | Integer suffixes | -| Octal integer | `0o77i` | `N/A` | Integer suffixes | -| Binary integer | `0b1111_0000i` | `N/A` | Integer suffixes | +| Decimal integer | `98_222is` | `N/A` | Integer suffixes | +| Hex integer | `0xffis` | `N/A` | Integer suffixes | +| Octal integer | `0o77is` | `N/A` | Integer suffixes | +| Binary integer | `0b1111_0000is` | `N/A` | Integer suffixes | | Floating-point | `123.0E+77f64` | `Optional` | Floating-point suffixes | `*` All number literals allow `_` as a visual separator: `1_234.0E+18f64` @@ -268,7 +268,7 @@ cases mentioned in [Number literals](#number-literals) below. ##### Suffixes | Integer | Floating-point | |---------|----------------| -| `i` (`int`), `u` (`uint`), `u8`, `i8`, `u16`, `i16`, `u32`, `i32`, `u64`, `i64` | `f32`, `f64` | +| `is` (`isize`), `us` (`usize`), `u8`, `i8`, `u16`, `i16`, `u32`, `i32`, `u64`, `i64` | `f32`, `f64` | #### Character and string literals @@ -468,7 +468,7 @@ Like any literal, an integer literal may be followed (immediately, without any spaces) by an _integer suffix_, which forcibly sets the type of the literal. There are 10 valid values for an integer suffix: -* The `i` and `u` suffixes give the literal type `int` or `uint`, +* The `is` and `us` suffixes give the literal type `isize` or `usize`, respectively. * Each of the signed and unsigned machine types `u8`, `i8`, `u16`, `i16`, `u32`, `i32`, `u64` and `i64` @@ -483,9 +483,9 @@ context overconstrains the type, it is also considered a static type error. Examples of integer literals of various forms: ``` -123i; // type int -123u; // type uint -123_u; // type uint +123is; // type isize +123us; // type usize +123_us // type usize 0xff_u8; // type u8 0o70_i16; // type i16 0b1111_1111_1001_0000_i32; // type i32 @@ -578,8 +578,8 @@ Two examples of paths with type arguments: # struct HashMap; # fn f() { # fn id(t: T) -> T { t } -type T = HashMap; // Type arguments used in a type expression -let x = id::(10); // Type arguments used in a call expression +type T = HashMap; // Type arguments used in a type expression +let x = id::(10); // Type arguments used in a call expression # } ``` @@ -1002,11 +1002,11 @@ use std::option::Option::{Some, None}; use std::collections::hash_map::{mod, HashMap}; fn foo(_: T){} -fn bar(map1: HashMap, map2: hash_map::HashMap){} +fn bar(map1: HashMap, map2: hash_map::HashMap){} fn main() { - // Equivalent to 'std::iter::range_step(0u, 10u, 2u);' - range_step(0u, 10u, 2u); + // Equivalent to 'std::iter::range_step(0us, 10, 2);' + range_step(0us, 10, 2); // Equivalent to 'foo(vec![std::option::Option::Some(1.0f64), // std::option::Option::None]);' @@ -1104,7 +1104,7 @@ interpreted as an implicit `return` expression applied to the final-expression. An example of a function: ``` -fn add(x: int, y: int) -> int { +fn add(x: i32, y: i32) -> i32 { return x + y; } ``` @@ -1113,7 +1113,7 @@ As with `let` bindings, function arguments are irrefutable patterns, so any pattern that is valid in a let binding is also valid as an argument. ``` -fn first((value, _): (int, int)) -> int { value } +fn first((value, _): (i32, i32)) -> i32 { value } ``` @@ -1139,8 +1139,8 @@ used as a type name. When a generic function is referenced, its type is instantiated based on the context of the reference. For example, calling the `iter` function defined -above on `[1, 2]` will instantiate type parameter `T` with `int`, and require -the closure parameter to have type `fn(int)`. +above on `[1, 2]` will instantiate type parameter `T` with `isize`, and require +the closure parameter to have type `fn(isize)`. The type parameters can also be explicitly supplied in a trailing [path](#paths) component after the function name. This might be necessary if @@ -1272,7 +1272,7 @@ typecheck: ``` # fn my_err(s: &str) -> ! { panic!() } -fn f(i: int) -> int { +fn f(i: i32) -> i32 { if i == 42 { return 42; } @@ -1283,7 +1283,7 @@ fn f(i: int) -> int { ``` This will not compile without the `!` annotation on `my_err`, since the `else` -branch of the conditional in `f` does not return an `int`, as required by the +branch of the conditional in `f` does not return an `i32`, as required by the signature of `f`. Adding the `!` annotation to `my_err` informs the typechecker that, should control ever enter `my_err`, no further type judgments about `f` need to hold, since control will never resume in any context that @@ -1301,18 +1301,18 @@ modifier. ``` // Declares an extern fn, the ABI defaults to "C" -extern fn new_int() -> int { 0 } +extern fn new_i32() -> i32 { 0 } // Declares an extern fn with "stdcall" ABI -extern "stdcall" fn new_int_stdcall() -> int { 0 } +extern "stdcall" fn new_i32_stdcall() -> i32 { 0 } ``` Unlike normal functions, extern fns have an `extern "ABI" fn()`. This is the same type as the functions declared in an extern block. ``` -# extern fn new_int() -> int { 0 } -let fptr: extern "C" fn() -> int = new_int; +# extern fn new_i32() -> i32 { 0 } +let fptr: extern "C" fn() -> i32 = new_i32; ``` Extern functions may be called directly from Rust code as Rust uses large, @@ -1348,18 +1348,18 @@ keyword `struct`. An example of a `struct` item and its use: ``` -struct Point {x: int, y: int} +struct Point {x: i32, y: i32} let p = Point {x: 10, y: 11}; -let px: int = p.x; +let px: i32 = p.x; ``` A _tuple structure_ is a nominal [tuple type](#tuple-types), also defined with the keyword `struct`. For example: ``` -struct Point(int, int); +struct Point(i32, i32); let p = Point(10, 11); -let px: int = match p { Point(x, _) => x }; +let px: i32 = match p { Point(x, _) => x }; ``` A _unit-like struct_ is a structure without any fields, defined by leaving off @@ -1457,14 +1457,14 @@ a type derived from those primitive types. The derived types are references with the `static` lifetime, fixed-size arrays, tuples, enum variants, and structs. ``` -const BIT1: uint = 1 << 0; -const BIT2: uint = 1 << 1; +const BIT1: u32 = 1 << 0; +const BIT2: u32 = 1 << 1; -const BITS: [uint; 2] = [BIT1, BIT2]; +const BITS: [u32; 2] = [BIT1, BIT2]; const STRING: &'static str = "bitstring"; struct BitsNStrings<'a> { - mybits: [uint; 2], + mybits: [u32; 2], mystring: &'a str } @@ -1500,14 +1500,14 @@ Constants should in general be preferred over statics, unless large amounts of data are being stored, or single-address and mutability properties are required. ``` -use std::sync::atomic::{AtomicUint, Ordering, ATOMIC_UINT_INIT};; +use std::sync::atomic::{AtomicUint, Ordering, ATOMIC_USIZE_INIT};; -// Note that ATOMIC_UINT_INIT is a *const*, but it may be used to initialize a +// Note that ATOMIC_USIZE_INIT is a *const*, but it may be used to initialize a // static. This static can be modified, so it is not placed in read-only memory. -static COUNTER: AtomicUint = ATOMIC_UINT_INIT; +static COUNTER: AtomicUint = ATOMIC_USIZE_INIT; // This table is a candidate to be placed in read-only memory. -static TABLE: &'static [uint] = &[1, 2, 3, /* ... */]; +static TABLE: &'static [usize] = &[1, 2, 3, /* ... */]; for slot in TABLE.iter() { println!("{}", slot); @@ -1529,13 +1529,13 @@ Mutable statics are still very useful, however. They can be used with C libraries and can also be bound from C libraries (in an `extern` block). ``` -# fn atomic_add(_: &mut uint, _: uint) -> uint { 2 } +# fn atomic_add(_: &mut u32, _: u32) -> u32 { 2 } -static mut LEVELS: uint = 0; +static mut LEVELS: u32 = 0; // This violates the idea of no shared state, and this doesn't internally // protect against races, so this function is `unsafe` -unsafe fn bump_levels_unsafe1() -> uint { +unsafe fn bump_levels_unsafe1() -> u32 { let ret = LEVELS; LEVELS += 1; return ret; @@ -1544,7 +1544,7 @@ unsafe fn bump_levels_unsafe1() -> uint { // Assuming that we have an atomic_add function which returns the old value, // this function is "safe" but the meaning of the return value may not be what // callers expect, so it's still marked as `unsafe` -unsafe fn bump_levels_unsafe2() -> uint { +unsafe fn bump_levels_unsafe2() -> u32 { return atomic_add(&mut LEVELS, 1); } ``` @@ -1564,8 +1564,8 @@ Traits are implemented for specific types through separate [implementations](#implementations). ``` -# type Surface = int; -# type BoundingBox = int; +# type Surface = i32; +# type BoundingBox = i32; trait Shape { fn draw(&self, Surface); fn bounding_box(&self) -> BoundingBox; @@ -1583,8 +1583,8 @@ functions](#generic-functions). ``` trait Seq { - fn len(&self) -> uint; - fn elt_at(&self, n: uint) -> T; + fn len(&self) -> u32; + fn elt_at(&self, n: u32) -> T; fn iter(&self, F) where F: Fn(T); } ``` @@ -1595,7 +1595,7 @@ parameter, and within the generic function, the methods of the trait can be called on values that have the parameter's type. For example: ``` -# type Surface = int; +# type Surface = i32; # trait Shape { fn draw(&self, Surface); } fn draw_twice(surface: Surface, sh: T) { sh.draw(surface); @@ -1610,8 +1610,8 @@ trait is in scope) to pointers to the trait name, used as a type. ``` # trait Shape { } -# impl Shape for int { } -# let mycircle = 0i; +# impl Shape for i32 { } +# let mycircle = 0i32; let myshape: Box = Box::new(mycircle) as Box; ``` @@ -1629,12 +1629,12 @@ module. For example: ``` trait Num { - fn from_int(n: int) -> Self; + fn from_i32(n: i32) -> Self; } impl Num for f64 { - fn from_int(n: int) -> f64 { n as f64 } + fn from_i32(n: i32) -> f64 { n as f64 } } -let x: f64 = Num::from_int(42); +let x: f64 = Num::from_i32(42); ``` Traits may inherit from other traits. For example, in @@ -1669,9 +1669,9 @@ Likewise, supertrait methods may also be called on trait objects. ```{.ignore} # trait Shape { fn area(&self) -> f64; } # trait Circle : Shape { fn radius(&self) -> f64; } -# impl Shape for int { fn area(&self) -> f64 { 0.0 } } -# impl Circle for int { fn radius(&self) -> f64 { 0.0 } } -# let mycircle = 0; +# impl Shape for i32 { fn area(&self) -> f64 { 0.0 } } +# impl Circle for i32 { fn radius(&self) -> f64 { 0.0 } } +# let mycircle = 0i32; let mycircle = Box::new(mycircle) as Box; let nonsense = mycircle.radius() * mycircle.area(); ``` @@ -1686,7 +1686,7 @@ Implementations are defined with the keyword `impl`. ``` # struct Point {x: f64, y: f64}; # impl Copy for Point {} -# type Surface = int; +# type Surface = i32; # struct BoundingBox {x: f64, y: f64, width: f64, height: f64}; # trait Shape { fn draw(&self, Surface); fn bounding_box(&self) -> BoundingBox; } # fn do_draw_circle(s: Surface, c: Circle) { } @@ -1715,7 +1715,7 @@ limited to nominal types (enums, structs), and the implementation must appear in the same module or a sub-module as the `self` type: ``` -struct Point {x: int, y: int} +struct Point {x: i32, y: i32} impl Point { fn log(&self) { @@ -1826,7 +1826,7 @@ struct Foo; // Declare a public struct with a private field pub struct Bar { - field: int + field: i32 } // Declare a public enum with two public variants @@ -2226,15 +2226,15 @@ plugins](book/plugin.html#lint-plugins) can provide additional lint checks. mod m1 { // Missing documentation is ignored here #[allow(missing_docs)] - pub fn undocumented_one() -> int { 1 } + pub fn undocumented_one() -> i32 { 1 } // Missing documentation signals a warning here #[warn(missing_docs)] - pub fn undocumented_too() -> int { 2 } + pub fn undocumented_too() -> i32 { 2 } // Missing documentation signals an error here #[deny(missing_docs)] - pub fn undocumented_end() -> int { 3 } + pub fn undocumented_end() -> i32 { 3 } } ``` @@ -2247,16 +2247,16 @@ mod m2{ #[allow(missing_docs)] mod nested { // Missing documentation is ignored here - pub fn undocumented_one() -> int { 1 } + pub fn undocumented_one() -> i32 { 1 } // Missing documentation signals a warning here, // despite the allow above. #[warn(missing_docs)] - pub fn undocumented_two() -> int { 2 } + pub fn undocumented_two() -> i32 { 2 } } // Missing documentation signals a warning here - pub fn undocumented_too() -> int { 3 } + pub fn undocumented_too() -> i32 { 3 } } ``` @@ -2269,7 +2269,7 @@ mod m3 { // Attempting to toggle warning signals an error here #[allow(missing_docs)] /// Returns 2. - pub fn undocumented_too() -> int { 2 } + pub fn undocumented_too() -> i32 { 2 } } ``` @@ -2461,7 +2461,7 @@ the `PartialEq` or `Clone` constraints for the appropriate `impl`: ``` #[derive(PartialEq, Clone)] struct Foo { - a: int, + a: i32, b: T } ``` @@ -2469,7 +2469,7 @@ struct Foo { The generated `impl` for `PartialEq` is equivalent to ``` -# struct Foo { a: int, b: T } +# struct Foo { a: i32, b: T } impl PartialEq for Foo { fn eq(&self, other: &Foo) -> bool { self.a == other.a && self.b == other.b @@ -2821,7 +2821,7 @@ parentheses. They are used to create [tuple-typed](#tuple-types) values. ```{.tuple} (0,); (0.0, 4.5); -("a", 4u, true); +("a", 4us, true); ``` ### Unit expressions @@ -2862,7 +2862,7 @@ The following are examples of structure expressions: ``` # struct Point { x: f64, y: f64 } # struct TuplePoint(f64, f64); -# mod game { pub struct User<'a> { pub name: &'a str, pub age: uint, pub score: uint } } +# mod game { pub struct User<'a> { pub name: &'a str, pub age: u32, pub score: uint } } # struct Cookie; fn some_fn(t: T) {} Point {x: 10.0, y: 20.0}; TuplePoint(10.0, 20.0); @@ -2883,7 +2883,7 @@ were explicitly specified and the values in the base expression for all other fields. ``` -# struct Point3d { x: int, y: int, z: int } +# struct Point3d { x: i32, y: i32, z: i32 } let base = Point3d {x: 1, y: 2, z: 3}; Point3d {y: 0, z: 10, .. base}; ``` @@ -2958,9 +2958,9 @@ constant expression that can be evaluated at compile time, such as a [literal](#literals) or a [static item](#static-items). ``` -[1i, 2, 3, 4]; +[1is, 2, 3, 4]; ["a", "b", "c", "d"]; -[0i; 128]; // array with 128 zeros +[0is; 128]; // array with 128 zeros [0u8, 0u8, 0u8, 0u8]; ``` @@ -3113,7 +3113,7 @@ An example of an `as` expression: ``` # fn sum(v: &[f64]) -> f64 { 0.0 } -# fn len(v: &[f64]) -> int { 0 } +# fn len(v: &[f64]) -> i32 { 0 } fn avg(v: &[f64]) -> f64 { let sum: f64 = sum(v); @@ -3133,7 +3133,7 @@ moves](#moved-and-copied-types) its right-hand operand to its left-hand operand. ``` -# let mut x = 0i; +# let mut x = 0is; # let y = 0; x = y; @@ -3184,7 +3184,7 @@ paren_expr : '(' expr ')' ; An example of a parenthesized expression: ``` -let x: int = (2 + 3) * 4; +let x: i32 = (2 + 3) * 4; ``` @@ -3204,9 +3204,9 @@ then the expression completes. Some examples of call expressions: ``` -# fn add(x: int, y: int) -> int { 0 } +# fn add(x: i32, y: i32) -> i32 { 0 } -let x: int = add(1, 2); +let x: i32 = add(1i32, 2i32); let pi: Option = "3.14".parse(); ``` @@ -3245,8 +3245,8 @@ In this example, we define a function `ten_times` that takes a higher-order function argument, and call it with a lambda expression as an argument: ``` -fn ten_times(f: F) where F: Fn(int) { - let mut i = 0; +fn ten_times(f: F) where F: Fn(i32) { + let mut i = 0i32; while i < 10 { f(i); i += 1; @@ -3270,7 +3270,7 @@ conditional expression evaluates to `false`, the `while` expression completes. An example: ``` -let mut i = 0u; +let mut i = 0us; while i < 10 { println!("hello"); @@ -3333,7 +3333,7 @@ by an implementation of `std::iter::Iterator`. An example of a for loop over the contents of an array: ``` -# type Foo = int; +# type Foo = i32; # fn bar(f: Foo) { } # let a = 0; # let b = 0; @@ -3349,8 +3349,8 @@ for e in v.iter() { An example of a for loop over a series of integers: ``` -# fn bar(b:uint) { } -for i in range(0u, 256) { +# fn bar(b:usize) { } +for i in range(0us, 256) { bar(i); } ``` @@ -3402,7 +3402,7 @@ fields of a particular variant. For example: enum List { Nil, Cons(X, Box>) } fn main() { - let x: List = List::Cons(10, box List::Cons(11, box List::Nil)); + let x: List = List::Cons(10, box List::Cons(11, box List::Nil)); match x { List::Cons(_, box List::Nil) => panic!("singleton list"), @@ -3428,7 +3428,7 @@ corresponding slice to the variable. Example: ``` # #![feature(advanced_slice_patterns)] -fn is_symmetric(list: &[uint]) -> bool { +fn is_symmetric(list: &[u32]) -> bool { match list { [] | [_] => true, [x, inside.., y] if x == y => is_symmetric(inside), @@ -3437,8 +3437,8 @@ fn is_symmetric(list: &[uint]) -> bool { } fn main() { - let sym = &[0, 1, 4, 2, 4, 1, 0]; - let not_sym = &[0, 1, 7, 2, 4, 1, 0]; + let sym = &[0us, 1, 4, 2, 4, 1, 0]; + let not_sym = &[0us, 1, 7, 2, 4, 1, 0]; assert!(is_symmetric(sym)); assert!(!is_symmetric(not_sym)); } @@ -3462,13 +3462,13 @@ An example of a `match` expression: ``` #![feature(box_syntax)] -# fn process_pair(a: int, b: int) { } +# fn process_pair(a: i32, b: i32) { } # fn process_ten() { } enum List { Nil, Cons(X, Box>) } fn main() { - let x: List = List::Cons(10, box List::Cons(11, box List::Nil)); + let x: List = List::Cons(10, box List::Cons(11, box List::Nil)); match x { List::Cons(a, box List::Cons(b, _)) => { @@ -3520,11 +3520,11 @@ fn main() { ``` Patterns can also dereference pointers by using the `&`, `&mut` and `box` -symbols, as appropriate. For example, these two matches on `x: &int` are +symbols, as appropriate. For example, these two matches on `x: &isize` are equivalent: ``` -# let x = &3i; +# let x = &3is; let y = match *x { 0 => "zero", _ => "some" }; let z = match x { &0 => "zero", _ => "some" }; @@ -3545,7 +3545,7 @@ Multiple match patterns may be joined with the `|` operator. A range of values may be specified with `...`. For example: ``` -# let x = 2i; +# let x = 2is; let message = match x { 0 | 1 => "not many", @@ -3565,8 +3565,8 @@ may refer to the variables bound within the pattern they follow. ``` # let maybe_digit = Some(0); -# fn process_digit(i: int) { } -# fn process_other(i: int) { } +# fn process_digit(i: i32) { } +# fn process_other(i: i32) { } let message = match maybe_digit { Some(x) if x < 10 => process_digit(x), @@ -3614,7 +3614,7 @@ caller frame. An example of a `return` expression: ``` -fn max(a: int, b: int) -> int { +fn max(a: i32, b: i32) -> i32 { if a > b { return a; } @@ -3666,12 +3666,12 @@ The machine types are the following: #### Machine-dependent integer types -The `uint` type is an unsigned integer type with the same number of bits as the +The `usize` type is an unsigned integer type with the same number of bits as the platform's pointer type. It can represent every memory address in the process. -The `int` type is a signed integer type with the same number of bits as the +The `isize` type is a signed integer type with the same number of bits as the platform's pointer type. The theoretical upper bound on object and array size -is the maximum `int` value. This ensures that `int` can be used to calculate +is the maximum `isize` value. This ensures that `isize` can be used to calculate differences between pointers into an object or array and can address every byte within an object along with one byte past the end. @@ -3707,7 +3707,7 @@ by the tuple type. An example of a tuple type and its use: ``` -type Pair<'a> = (int, &'a str); +type Pair<'a> = (i32, &'a str); let p: Pair<'static> = (10, "hello"); let (a, b) = p; assert!(b != "world"); @@ -3858,13 +3858,13 @@ or `extern`), a sequence of input types and an output type. An example of a `fn` type: ``` -fn add(x: int, y: int) -> int { +fn add(x: i32, y: i32) -> i32 { return x + y; } let mut x = add(5,7); -type Binop = fn(int, int) -> int; +type Binop = fn(i32, i32) -> i32; let bo: Binop = add; x = bo(5,7); ``` @@ -3886,16 +3886,16 @@ The type of a closure mapping an input of type `A` to an output of type `B` is An example of creating and calling a closure: ```rust -let captured_var = 10i; +let captured_var = 10is; let closure_no_args = |&:| println!("captured_var={}", captured_var); -let closure_args = |&: arg: int| -> int { +let closure_args = |&: arg: isize| -> isize { println!("captured_var={}, arg={}", captured_var, arg); arg // Note lack of semicolon after 'arg' }; -fn call_closure int>(c1: F, c2: G) { +fn call_closure isize>(c1: F, c2: G) { c1(); c2(2); } @@ -3927,7 +3927,7 @@ trait Printable { fn stringify(&self) -> String; } -impl Printable for int { +impl Printable for isize { fn stringify(&self) -> String { self.to_string() } } @@ -3936,7 +3936,7 @@ fn print(a: Box) { } fn main() { - print(Box::new(10i) as Box); + print(Box::new(10is) as Box); } ``` @@ -4102,7 +4102,7 @@ Local variables are immutable unless declared otherwise like: `let mut x = ...`. Function parameters are immutable unless declared with `mut`. The `mut` keyword applies only to the following parameter (so `|mut x, y|` and `fn f(mut x: -Box, y: Box)` declare one mutable variable `x` and one immutable +Box, y: Box)` declare one mutable variable `x` and one immutable variable `y`). Methods that take either `self` or `Box` can optionally place them in a @@ -4130,7 +4130,7 @@ the type of a box is `std::owned::Box`. An example of a box type and value: ``` -let x: Box = Box::new(10); +let x: Box = Box::new(10); ``` Box values exist in 1:1 correspondence with their heap allocation, copying a @@ -4139,7 +4139,7 @@ copy of a box to move ownership of the value. After a value has been moved, the source location cannot be used unless it is reinitialized. ``` -let x: Box = Box::new(10); +let x: Box = Box::new(10); let y = x; // attempting to use `x` will result in an error here ``` diff --git a/src/doc/trpl/crates-and-modules.md b/src/doc/trpl/crates-and-modules.md index 6c5c14fe3111d..25870d84a754f 100644 --- a/src/doc/trpl/crates-and-modules.md +++ b/src/doc/trpl/crates-and-modules.md @@ -208,9 +208,8 @@ Again, these declarations tell Rust to look for either these sub-modules don't have their own sub-modules, we've chosen to make them `src/english/greetings.rs` and `src/japanese/farewells.rs`. Whew! -Right now, the contents of `src/english/greetings.rs` and -`src/japanese/farewells.rs` are both empty at the moment. Let's add some -functions. +The contents of `src/english/greetings.rs` and `src/japanese/farewells.rs` are +both empty at the moment. Let's add some functions. Put this in `src/english/greetings.rs`: diff --git a/src/doc/trpl/macros.md b/src/doc/trpl/macros.md index e0bccb1b86f32..f429e9df19657 100644 --- a/src/doc/trpl/macros.md +++ b/src/doc/trpl/macros.md @@ -101,6 +101,7 @@ So `($x:ident -> (($e:expr)))`, though excessively fancy, would designate a macr that could be invoked like: `my_macro!(i->(( 2+2 )))`. To avoid ambiguity, macro invocation syntax must conform to the following rules: + * `expr` must be followed by `=>`, `,` or `;`. * `ty` and `path` must be followed by `=>`, `,`, `:`, `=`, `>` or `as`. * `pat` must be followed by `=>`, `,` or `=`. diff --git a/src/doc/trpl/ownership.md b/src/doc/trpl/ownership.md index 9ced5bb656c42..8b7e37dd4c2fd 100644 --- a/src/doc/trpl/ownership.md +++ b/src/doc/trpl/ownership.md @@ -395,7 +395,7 @@ static FOO: i32 = 5; let x: &'static i32 = &FOO; ``` -This adds an `i32` to the data segment of the binary, and `FOO` is a reference +This adds an `i32` to the data segment of the binary, and `x` is a reference to it. # Shared Ownership diff --git a/src/doc/trpl/unsafe.md b/src/doc/trpl/unsafe.md index de6d311be57ed..b28832c9c5c52 100644 --- a/src/doc/trpl/unsafe.md +++ b/src/doc/trpl/unsafe.md @@ -254,7 +254,7 @@ impl Drop for Unique { // Copy the object out from the pointer onto the stack, // where it is covered by normal Rust destructor semantics // and cleans itself up, if necessary - ptr::read(self.ptr as *const T); + ptr::read(self.ptr); // clean-up our allocation free(self.ptr as *mut c_void) @@ -703,10 +703,10 @@ Other features provided by lang items include: `deref`, and `add` respectively. - stack unwinding and general failure; the `eh_personality`, `fail` and `fail_bounds_checks` lang items. -- the traits in `std::markers` used to indicate types of +- the traits in `std::marker` used to indicate types of various kinds; lang items `send`, `sync` and `copy`. - the marker types and variance indicators found in - `std::markers`; lang items `covariant_type`, + `std::marker`; lang items `covariant_type`, `contravariant_lifetime`, `no_sync_bound`, etc. Lang items are loaded lazily by the compiler; e.g. if one never uses diff --git a/src/etc/kate/rust.xml b/src/etc/kate/rust.xml index 925034eaa00b0..3ceec0f250a33 100644 --- a/src/etc/kate/rust.xml +++ b/src/etc/kate/rust.xml @@ -249,7 +249,7 @@ - + diff --git a/src/etc/nano/rust.nanorc b/src/etc/nano/rust.nanorc new file mode 100644 index 0000000000000..1217769096df0 --- /dev/null +++ b/src/etc/nano/rust.nanorc @@ -0,0 +1,35 @@ +# Nano configuration for Rust +# Copyright 2015 The Rust Project Developers. +# +# NOTE: Rules are applied in order: later rules re-colorize matching text. +syntax "rust" "\.rs" + +# function definition +color magenta "fn [a-z0-9_]+" + +# Reserved words +color yellow "\<(abstract|alignof|as|be|box|break|const|continue|crate|do|else|enum|extern|false|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|offsetof|override|priv|pub|pure|ref|return|sizeof|static|self|struct|super|true|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\>" + +# macros +color red "[a-z_]+!" + +# Constants +color magenta "[A-Z][A-Z_]+" + +# Traits/Enums/Structs/Types/etc. +color magenta "[A-Z][a-z]+" + +# Strings +color green "\".*\"" +color green start="\".*\\$" end=".*\"" +# NOTE: This isn't accurate but matching "#{0,} for the end of the string is too liberal +color green start="r#+\"" end="\"#+" + +# Comments +color blue "//.*" + +# Attributes +color magenta start="#!\[" end="\]" + +# Some common markers +color brightcyan "(XXX|TODO|FIXME|\?\?\?)" diff --git a/src/etc/tidy.py b/src/etc/tidy.py index 3d44c27a16e6f..68b276559c5c4 100644 --- a/src/etc/tidy.py +++ b/src/etc/tidy.py @@ -58,14 +58,14 @@ def do_license_check(name, contents): for line in fileinput.input(file_names, openhook=fileinput.hook_encoded("utf-8")): - if fileinput.filename().find("tidy.py") == -1: - if line.find(cr_flag) != -1: + if "tidy.py" not in fileinput.filename(): + if cr_flag in line: check_cr = False - if line.find(tab_flag) != -1: + if tab_flag in line: check_tab = False - if line.find(linelength_flag) != -1: + if linelength_flag in line: check_linelength = False - if line.find("TODO") != -1: + if "TODO" in line: report_err("TODO is deprecated; use FIXME") match = re.match(r'^.*/(\*|/!?)\s*XXX', line) if match: @@ -86,10 +86,10 @@ def do_license_check(name, contents): if "SNAP" in line: report_warn("unmatched SNAP line: " + line) - if check_tab and (line.find('\t') != -1 and - fileinput.filename().find("Makefile") == -1): + if check_tab and ('\t' in line and + "Makefile" not in fileinput.filename()): report_err("tab character") - if check_cr and not autocrlf and line.find('\r') != -1: + if check_cr and not autocrlf and '\r' in line: report_err("CR character") if line.endswith(" \n") or line.endswith("\t\n"): report_err("trailing whitespace") diff --git a/src/liballoc/heap.rs b/src/liballoc/heap.rs index b7bc1b4764614..bd5b43b782e8d 100644 --- a/src/liballoc/heap.rs +++ b/src/liballoc/heap.rs @@ -298,7 +298,7 @@ mod imp { libc::realloc(ptr as *mut libc::c_void, size as libc::size_t) as *mut u8 } else { let new_ptr = allocate(size, align); - ptr::copy_memory(new_ptr, ptr as *const u8, cmp::min(size, old_size)); + ptr::copy_memory(new_ptr, ptr, cmp::min(size, old_size)); deallocate(ptr, old_size, align); new_ptr } diff --git a/src/libcollections/btree/node.rs b/src/libcollections/btree/node.rs index 7d5422290e25a..19c48f88caa5c 100644 --- a/src/libcollections/btree/node.rs +++ b/src/libcollections/btree/node.rs @@ -326,11 +326,11 @@ impl Node { pub fn as_slices<'a>(&'a self) -> (&'a [K], &'a [V]) { unsafe {( mem::transmute(raw::Slice { - data: self.keys.0 as *const K, + data: self.keys.0, len: self.len() }), mem::transmute(raw::Slice { - data: self.vals.0 as *const V, + data: self.vals.0, len: self.len() }) )} @@ -349,7 +349,7 @@ impl Node { } else { unsafe { mem::transmute(raw::Slice { - data: self.edges.0 as *const Node, + data: self.edges.0, len: self.len() + 1 }) } diff --git a/src/libcollections/ring_buf.rs b/src/libcollections/ring_buf.rs index c3d2267586837..b9cb4be7c1891 100644 --- a/src/libcollections/ring_buf.rs +++ b/src/libcollections/ring_buf.rs @@ -88,19 +88,19 @@ impl RingBuf { /// Turn ptr into a slice #[inline] unsafe fn buffer_as_slice(&self) -> &[T] { - mem::transmute(RawSlice { data: self.ptr as *const T, len: self.cap }) + mem::transmute(RawSlice { data: self.ptr, len: self.cap }) } /// Turn ptr into a mut slice #[inline] unsafe fn buffer_as_mut_slice(&mut self) -> &mut [T] { - mem::transmute(RawSlice { data: self.ptr as *const T, len: self.cap }) + mem::transmute(RawSlice { data: self.ptr, len: self.cap }) } /// Moves an element out of the buffer #[inline] unsafe fn buffer_read(&mut self, off: uint) -> T { - ptr::read(self.ptr.offset(off as int) as *const T) + ptr::read(self.ptr.offset(off as int)) } /// Writes an element into the buffer, moving it. diff --git a/src/libcollections/slice.rs b/src/libcollections/slice.rs index 4812ecc2c0b75..988ec4c661faa 100644 --- a/src/libcollections/slice.rs +++ b/src/libcollections/slice.rs @@ -1222,7 +1222,7 @@ fn insertion_sort(v: &mut [T], mut compare: F) where F: FnMut(&T, &T) -> O &*buf_v.offset(j), (i - j) as uint); ptr::copy_nonoverlapping_memory(buf_v.offset(j), - &tmp as *const T, + &tmp, 1); mem::forget(tmp); } diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs index 689d96b4b2955..4ddab8c533aab 100644 --- a/src/libcollections/vec.rs +++ b/src/libcollections/vec.rs @@ -426,7 +426,7 @@ impl Vec { pub fn as_mut_slice<'a>(&'a mut self) -> &'a mut [T] { unsafe { mem::transmute(RawSlice { - data: *self.ptr as *const T, + data: *self.ptr, len: self.len, }) } @@ -574,7 +574,7 @@ impl Vec { let ptr = self.as_mut_ptr().offset(index as int); // copy it out, unsafely having a copy of the value on // the stack and in the vector at the same time. - ret = ptr::read(ptr as *const T); + ret = ptr::read(ptr); // Shift everything down to fill in that spot. ptr::copy_memory(ptr, &*ptr.offset(1), len - index - 1); @@ -879,7 +879,7 @@ impl Vec { // | | // end_u end_t - let t = ptr::read(pv.start_t as *const T); + let t = ptr::read(pv.start_t); // start_u start_t // | | // +-+-+-+-+-+-+-+-+-+ @@ -1443,7 +1443,7 @@ impl AsSlice for Vec { fn as_slice<'a>(&'a self) -> &'a [T] { unsafe { mem::transmute(RawSlice { - data: *self.ptr as *const T, + data: *self.ptr, len: self.len }) } @@ -1806,11 +1806,11 @@ impl Drop for PartialVecNonZeroSized { // We have instances of `U`s and `T`s in `vec`. Destruct them. while self.start_u != self.end_u { - let _ = ptr::read(self.start_u as *const U); // Run a `U` destructor. + let _ = ptr::read(self.start_u); // Run a `U` destructor. self.start_u = self.start_u.offset(1); } while self.start_t != self.end_t { - let _ = ptr::read(self.start_t as *const T); // Run a `T` destructor. + let _ = ptr::read(self.start_t); // Run a `T` destructor. self.start_t = self.start_t.offset(1); } // After this destructor ran, the destructor of `vec` will run, diff --git a/src/libcore/atomic.rs b/src/libcore/atomic.rs index aa93d9ed83792..18f7fff9053ce 100644 --- a/src/libcore/atomic.rs +++ b/src/libcore/atomic.rs @@ -199,7 +199,7 @@ impl AtomicBool { #[inline] #[stable] pub fn load(&self, order: Ordering) -> bool { - unsafe { atomic_load(self.v.get() as *const usize, order) > 0 } + unsafe { atomic_load(self.v.get(), order) > 0 } } /// Stores a value into the bool. @@ -438,7 +438,7 @@ impl AtomicIsize { /// ``` #[inline] pub fn load(&self, order: Ordering) -> isize { - unsafe { atomic_load(self.v.get() as *const isize, order) } + unsafe { atomic_load(self.v.get(), order) } } /// Stores a value into the isize. @@ -615,7 +615,7 @@ impl AtomicUsize { /// ``` #[inline] pub fn load(&self, order: Ordering) -> usize { - unsafe { atomic_load(self.v.get() as *const usize, order) } + unsafe { atomic_load(self.v.get(), order) } } /// Stores a value into the usize. @@ -796,7 +796,7 @@ impl AtomicPtr { #[stable] pub fn load(&self, order: Ordering) -> *mut T { unsafe { - atomic_load(self.p.get() as *const *mut T, order) as *mut T + atomic_load(self.p.get(), order) as *mut T } } @@ -1070,7 +1070,7 @@ impl AtomicInt { #[inline] pub fn load(&self, order: Ordering) -> int { - unsafe { atomic_load(self.v.get() as *const int, order) } + unsafe { atomic_load(self.v.get(), order) } } #[inline] @@ -1123,7 +1123,7 @@ impl AtomicUint { #[inline] pub fn load(&self, order: Ordering) -> uint { - unsafe { atomic_load(self.v.get() as *const uint, order) } + unsafe { atomic_load(self.v.get(), order) } } #[inline] diff --git a/src/libcore/ptr.rs b/src/libcore/ptr.rs index baf998d0828a2..0b89467d63b83 100644 --- a/src/libcore/ptr.rs +++ b/src/libcore/ptr.rs @@ -329,7 +329,7 @@ impl PtrExt for *mut T { #[inline] #[stable] unsafe fn offset(self, count: int) -> *mut T { - intrinsics::offset(self as *const T, count) as *mut T + intrinsics::offset(self, count) as *mut T } #[inline] diff --git a/src/libcore/slice.rs b/src/libcore/slice.rs index 22da168911daa..50cbb7a61dce3 100644 --- a/src/libcore/slice.rs +++ b/src/libcore/slice.rs @@ -741,7 +741,7 @@ macro_rules! make_slice { diff / mem::size_of::<$t>() }; unsafe { - transmute::<_, $result>(RawSlice { data: $start as *const T, len: len }) + transmute::<_, $result>(RawSlice { data: $start, len: len }) } }} } @@ -1409,7 +1409,7 @@ pub unsafe fn from_raw_buf<'a, T>(p: &'a *const T, len: uint) -> &'a [T] { #[inline] #[unstable = "should be renamed to from_raw_parts_mut"] pub unsafe fn from_raw_mut_buf<'a, T>(p: &'a *mut T, len: uint) -> &'a mut [T] { - transmute(RawSlice { data: *p as *const T, len: len }) + transmute(RawSlice { data: *p, len: len }) } // diff --git a/src/librustc_trans/trans/builder.rs b/src/librustc_trans/trans/builder.rs index 75194e3d21fcb..2ad4211034240 100644 --- a/src/librustc_trans/trans/builder.rs +++ b/src/librustc_trans/trans/builder.rs @@ -33,7 +33,7 @@ pub struct Builder<'a, 'tcx: 'a> { // lot more efficient) than doing str::as_c_str("", ...) every time. pub fn noname() -> *const c_char { static CNULL: c_char = 0; - &CNULL as *const c_char + &CNULL } impl<'a, 'tcx> Builder<'a, 'tcx> { diff --git a/src/librustdoc/flock.rs b/src/librustdoc/flock.rs index dcc90117d2660..b682723631d3f 100644 --- a/src/librustdoc/flock.rs +++ b/src/librustdoc/flock.rs @@ -126,7 +126,7 @@ mod imp { l_sysid: 0, }; let ret = unsafe { - libc::fcntl(fd, os::F_SETLKW, &flock as *const os::flock) + libc::fcntl(fd, os::F_SETLKW, &flock) }; if ret == -1 { unsafe { libc::close(fd); } @@ -147,7 +147,7 @@ mod imp { l_sysid: 0, }; unsafe { - libc::fcntl(self.fd, os::F_SETLK, &flock as *const os::flock); + libc::fcntl(self.fd, os::F_SETLK, &flock); libc::close(self.fd); } } diff --git a/src/libstd/collections/hash/table.rs b/src/libstd/collections/hash/table.rs index f28b95dbe95c4..d810460a7d497 100644 --- a/src/libstd/collections/hash/table.rs +++ b/src/libstd/collections/hash/table.rs @@ -395,9 +395,6 @@ impl> + DerefMut> FullBucket { /// This works similarly to `put`, building an `EmptyBucket` out of the /// taken bucket. pub fn take(mut self) -> (EmptyBucket, K, V) { - let key = self.raw.key as *const K; - let val = self.raw.val as *const V; - self.table.size -= 1; unsafe { @@ -408,8 +405,8 @@ impl> + DerefMut> FullBucket { idx: self.idx, table: self.table }, - ptr::read(key), - ptr::read(val) + ptr::read(self.raw.key), + ptr::read(self.raw.val) ) } } @@ -477,8 +474,8 @@ impl>> GapThenFull { pub fn shift(mut self) -> Option> { unsafe { *self.gap.raw.hash = mem::replace(&mut *self.full.raw.hash, EMPTY_BUCKET); - copy_nonoverlapping_memory(self.gap.raw.key, self.full.raw.key as *const K, 1); - copy_nonoverlapping_memory(self.gap.raw.val, self.full.raw.val as *const V, 1); + copy_nonoverlapping_memory(self.gap.raw.key, self.full.raw.key, 1); + copy_nonoverlapping_memory(self.gap.raw.val, self.full.raw.val, 1); } let FullBucket { raw: prev_raw, idx: prev_idx, .. } = self.full; @@ -781,8 +778,8 @@ impl<'a, K, V> Iterator for RevMoveBuckets<'a, K, V> { if *self.raw.hash != EMPTY_BUCKET { self.elems_left -= 1; return Some(( - ptr::read(self.raw.key as *const K), - ptr::read(self.raw.val as *const V) + ptr::read(self.raw.key), + ptr::read(self.raw.val) )); } } @@ -878,8 +875,8 @@ impl Iterator for IntoIter { SafeHash { hash: *bucket.hash, }, - ptr::read(bucket.key as *const K), - ptr::read(bucket.val as *const V) + ptr::read(bucket.key), + ptr::read(bucket.val) ) } }) @@ -906,8 +903,8 @@ impl<'a, K, V> Iterator for Drain<'a, K, V> { SafeHash { hash: ptr::replace(bucket.hash, EMPTY_BUCKET), }, - ptr::read(bucket.key as *const K), - ptr::read(bucket.val as *const V) + ptr::read(bucket.key), + ptr::read(bucket.val) ) } }) diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs index ddb8129630f75..648326eee9946 100644 --- a/src/libstd/lib.rs +++ b/src/libstd/lib.rs @@ -18,7 +18,7 @@ //! //! The [`ptr`](ptr/index.html) and [`mem`](mem/index.html) //! modules deal with unsafe pointers and memory manipulation. -//! [`markers`](markers/index.html) defines the special built-in traits, +//! [`marker`](marker/index.html) defines the special built-in traits, //! and [`raw`](raw/index.html) the runtime representation of Rust types. //! These are some of the lowest-level building blocks in Rust. //! diff --git a/src/libstd/sys/unix/backtrace.rs b/src/libstd/sys/unix/backtrace.rs index 7164931c55acd..70b9c012b008a 100644 --- a/src/libstd/sys/unix/backtrace.rs +++ b/src/libstd/sys/unix/backtrace.rs @@ -229,7 +229,7 @@ fn print(w: &mut Writer, idx: int, addr: *mut libc::c_void) -> IoResult<()> { } let mut info: Dl_info = unsafe { intrinsics::init() }; - if unsafe { dladdr(addr as *const libc::c_void, &mut info) == 0 } { + if unsafe { dladdr(addr, &mut info) == 0 } { output(w, idx,addr, None) } else { output(w, idx, addr, Some(unsafe { diff --git a/src/libstd/thread_local/mod.rs b/src/libstd/thread_local/mod.rs index e7c4e4ccdfb88..4c99cff34da65 100644 --- a/src/libstd/thread_local/mod.rs +++ b/src/libstd/thread_local/mod.rs @@ -449,7 +449,7 @@ mod imp { // destructor as running for this thread so calls to `get` will return // `None`. *(*ptr).dtor_running.get() = true; - ptr::read((*ptr).inner.get() as *const T); + ptr::read((*ptr).inner.get()); } } diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index f1f547ba0c7dd..10fb0a73cec7b 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -253,9 +253,10 @@ pub fn file_to_filemap(sess: &ParseSess, path: &Path, spanopt: Option) let bytes = match File::open(path).read_to_end() { Ok(bytes) => bytes, Err(e) => { - err(&format!("couldn't read {:?}: {:?}", + let error_msg = e.desc; + err(&format!("couldn't read {:?}: {}", path.display(), - e)[]); + error_msg)[]); unreachable!() } }; diff --git a/src/llvm b/src/llvm index ec1fdb3b9d3b1..b820135911e17 160000 --- a/src/llvm +++ b/src/llvm @@ -1 +1 @@ -Subproject commit ec1fdb3b9d3b1fb9e1dae97a65dd3a13db9bfb23 +Subproject commit b820135911e17c7a46b901db56baa48e5155bf46 diff --git a/src/rustllvm/llvm-auto-clean-trigger b/src/rustllvm/llvm-auto-clean-trigger index 4a16b9c257cbe..9dd66ac0a3059 100644 --- a/src/rustllvm/llvm-auto-clean-trigger +++ b/src/rustllvm/llvm-auto-clean-trigger @@ -1,4 +1,4 @@ # If this file is modified, then llvm will be forcibly cleaned and then rebuilt. # The actual contents of this file do not matter, but to trigger a change on the # build bots then the contents should be changed so git updates the mtime. -2015-01-13 +2015-01-18