Skip to content

Commit 7777336

Browse files
klutzyalexcrichton
authored andcommitted
---
yaml --- r: 120267 b: refs/heads/dist-snap c: 6d535b5 h: refs/heads/master i: 120265: 179fce1 120263: cbc3ee2 v: v3
1 parent 0153651 commit 7777336

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ refs/heads/try: 1813e5aa1a03b0596b8de7abd1af31edf5d6098f
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: 147ecfdd8221e4a4d4e090486829a06da1e0ca3c
9-
refs/heads/dist-snap: 0004953c3a29a884d1e772e8874096f21e3b6513
9+
refs/heads/dist-snap: 6d535b5b8d71e1cdbdbe54958bcfc4dd956121aa
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
1212
refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0

branches/dist-snap/src/librustc/front/std_inject.rs

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ impl<'a> fold::Folder for StandardLibraryInjector<'a> {
100100
});
101101
}
102102

103+
// `extern crate` must be precede `use` items
103104
vis.push_all_move(krate.module.view_items.clone());
104105
let new_module = ast::Mod {
105106
view_items: vis,
@@ -130,8 +131,20 @@ impl<'a> fold::Folder for PreludeInjector<'a> {
130131
if !no_prelude(krate.attrs.as_slice()) {
131132
// only add `use std::prelude::*;` if there wasn't a
132133
// `#![no_implicit_prelude]` at the crate level.
134+
135+
let mut attrs = krate.attrs.clone();
136+
137+
// fold_mod() will insert glob path.
138+
let globs_attr = attr::mk_attr(attr::mk_list_item(
139+
InternedString::new("feature"),
140+
vec!(
141+
attr::mk_word_item(InternedString::new("globs")),
142+
)));
143+
attrs.push(globs_attr);
144+
133145
ast::Crate {
134146
module: self.fold_mod(&krate.module),
147+
attrs: attrs,
135148
..krate
136149
}
137150
} else {
@@ -175,11 +188,20 @@ impl<'a> fold::Folder for PreludeInjector<'a> {
175188
span: DUMMY_SP,
176189
};
177190

178-
let vis = (vec!(vi2)).append(module.view_items.as_slice());
191+
let (crates, uses) = module.view_items.partitioned(|x| {
192+
match x.node {
193+
ast::ViewItemExternCrate(..) => true,
194+
_ => false,
195+
}
196+
});
197+
198+
// add vi2 after any `extern crate` but before any `use`
199+
let mut view_items = crates;
200+
view_items.push(vi2);
201+
view_items.push_all_move(uses);
179202

180-
// FIXME #2543: Bad copy.
181203
let new_module = ast::Mod {
182-
view_items: vis,
204+
view_items: view_items,
183205
..(*module).clone()
184206
};
185207
fold::noop_fold_mod(&new_module, self)

0 commit comments

Comments
 (0)