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

Rollup of 9 pull requests #45233

Merged
merged 24 commits into from
Oct 13, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
bb74c20
Inline eq_slice into str::eq
leoyvens Oct 3, 2017
47fc913
Update the `jobserver` crate
alexcrichton Oct 5, 2017
e6728ec
fix documentation typo
camsteffen Oct 8, 2017
a263a78
Fix PEP8 style issues in bootstrap code
johnthagen Oct 9, 2017
fcee950
let rustdoc print the crate version into docs
QuietMisdreavus Oct 2, 2017
7735f59
unstable book: OIBIT
tinaun Oct 10, 2017
364148d
unstable book: unboxed_closures
tinaun Oct 10, 2017
d078252
unstable book: fn_traits
tinaun Oct 10, 2017
1cb9f70
Upgrade some comments to doc comments
oli-obk Oct 10, 2017
ca61ea2
Shorten some test names
petrochenkov Oct 10, 2017
7ea286e
render the rust version into std/compiler/test docs
QuietMisdreavus Oct 9, 2017
d5ef9f9
formatting fixes
tinaun Oct 10, 2017
23a5fb8
Merge branch 'master' into pep8-bootstrap
johnthagen Oct 11, 2017
3cb5294
Fix typo during merge from master
johnthagen Oct 11, 2017
445bbde
Rollup merge of #44989 - QuietMisdreavus:what-is-your-quest, r=Guilla…
kennytm Oct 12, 2017
4f83c35
Rollup merge of #45005 - leodasvacas:inline-eq-slice-into-eq, r=jseyf…
kennytm Oct 12, 2017
81ea49f
Rollup merge of #45049 - alexcrichton:update-jobserver, r=sfackler
kennytm Oct 12, 2017
ff53dc7
Rollup merge of #45105 - camsteffen:patch-2, r=pnkfelix
kennytm Oct 12, 2017
6944768
Rollup merge of #45121 - johnthagen:pep8-bootstrap, r=alexcrichton
kennytm Oct 12, 2017
7640cda
Rollup merge of #45166 - tinaun:more_unstable_docs, r=steveklabnik
kennytm Oct 12, 2017
db6fdf6
Rollup merge of #45172 - oli-obk:patch-8, r=pnkfelix
kennytm Oct 12, 2017
e1a6795
Rollup merge of #45190 - petrochenkov:shorten, r=alexcrichton
kennytm Oct 12, 2017
19901df
Fix typo in libsyntax/parse/lexer/unicode_chars.rs
kennytm Oct 12, 2017
45e4c19
Rollup merge of #45231 - kennytm:patch-1, r=petrochenkov
kennytm Oct 12, 2017
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
10 changes: 5 additions & 5 deletions src/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions src/bootstrap/bin/rustdoc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,14 @@ fn main() {
cmd.arg("-Z").arg("force-unstable-if-unmarked");
}

// Bootstrap's Cargo-command builder sets this variable to the current Rust version; let's pick
// it up so we can make rustdoc print this into the docs
if let Some(version) = env::var_os("RUSTDOC_CRATE_VERSION") {
// This "unstable-options" can be removed when `--crate-version` is stabilized
cmd.arg("-Z").arg("unstable-options")
.arg("--crate-version").arg(version);
}

std::process::exit(match cmd.status() {
Ok(s) => s.code().unwrap_or(1),
Err(e) => panic!("\n\nfailed to run {:?}: {}\n\n", cmd, e),
Expand Down
1 change: 1 addition & 0 deletions src/bootstrap/bootstrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,7 @@ def default_build_triple():

return "{}-{}".format(cputype, ostype)


class RustBuild(object):
"""Provide all the methods required to build Rust"""
def __init__(self):
Expand Down
6 changes: 5 additions & 1 deletion src/bootstrap/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,8 @@ impl<'a> Builder<'a> {
.env("RUSTC_SYSROOT", self.sysroot(compiler))
.env("RUSTC_LIBDIR", self.sysroot_libdir(compiler, self.build.build))
.env("CFG_RELEASE_CHANNEL", &self.build.config.channel)
.env("RUSTDOC_REAL", self.rustdoc(host));
.env("RUSTDOC_REAL", self.rustdoc(host))
.env("RUSTDOC_CRATE_VERSION", self.build.rust_version());
cmd
}

Expand Down Expand Up @@ -574,6 +575,9 @@ impl<'a> Builder<'a> {
cargo.env("RUSTC_SAVE_ANALYSIS", "api".to_string());
}

// For `cargo doc` invocations, make rustdoc print the Rust version into the docs
cargo.env("RUSTDOC_CRATE_VERSION", self.build.rust_version());

// Environment variables *required* throughout the build
//
// FIXME: should update code to not require this env var
Expand Down
48 changes: 31 additions & 17 deletions src/bootstrap/configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,26 @@
sys.path.append(os.path.join(rust_dir, "src", "bootstrap"))
import bootstrap


class Option:
def __init__(self, name, rustbuild, desc, value):
self.name = name
self.rustbuild = rustbuild
self.desc = desc
self.value = value


options = []


def o(*args):
options.append(Option(*args, value=False))


def v(*args):
options.append(Option(*args, value=True))


o("debug", "rust.debug", "debug mode; disables optimization unless `--enable-optimize` given")
o("docs", "build.docs", "build standard library documentation")
o("compiler-docs", "build.compiler-docs", "build compiler documentation")
Expand Down Expand Up @@ -136,13 +141,16 @@ def v(*args):

v("set", None, "set arbitrary key/value pairs in TOML configuration")


def p(msg):
print("configure: " + msg)


def err(msg):
print("configure: error: " + msg)
sys.exit(1)


if '--help' in sys.argv or '-h' in sys.argv:
print('Usage: ./configure [options]')
print('')
Expand Down Expand Up @@ -208,7 +216,7 @@ def err(msg):
continue

found = True
if not option.name in known_args:
if option.name not in known_args:
known_args[option.name] = []
known_args[option.name].append((option, value))
break
Expand All @@ -227,27 +235,30 @@ def err(msg):
# TOML we're going to write out
config = {}


def build():
if 'build' in known_args:
return known_args['build'][0][1]
return bootstrap.default_build_triple()


def set(key, value):
s = "{:20} := {}".format(key, value)
if len(s) < 70:
p(s)
else:
p(s[:70] + " ...")

arr = config
parts = key.split('.')
for i, part in enumerate(parts):
if i == len(parts) - 1:
arr[part] = value
else:
if not part in arr:
arr[part] = {}
arr = arr[part]
s = "{:20} := {}".format(key, value)
if len(s) < 70:
p(s)
else:
p(s[:70] + " ...")

arr = config
parts = key.split('.')
for i, part in enumerate(parts):
if i == len(parts) - 1:
arr[part] = value
else:
if part not in arr:
arr[part] = {}
arr = arr[part]


for key in known_args:
# The `set` option is special and can be passed a bunch of times
Expand Down Expand Up @@ -345,6 +356,7 @@ def set(key, value):
targets[target] = sections['target'][:]
targets[target][0] = targets[target][0].replace("x86_64-unknown-linux-gnu", target)


# Here we walk through the constructed configuration we have from the parsed
# command line arguments. We then apply each piece of configuration by
# basically just doing a `sed` to change the various configuration line to what
Expand All @@ -362,6 +374,7 @@ def to_toml(value):
else:
raise RuntimeError('no toml')


def configure_section(lines, config):
for key in config:
value = config[key]
Expand All @@ -375,9 +388,10 @@ def configure_section(lines, config):
if not found:
raise RuntimeError("failed to find config line for {}".format(key))


for section_key in config:
section_config = config[section_key]
if not section_key in sections:
if section_key not in sections:
raise RuntimeError("config key {} not in sections".format(section_key))

if section_key == 'target':
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# `optin_builtin_traits`

The tracking issue for this feature is [#13231]

[#13231]: https://github.com/rust-lang/rust/issues/13231

----

The `optin_builtin_traits` feature gate allows you to define auto traits.

Auto traits, like [`Send`] or [`Sync`] in the standard library, are marker traits
that are automatically implemented for every type, unless the type, or a type it contains,
has explictly opted out via a negative impl.

[`Send`]: https://doc.rust-lang.org/std/marker/trait.Send.html
[`Sync`]: https://doc.rust-lang.org/std/marker/trait.Sync.html

```rust,ignore
impl !Type for Trait
```

Example:

```rust
#![feature(optin_builtin_traits)]

trait Valid {}

impl Valid for .. {}

struct True;
struct False;

impl !Valid for False {}

struct MaybeValid<T>(T);

fn must_be_valid<T: Valid>(_t: T) { }

fn main() {
// works
must_be_valid( MaybeValid(True) );

// compiler error - trait bound not satisfied
// must_be_valid( MaybeValid(False) );
}
```
25 changes: 25 additions & 0 deletions src/doc/unstable-book/src/language-features/unboxed-closures.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# `unboxed_closures`

The tracking issue for this feature is [#29625]

See Also: [`fn_traits`](library-features/fn-traits.html)

[#29625]: https://github.com/rust-lang/rust/issues/29625

----

The `unboxed_closures` feature allows you to write functions using the `"rust-call"` ABI,
required for implmenting the [`Fn*`] family of traits. `"rust-call"` functions must have
exactly one (non self) argument, a tuple representing the argument list.

[`Fn*`]: https://doc.rust-lang.org/std/ops/trait.Fn.html

```rust
#![feature(unboxed_closures)]

extern "rust-call" fn add_args(args: (u32, u32)) -> u32 {
args.0 + args.1
}

fn main() {}
```
35 changes: 35 additions & 0 deletions src/doc/unstable-book/src/library-features/fn-traits.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# `fn_traits`

The tracking issue for this feature is [#29625]

See Also: [`unboxed_closures`](language-features/unboxed-closures.html)

[#29625]: https://github.com/rust-lang/rust/issues/29625

----

The `fn_traits` feature allows for implementation of the [`Fn*`] traits
for creating custom closure-like types.

[`Fn*`]: https://doc.rust-lang.org/std/ops/trait.Fn.html

```rust
#![feature(unboxed_closures)]
#![feature(fn_traits)]

struct Adder {
a: u32
}

impl FnOnce<(u32, )> for Adder {
type Output = u32;
extern "rust-call" fn call_once(self, b: (u32, )) -> Self::Output {
self.a + b.0
}
}

fn main() {
let adder = Adder { a: 3 };
assert_eq!(adder(2), 5);
}
```
13 changes: 1 addition & 12 deletions src/libcore/str/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1405,16 +1405,6 @@ impl<'a> DoubleEndedIterator for LinesAny<'a> {
#[allow(deprecated)]
impl<'a> FusedIterator for LinesAny<'a> {}

/*
Section: Comparing strings
*/

/// Bytewise slice equality
#[inline]
fn eq_slice(a: &str, b: &str) -> bool {
a.as_bytes() == b.as_bytes()
}

/*
Section: UTF-8 validation
*/
Expand Down Expand Up @@ -1590,7 +1580,6 @@ mod traits {
use cmp::Ordering;
use ops;
use slice::{self, SliceIndex};
use str::eq_slice;

/// Implements ordering of strings.
///
Expand All @@ -1611,7 +1600,7 @@ mod traits {
impl PartialEq for str {
#[inline]
fn eq(&self, other: &str) -> bool {
eq_slice(self, other)
self.as_bytes() == other.as_bytes()
}
#[inline]
fn ne(&self, other: &str) -> bool { !(*self).eq(other) }
Expand Down
2 changes: 1 addition & 1 deletion src/librustc/hir/itemlikevisit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ use super::intravisit::Visitor;
/// - Example: Lifetime resolution, which wants to bring lifetimes declared on the
/// impl into scope while visiting the impl-items, and then back out again.
/// - How: Implement `intravisit::Visitor` and override the
/// `visit_nested_map()` methods to return
/// `nested_visit_map()` methods to return
/// `NestedVisitorMap::All`. Walk your crate with
/// `intravisit::walk_crate()` invoked on `tcx.hir.krate()`.
/// - Pro: Visitor methods for any kind of HIR node, not just item-like things.
Expand Down
Loading