Skip to content

Commit 793c399

Browse files
committed
---
yaml --- r: 147621 b: refs/heads/try2 c: ea63a18 h: refs/heads/master i: 147619: 69e09d7 v: v3
1 parent b5fafe1 commit 793c399

File tree

3 files changed

+35
-14
lines changed

3 files changed

+35
-14
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: be67aceaeb849233daf6a3ee765be67f5e797e30
8+
refs/heads/try2: ea63a18500dd4ad042c2340b3e6a5aaecdc8e1df
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/decoder.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,7 @@ pub fn get_symbol(data: &[u8], id: ast::NodeId) -> ~str {
494494
}
495495

496496
// Something that a name can resolve to.
497+
#[deriving(Clone)]
497498
pub enum DefLike {
498499
DlDef(ast::Def),
499500
DlImpl(ast::DefId),

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

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -284,15 +284,15 @@ enum DuplicateCheckingMode {
284284

285285
/// One local scope.
286286
struct Rib {
287-
bindings: @mut HashMap<Name, DefLike>,
287+
bindings: RefCell<HashMap<Name, DefLike>>,
288288
self_binding: @mut Option<DefLike>,
289289
kind: RibKind,
290290
}
291291

292292
impl Rib {
293293
fn new(kind: RibKind) -> Rib {
294294
Rib {
295-
bindings: @mut HashMap::new(),
295+
bindings: RefCell::new(HashMap::new()),
296296
self_binding: @mut None,
297297
kind: kind
298298
}
@@ -3494,8 +3494,12 @@ impl Resolver {
34943494
let mut i = ribs.len();
34953495
while i != 0 {
34963496
i -= 1;
3497-
match ribs[i].bindings.find(&name) {
3498-
Some(&def_like) => {
3497+
let binding_opt = {
3498+
let bindings = ribs[i].bindings.borrow();
3499+
bindings.get().find_copy(&name)
3500+
};
3501+
match binding_opt {
3502+
Some(def_like) => {
34993503
return self.upvarify(ribs, i, def_like, span,
35003504
allow_capturing_self);
35013505
}
@@ -3572,8 +3576,10 @@ impl Resolver {
35723576
self.type_ribs.push(self_type_rib);
35733577
// plain insert (no renaming)
35743578
let name = self.type_self_ident.name;
3575-
self_type_rib.bindings.insert(name,
3576-
DlDef(DefSelfTy(item.id)));
3579+
{
3580+
let mut bindings = self_type_rib.bindings.borrow_mut();
3581+
bindings.get().insert(name, DlDef(DefSelfTy(item.id)));
3582+
}
35773583

35783584
// Create a new rib for the trait-wide type parameters.
35793585
self.with_type_parameter_rib(HasTypeParameters(generics,
@@ -3710,7 +3716,9 @@ impl Resolver {
37103716
self.record_def(type_parameter.id,
37113717
(DefTyParamBinder(node_id), AllPublic));
37123718
// plain insert (no renaming)
3713-
function_type_rib.bindings.insert(ident.name, def_like);
3719+
let mut bindings = function_type_rib.bindings
3720+
.borrow_mut();
3721+
bindings.get().insert(ident.name, def_like);
37143722
}
37153723
}
37163724

@@ -4333,8 +4341,12 @@ impl Resolver {
43334341
let this = &mut *self;
43344342
let last_rib = this.value_ribs[
43354343
this.value_ribs.len() - 1];
4336-
last_rib.bindings.insert(renamed,
4337-
DlDef(def));
4344+
{
4345+
let mut bindings =
4346+
last_rib.bindings.borrow_mut();
4347+
bindings.get().insert(renamed,
4348+
DlDef(def));
4349+
}
43384350
bindings_list.insert(renamed, pat_id);
43394351
}
43404352
Some(b) => {
@@ -4354,8 +4366,12 @@ impl Resolver {
43544366
let this = &mut *self;
43554367
let last_rib = this.value_ribs[
43564368
this.value_ribs.len() - 1];
4357-
last_rib.bindings.insert(renamed,
4358-
DlDef(def));
4369+
{
4370+
let mut bindings =
4371+
last_rib.bindings.borrow_mut();
4372+
bindings.get().insert(renamed,
4373+
DlDef(def));
4374+
}
43594375
}
43604376
}
43614377
}
@@ -4911,7 +4927,8 @@ impl Resolver {
49114927
let mut j = this.value_ribs.len();
49124928
while j != 0 {
49134929
j -= 1;
4914-
for (&k, _) in this.value_ribs[j].bindings.iter() {
4930+
let bindings = this.value_ribs[j].bindings.borrow();
4931+
for (&k, _) in bindings.get().iter() {
49154932
maybes.push(interner_get(k));
49164933
values.push(uint::max_value);
49174934
}
@@ -5060,7 +5077,10 @@ impl Resolver {
50605077
let def_like = DlDef(DefLabel(expr.id));
50615078
let rib = this.label_ribs[this.label_ribs.len() - 1];
50625079
// plain insert (no renaming)
5063-
rib.bindings.insert(label.name, def_like);
5080+
{
5081+
let mut bindings = rib.bindings.borrow_mut();
5082+
bindings.get().insert(label.name, def_like);
5083+
}
50645084

50655085
visit::walk_expr(this, expr, ());
50665086
})

0 commit comments

Comments
 (0)