Skip to content

Commit 2586303

Browse files
author
Keegan McAllister
committed
---
yaml --- r: 179577 b: refs/heads/master c: 93b642d h: refs/heads/master i: 179575: 5a57fc3 v: v3
1 parent fc8deb7 commit 2586303

Some content is hidden

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

74 files changed

+378
-3393
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: de8bc44753881aacdaf435f5ba61de3c20916761
2+
refs/heads/master: 93b642d9743edea728ef08b2d6fd17229caaad43
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 0ba9e1fa52627404a1e5b90f745f96a872a0c564
55
refs/heads/try: ccf8fedf1cffcb8f6f3581d53d220039e192fe77

trunk/src/doc/reference.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2014,6 +2014,11 @@ type int8_t = i8;
20142014
- `no_start` - disable linking to the `native` crate, which specifies the
20152015
"start" language item.
20162016
- `no_std` - disable linking to the `std` crate.
2017+
- `plugin` — load a list of named crates as compiler plugins, e.g.
2018+
`#![plugin(foo, bar)]`. Optional arguments for each plugin,
2019+
i.e. `#![plugin(foo(... args ...))]`, are provided to the plugin's
2020+
registrar function. The `plugin` feature gate is required to use
2021+
this attribute.
20172022

20182023
### Module-only attributes
20192024

@@ -2082,7 +2087,7 @@ On `struct`s:
20822087
remove any padding between fields (note that this is very fragile and may
20832088
break platforms which require aligned access).
20842089

2085-
### Macro- and plugin-related attributes
2090+
### Macro-related attributes
20862091

20872092
- `macro_use` on a `mod` — macros defined in this module will be visible in the
20882093
module's parent, after this module has been included.
@@ -2097,13 +2102,8 @@ On `struct`s:
20972102

20982103
- `macro_export` - export a macro for cross-crate usage.
20992104

2100-
- `plugin` on an `extern crate` — load this crate as a [compiler
2101-
plugin][plugin]. The `plugin` feature gate is required. Any arguments to
2102-
the attribute, e.g. `#[plugin=...]` or `#[plugin(...)]`, are provided to the
2103-
plugin.
2104-
2105-
- `no_link` on an `extern crate` — even if we load this crate for macros or
2106-
compiler plugins, don't link it into the output.
2105+
- `no_link` on an `extern crate` — even if we load this crate for macros, don't
2106+
link it into the output.
21072107

21082108
See the [macros section of the
21092109
book](book/macros.html#scoping-and-macro-import/export) for more information on

trunk/src/doc/trpl/plugins.md

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,14 @@ information.
3030
extend the compiler's behavior with new syntax extensions, lint checks, etc.
3131

3232
A plugin is a dynamic library crate with a designated *registrar* function that
33-
registers extensions with `rustc`. Other crates can use these extensions by
34-
loading the plugin crate with `#[plugin] extern crate`. See the
33+
registers extensions with `rustc`. Other crates can load these extensions using
34+
the crate attribute `#![plugin(...)]`. See the
3535
[`rustc::plugin`](../rustc/plugin/index.html) documentation for more about the
3636
mechanics of defining and loading a plugin.
3737

38-
Arguments passed as `#[plugin=...]` or `#[plugin(...)]` are not interpreted by
39-
rustc itself. They are provided to the plugin through the `Registry`'s [`args`
40-
method](../rustc/plugin/registry/struct.Registry.html#method.args).
38+
If present, arguments passed as `#![plugin(foo(... args ...))]` are not
39+
interpreted by rustc itself. They are provided to the plugin through the
40+
`Registry`'s [`args` method](../rustc/plugin/registry/struct.Registry.html#method.args).
4141

4242
# Syntax extensions
4343

@@ -110,8 +110,7 @@ Then we can use `rn!()` like any other macro:
110110

111111
```ignore
112112
#![feature(plugin)]
113-
114-
#[plugin] extern crate roman_numerals;
113+
#![plugin(roman_numerals)]
115114
116115
fn main() {
117116
assert_eq!(rn!(MMXV), 2015);
@@ -219,7 +218,7 @@ pub fn plugin_registrar(reg: &mut Registry) {
219218
Then code like
220219

221220
```ignore
222-
#[plugin] extern crate lint_plugin_test;
221+
#![plugin(lint_plugin_test)]
223222
224223
fn lintme() { }
225224
```

trunk/src/libcollections/str.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ pub use core::str::{Lines, LinesAny, MatchIndices, SplitStr, CharRange};
8080
pub use core::str::{Split, SplitTerminator};
8181
pub use core::str::{SplitN, RSplitN};
8282
pub use core::str::{from_utf8, CharEq, Chars, CharIndices, Bytes};
83-
pub use core::str::{from_utf8_unchecked, from_c_str, ParseBoolError};
83+
pub use core::str::{from_utf8_unchecked, from_c_str};
8484
pub use unicode::str::{Words, Graphemes, GraphemeIndices};
8585

8686
/*

trunk/src/librustc/diagnostics.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,7 @@ register_diagnostics! {
126126
E0312, // lifetime of reference outlives lifetime of borrowed content
127127
E0313, // lifetime of borrowed pointer outlives lifetime of captured variable
128128
E0314, // closure outlives stack frame
129-
E0315, // cannot invoke closure outside of its lifetime
130-
E0316 // nested quantification of lifetimes
129+
E0315 // cannot invoke closure outside of its lifetime
131130
}
132131

133132
__build_diagnostic_array! { DIAGNOSTICS }

trunk/src/librustc/metadata/creader.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use syntax::ast;
2626
use syntax::abi;
2727
use syntax::attr;
2828
use syntax::attr::AttrMetaMethods;
29-
use syntax::codemap::{COMMAND_LINE_SP, Span, mk_sp};
29+
use syntax::codemap::{Span, mk_sp};
3030
use syntax::parse;
3131
use syntax::parse::token::InternedString;
3232
use syntax::parse::token;
@@ -457,13 +457,13 @@ impl<'a> CrateReader<'a> {
457457
CrateOrString::Krate(c) => {
458458
(self.extract_crate_info(c).unwrap(), c.span)
459459
}
460-
CrateOrString::Str(s) => {
460+
CrateOrString::Str(sp, s) => {
461461
(CrateInfo {
462462
name: s.to_string(),
463463
ident: s.to_string(),
464464
id: ast::DUMMY_NODE_ID,
465465
should_link: true,
466-
}, COMMAND_LINE_SP)
466+
}, sp)
467467
}
468468
};
469469
let target_triple = &self.sess.opts.target_triple[];
@@ -531,7 +531,7 @@ impl<'a> CrateReader<'a> {
531531
#[derive(Copy)]
532532
pub enum CrateOrString<'a> {
533533
Krate(&'a ast::Item),
534-
Str(&'a str)
534+
Str(Span, &'a str)
535535
}
536536

537537
impl<'a> PluginMetadata<'a> {

trunk/src/librustc/middle/infer/error_reporting.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1076,8 +1076,7 @@ impl<'a, 'tcx> Rebuilder<'a, 'tcx> {
10761076
trait_ref: ast::TraitRef {
10771077
path: new_path,
10781078
ref_id: tr.ref_id,
1079-
},
1080-
span: poly_tr.span,
1079+
}
10811080
}, modifier)
10821081
}
10831082
}

trunk/src/librustc/middle/resolve_lifetime.rs

Lines changed: 12 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -45,31 +45,15 @@ pub enum DefRegion {
4545
/* lifetime decl */ ast::NodeId),
4646
}
4747

48-
// Maps the id of each lifetime reference to the lifetime decl
49-
// that it corresponds to.
48+
// maps the id of each lifetime reference to the lifetime decl
49+
// that it corresponds to
5050
pub type NamedRegionMap = NodeMap<DefRegion>;
5151

5252
struct LifetimeContext<'a> {
5353
sess: &'a Session,
5454
named_region_map: &'a mut NamedRegionMap,
5555
scope: Scope<'a>,
5656
def_map: &'a DefMap,
57-
// Deep breath. Our representation for poly trait refs contains a single
58-
// binder and thus we only allow a single level of quantification. However,
59-
// the syntax of Rust permits quantification in two places, e.g., `T: for <'a> Foo<'a>`
60-
// and `for <'a, 'b> &'b T: Foo<'a>`. In order to get the de Bruijn indices
61-
// correct when representing these constraints, we should only introduce one
62-
// scope. However, we want to support both locations for the quantifier and
63-
// during lifetime resolution we want precise information (so we can't
64-
// desugar in an earlier phase).
65-
66-
// SO, if we encounter a quantifier at the outer scope, we set
67-
// trait_ref_hack to true (and introduce a scope), and then if we encounter
68-
// a quantifier at the inner scope, we error. If trait_ref_hack is false,
69-
// then we introduce the scope at the inner quantifier.
70-
71-
// I'm sorry.
72-
trait_ref_hack: bool,
7357
}
7458

7559
enum ScopeChain<'a> {
@@ -96,7 +80,6 @@ pub fn krate(sess: &Session, krate: &ast::Crate, def_map: &DefMap) -> NamedRegio
9680
named_region_map: &mut named_region_map,
9781
scope: &ROOT_SCOPE,
9882
def_map: def_map,
99-
trait_ref_hack: false,
10083
}, krate);
10184
sess.abort_if_errors();
10285
named_region_map
@@ -215,22 +198,9 @@ impl<'a, 'v> Visitor<'v> for LifetimeContext<'a> {
215198
match predicate {
216199
&ast::WherePredicate::BoundPredicate(ast::WhereBoundPredicate{ ref bounded_ty,
217200
ref bounds,
218-
ref bound_lifetimes,
219201
.. }) => {
220-
if bound_lifetimes.len() > 0 {
221-
self.trait_ref_hack = true;
222-
let result = self.with(LateScope(bound_lifetimes, self.scope),
223-
|old_scope, this| {
224-
this.check_lifetime_defs(old_scope, bound_lifetimes);
225-
this.visit_ty(&**bounded_ty);
226-
visit::walk_ty_param_bounds_helper(this, bounds);
227-
});
228-
self.trait_ref_hack = false;
229-
result
230-
} else {
231-
self.visit_ty(&**bounded_ty);
232-
visit::walk_ty_param_bounds_helper(self, bounds);
233-
}
202+
self.visit_ty(&**bounded_ty);
203+
visit::walk_ty_param_bounds_helper(self, bounds);
234204
}
235205
&ast::WherePredicate::RegionPredicate(ast::WhereRegionPredicate{ref lifetime,
236206
ref bounds,
@@ -252,27 +222,18 @@ impl<'a, 'v> Visitor<'v> for LifetimeContext<'a> {
252222
}
253223
}
254224

255-
fn visit_poly_trait_ref(&mut self,
256-
trait_ref: &ast::PolyTraitRef,
225+
fn visit_poly_trait_ref(&mut self, trait_ref:
226+
&ast::PolyTraitRef,
257227
_modifier: &ast::TraitBoundModifier) {
258228
debug!("visit_poly_trait_ref trait_ref={:?}", trait_ref);
259229

260-
if !self.trait_ref_hack || trait_ref.bound_lifetimes.len() > 0 {
261-
if self.trait_ref_hack {
262-
println!("{:?}", trait_ref.span);
263-
span_err!(self.sess, trait_ref.span, E0316,
264-
"nested quantification of lifetimes");
230+
self.with(LateScope(&trait_ref.bound_lifetimes, self.scope), |old_scope, this| {
231+
this.check_lifetime_defs(old_scope, &trait_ref.bound_lifetimes);
232+
for lifetime in &trait_ref.bound_lifetimes {
233+
this.visit_lifetime_def(lifetime);
265234
}
266-
self.with(LateScope(&trait_ref.bound_lifetimes, self.scope), |old_scope, this| {
267-
this.check_lifetime_defs(old_scope, &trait_ref.bound_lifetimes);
268-
for lifetime in &trait_ref.bound_lifetimes {
269-
this.visit_lifetime_def(lifetime);
270-
}
271-
this.visit_trait_ref(&trait_ref.trait_ref)
272-
})
273-
} else {
274-
self.visit_trait_ref(&trait_ref.trait_ref)
275-
}
235+
this.visit_trait_ref(&trait_ref.trait_ref)
236+
})
276237
}
277238

278239
fn visit_trait_ref(&mut self, trait_ref: &ast::TraitRef) {
@@ -290,7 +251,6 @@ impl<'a> LifetimeContext<'a> {
290251
named_region_map: *named_region_map,
291252
scope: &wrap_scope,
292253
def_map: self.def_map,
293-
trait_ref_hack: self.trait_ref_hack,
294254
};
295255
debug!("entering scope {:?}", this.scope);
296256
f(self.scope, &mut this);

trunk/src/librustc/middle/ty.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1478,7 +1478,7 @@ impl<'tcx> PolyTraitRef<'tcx> {
14781478
/// compiler's representation for things like `for<'a> Fn(&'a int)`
14791479
/// (which would be represented by the type `PolyTraitRef ==
14801480
/// Binder<TraitRef>`). Note that when we skolemize, instantiate,
1481-
/// erase, or otherwise "discharge" these bound regions, we change the
1481+
/// erase, or otherwise "discharge" these bound reons, we change the
14821482
/// type from `Binder<T>` to just `T` (see
14831483
/// e.g. `liberate_late_bound_regions`).
14841484
#[derive(Clone, PartialEq, Eq, Hash, Debug)]

0 commit comments

Comments
 (0)