Skip to content

Commit 5390efe

Browse files
committed
---
yaml --- r: 147925 b: refs/heads/try2 c: 449ebee h: refs/heads/master i: 147923: 9389a17 v: v3
1 parent ace141c commit 5390efe

File tree

25 files changed

+472
-322
lines changed

25 files changed

+472
-322
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: 12ad1b0662aed1f2f1b23d6c4a0a2cf43c92200a
8+
refs/heads/try2: 449ebeea08a3e0c50b3487bc6d561f49caf57b7e
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/src/librustc/metadata/encoder.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,8 @@ fn encode_reexported_static_methods(ecx: &EncodeContext,
489489
ebml_w: &mut writer::Encoder,
490490
mod_path: &[ast_map::path_elt],
491491
exp: &middle::resolve::Export2) {
492-
match ecx.tcx.items.find(&exp.def_id.node) {
492+
let items = ecx.tcx.items.borrow();
493+
match items.get().find(&exp.def_id.node) {
493494
Some(&ast_map::node_item(item, path)) => {
494495
let original_name = ecx.tcx.sess.str_of(item.ident);
495496

@@ -1338,7 +1339,8 @@ fn my_visit_item(i: @item,
13381339
ebml_w: &mut writer::Encoder,
13391340
ecx_ptr: *int,
13401341
index: @RefCell<~[entry<i64>]>) {
1341-
match items.get_copy(&i.id) {
1342+
let items = items.borrow();
1343+
match items.get().get_copy(&i.id) {
13421344
ast_map::node_item(_, pt) => {
13431345
let mut ebml_w = unsafe {
13441346
ebml_w.unsafe_clone()
@@ -1356,7 +1358,8 @@ fn my_visit_foreign_item(ni: @foreign_item,
13561358
ebml_w: &mut writer::Encoder,
13571359
ecx_ptr:*int,
13581360
index: @RefCell<~[entry<i64>]>) {
1359-
match items.get_copy(&ni.id) {
1361+
let items = items.borrow();
1362+
match items.get().get_copy(&ni.id) {
13601363
ast_map::node_foreign_item(_, abi, _, pt) => {
13611364
debug!("writing foreign item {}::{}",
13621365
ast_map::path_to_str(

branches/try2/src/librustc/middle/borrowck/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -788,7 +788,8 @@ impl BorrowckCtxt {
788788
out: &mut ~str) {
789789
match *loan_path {
790790
LpVar(id) => {
791-
match self.tcx.items.find(&id) {
791+
let items = self.tcx.items.borrow();
792+
match items.get().find(&id) {
792793
Some(&ast_map::node_local(ref ident)) => {
793794
out.push_str(token::ident_to_str(ident));
794795
}

branches/try2/src/librustc/middle/check_const.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -266,13 +266,15 @@ impl Visitor<()> for CheckItemRecursionVisitor {
266266
let def_map = self.env.def_map.borrow();
267267
match def_map.get().find(&e.id) {
268268
Some(&DefStatic(def_id, _)) if
269-
ast_util::is_local(def_id) =>
270-
match self.env.ast_map.get_copy(&def_id.node) {
269+
ast_util::is_local(def_id) => {
270+
let ast_map = self.env.ast_map.borrow();
271+
match ast_map.get().get_copy(&def_id.node) {
271272
ast_map::node_item(it, _) => {
272273
self.visit_item(it, ());
273274
}
274275
_ => fail!("const not bound to an item")
275-
},
276+
}
277+
}
276278
_ => ()
277279
}
278280
},

branches/try2/src/librustc/middle/const_eval.rs

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -107,15 +107,18 @@ pub fn lookup_variant_by_id(tcx: ty::ctxt,
107107
}
108108

109109
if ast_util::is_local(enum_def) {
110-
match tcx.items.find(&enum_def.node) {
111-
None => None,
112-
Some(&ast_map::node_item(it, _)) => match it.node {
113-
item_enum(ast::enum_def { variants: ref variants }, _) => {
114-
variant_expr(*variants, variant_def.node)
115-
}
116-
_ => None
117-
},
118-
Some(_) => None
110+
{
111+
let items = tcx.items.borrow();
112+
match items.get().find(&enum_def.node) {
113+
None => None,
114+
Some(&ast_map::node_item(it, _)) => match it.node {
115+
item_enum(ast::enum_def { variants: ref variants }, _) => {
116+
variant_expr(*variants, variant_def.node)
117+
}
118+
_ => None
119+
},
120+
Some(_) => None
121+
}
119122
}
120123
} else {
121124
{
@@ -155,17 +158,21 @@ pub fn lookup_variant_by_id(tcx: ty::ctxt,
155158
}
156159
}
157160

158-
pub fn lookup_const_by_id(tcx: ty::ctxt,
159-
def_id: ast::DefId)
160-
-> Option<@Expr> {
161+
pub fn lookup_const_by_id(tcx: ty::ctxt, def_id: ast::DefId)
162+
-> Option<@Expr> {
161163
if ast_util::is_local(def_id) {
162-
match tcx.items.find(&def_id.node) {
163-
None => None,
164-
Some(&ast_map::node_item(it, _)) => match it.node {
165-
item_static(_, ast::MutImmutable, const_expr) => Some(const_expr),
166-
_ => None
167-
},
168-
Some(_) => None
164+
{
165+
let items = tcx.items.borrow();
166+
match items.get().find(&def_id.node) {
167+
None => None,
168+
Some(&ast_map::node_item(it, _)) => match it.node {
169+
item_static(_, ast::MutImmutable, const_expr) => {
170+
Some(const_expr)
171+
}
172+
_ => None
173+
},
174+
Some(_) => None
175+
}
169176
}
170177
} else {
171178
{

branches/try2/src/librustc/middle/dead.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ fn should_explore(tcx: ty::ctxt, def_id: ast::DefId) -> bool {
3434
if !is_local(def_id) {
3535
return false;
3636
}
37-
match tcx.items.find(&def_id.node) {
37+
38+
let items = tcx.items.borrow();
39+
match items.get().find(&def_id.node) {
3840
Some(&ast_map::node_item(..))
3941
| Some(&ast_map::node_method(..))
4042
| Some(&ast_map::node_foreign_item(..))
@@ -130,7 +132,9 @@ impl MarkSymbolVisitor {
130132
continue
131133
}
132134
scanned.insert(id);
133-
match self.tcx.items.find(&id) {
135+
136+
let items = self.tcx.items.borrow();
137+
match items.get().find(&id) {
134138
Some(node) => {
135139
self.live_symbols.insert(id);
136140
self.visit_node(node);

branches/try2/src/librustc/middle/entry.rs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,23 +74,26 @@ fn find_item(item: @item, ctxt: &mut EntryContext) {
7474
match item.node {
7575
item_fn(..) => {
7676
if item.ident.name == special_idents::main.name {
77-
match ctxt.ast_map.find(&item.id) {
78-
Some(&ast_map::node_item(_, path)) => {
79-
if path.len() == 0 {
80-
// This is a top-level function so can be 'main'
81-
if ctxt.main_fn.is_none() {
82-
ctxt.main_fn = Some((item.id, item.span));
77+
{
78+
let ast_map = ctxt.ast_map.borrow();
79+
match ast_map.get().find(&item.id) {
80+
Some(&ast_map::node_item(_, path)) => {
81+
if path.len() == 0 {
82+
// This is a top-level function so can be 'main'
83+
if ctxt.main_fn.is_none() {
84+
ctxt.main_fn = Some((item.id, item.span));
85+
} else {
86+
ctxt.session.span_err(
87+
item.span,
88+
"multiple 'main' functions");
89+
}
8390
} else {
84-
ctxt.session.span_err(
85-
item.span,
86-
"multiple 'main' functions");
91+
// This isn't main
92+
ctxt.non_main_fns.push((item.id, item.span));
8793
}
88-
} else {
89-
// This isn't main
90-
ctxt.non_main_fns.push((item.id, item.span));
9194
}
95+
_ => unreachable!()
9296
}
93-
_ => unreachable!()
9497
}
9598
}
9699

branches/try2/src/librustc/middle/lint.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1238,7 +1238,8 @@ fn check_stability(cx: &Context, e: &ast::Expr) {
12381238

12391239
let stability = if ast_util::is_local(id) {
12401240
// this crate
1241-
match cx.tcx.items.find(&id.node) {
1241+
let items = cx.tcx.items.borrow();
1242+
match items.get().find(&id.node) {
12421243
Some(ast_node) => {
12431244
let s = ast_node.with_attrs(|attrs| {
12441245
attrs.map(|a| {

branches/try2/src/librustc/middle/privacy.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,8 @@ impl<'a> PrivacyVisitor<'a> {
413413
let mut closest_private_id = did.node;
414414
loop {
415415
debug!("privacy - examining {}", self.nodestr(closest_private_id));
416-
let vis = match self.tcx.items.find(&closest_private_id) {
416+
let items = self.tcx.items.borrow();
417+
let vis = match items.get().find(&closest_private_id) {
417418
// If this item is a method, then we know for sure that it's an
418419
// actual method and not a static method. The reason for this is
419420
// that these cases are only hit in the ExprMethodCall
@@ -519,7 +520,8 @@ impl<'a> PrivacyVisitor<'a> {
519520
self.tcx.sess.span_err(span, format!("{} is inaccessible",
520521
msg));
521522
}
522-
match self.tcx.items.find(&id) {
523+
let items = self.tcx.items.borrow();
524+
match items.get().find(&id) {
523525
Some(&ast_map::node_item(item, _)) => {
524526
let desc = match item.node {
525527
ast::item_mod(..) => "module",

branches/try2/src/librustc/middle/reachable.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,15 @@ fn method_might_be_inlined(tcx: ty::ctxt, method: &ast::method,
6565
return true
6666
}
6767
if is_local(impl_src) {
68-
match tcx.items.find(&impl_src.node) {
69-
Some(&ast_map::node_item(item, _)) => item_might_be_inlined(item),
70-
Some(..) | None => {
71-
tcx.sess.span_bug(method.span, "impl did is not an item")
68+
{
69+
let items = tcx.items.borrow();
70+
match items.get().find(&impl_src.node) {
71+
Some(&ast_map::node_item(item, _)) => {
72+
item_might_be_inlined(item)
73+
}
74+
Some(..) | None => {
75+
tcx.sess.span_bug(method.span, "impl did is not an item")
76+
}
7277
}
7378
}
7479
} else {
@@ -208,7 +213,8 @@ impl ReachableContext {
208213
}
209214

210215
let node_id = def_id.node;
211-
match tcx.items.find(&node_id) {
216+
let items = tcx.items.borrow();
217+
match items.get().find(&node_id) {
212218
Some(&ast_map::node_item(item, _)) => {
213219
match item.node {
214220
ast::item_fn(..) => item_might_be_inlined(item),
@@ -229,7 +235,7 @@ impl ReachableContext {
229235
// Check the impl. If the generics on the self type of the
230236
// impl require inlining, this method does too.
231237
assert!(impl_did.crate == ast::LOCAL_CRATE);
232-
match tcx.items.find(&impl_did.node) {
238+
match items.get().find(&impl_did.node) {
233239
Some(&ast_map::node_item(item, _)) => {
234240
match item.node {
235241
ast::item_impl(ref generics, _, _, _) => {
@@ -288,7 +294,8 @@ impl ReachableContext {
288294
};
289295

290296
scanned.insert(search_item);
291-
match self.tcx.items.find(&search_item) {
297+
let items = self.tcx.items.borrow();
298+
match items.get().find(&search_item) {
292299
Some(item) => self.propagate_node(item, search_item,
293300
&mut visitor),
294301
None if search_item == ast::CRATE_NODE_ID => {}

branches/try2/src/librustc/middle/trans/base.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2210,10 +2210,13 @@ impl Visitor<()> for TransItemVisitor {
22102210

22112211
pub fn trans_item(ccx: @CrateContext, item: &ast::item) {
22122212
let _icx = push_ctxt("trans_item");
2213-
let path = match ccx.tcx.items.get_copy(&item.id) {
2214-
ast_map::node_item(_, p) => p,
2215-
// tjc: ?
2216-
_ => fail!("trans_item"),
2213+
let path = {
2214+
let items = ccx.tcx.items.borrow();
2215+
match items.get().get_copy(&item.id) {
2216+
ast_map::node_item(_, p) => p,
2217+
// tjc: ?
2218+
_ => fail!("trans_item"),
2219+
}
22172220
};
22182221
match item.node {
22192222
ast::item_fn(decl, purity, _abis, ref generics, body) => {
@@ -2508,7 +2511,10 @@ pub fn get_item_val(ccx: @CrateContext, id: ast::NodeId) -> ValueRef {
25082511
Some(v) => v,
25092512
None => {
25102513
let mut foreign = false;
2511-
let item = ccx.tcx.items.get_copy(&id);
2514+
let item = {
2515+
let items = ccx.tcx.items.borrow();
2516+
items.get().get_copy(&id)
2517+
};
25122518
let val = match item {
25132519
ast_map::node_item(i, pth) => {
25142520

branches/try2/src/librustc/middle/trans/callee.rs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -360,17 +360,20 @@ pub fn trans_fn_ref_with_vtables(
360360
if type_params.len() > 0 || is_default {
361361
must_monomorphise = true;
362362
} else if def_id.crate == ast::LOCAL_CRATE {
363-
let map_node = session::expect(
364-
ccx.sess,
365-
ccx.tcx.items.find(&def_id.node),
366-
|| format!("local item should be in ast map"));
367-
368-
match *map_node {
369-
ast_map::node_foreign_item(_, abis, _, _) => {
370-
must_monomorphise = abis.is_intrinsic()
371-
}
372-
_ => {
373-
must_monomorphise = false;
363+
{
364+
let items = ccx.tcx.items.borrow();
365+
let map_node = session::expect(
366+
ccx.sess,
367+
items.get().find(&def_id.node),
368+
|| format!("local item should be in ast map"));
369+
370+
match *map_node {
371+
ast_map::node_foreign_item(_, abis, _, _) => {
372+
must_monomorphise = abis.is_intrinsic()
373+
}
374+
_ => {
375+
must_monomorphise = false;
376+
}
374377
}
375378
}
376379
} else {

branches/try2/src/librustc/middle/trans/consts.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,13 @@ pub fn get_const_val(cx: @CrateContext,
165165
if !ast_util::is_local(def_id) {
166166
def_id = inline::maybe_instantiate_inline(cx, def_id);
167167
}
168-
match cx.tcx.items.get_copy(&def_id.node) {
168+
169+
let opt_item = {
170+
let items = cx.tcx.items.borrow();
171+
items.get().get_copy(&def_id.node)
172+
};
173+
174+
match opt_item {
169175
ast_map::node_item(@ast::item {
170176
node: ast::item_static(_, ast::MutImmutable, _), ..
171177
}, _) => {

0 commit comments

Comments
 (0)