Skip to content

Commit c48335e

Browse files
committed
librustc: De-@mut Module::imports in the resolver
1 parent 4784611 commit c48335e

File tree

1 file changed

+22
-14
lines changed

1 file changed

+22
-14
lines changed

src/librustc/middle/resolve.rs

+22-14
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ struct Module {
420420
is_public: bool,
421421

422422
children: RefCell<HashMap<Name, @NameBindings>>,
423-
imports: @mut ~[@ImportDirective],
423+
imports: RefCell<~[@ImportDirective]>,
424424

425425
// The external module children of this node that were declared with
426426
// `extern mod`.
@@ -470,7 +470,7 @@ impl Module {
470470
kind: Cell::new(kind),
471471
is_public: is_public,
472472
children: RefCell::new(HashMap::new()),
473-
imports: @mut ~[],
473+
imports: RefCell::new(~[]),
474474
external_module_children: RefCell::new(HashMap::new()),
475475
anonymous_children: RefCell::new(HashMap::new()),
476476
import_resolutions: RefCell::new(HashMap::new()),
@@ -481,8 +481,8 @@ impl Module {
481481
}
482482

483483
fn all_imports_resolved(&self) -> bool {
484-
let imports = &mut *self.imports;
485-
return imports.len() == self.resolved_import_count.get();
484+
let mut imports = self.imports.borrow_mut();
485+
return imports.get().len() == self.resolved_import_count.get();
486486
}
487487
}
488488

@@ -1951,7 +1951,11 @@ impl Resolver {
19511951
let directive = @ImportDirective::new(module_path,
19521952
subclass, span, id,
19531953
is_public);
1954-
module_.imports.push(directive);
1954+
1955+
{
1956+
let mut imports = module_.imports.borrow_mut();
1957+
imports.get().push(directive);
1958+
}
19551959

19561960
// Bump the reference count on the name. Or, if this is a glob, set
19571961
// the appropriate flag.
@@ -2069,11 +2073,11 @@ impl Resolver {
20692073
return;
20702074
}
20712075

2072-
let imports = &mut *module.imports;
2073-
let import_count = imports.len();
2076+
let mut imports = module.imports.borrow_mut();
2077+
let import_count = imports.get().len();
20742078
while module.resolved_import_count.get() < import_count {
20752079
let import_index = module.resolved_import_count.get();
2076-
let import_directive = imports[import_index];
2080+
let import_directive = imports.get()[import_index];
20772081
match self.resolve_import_for_module(module, import_directive) {
20782082
Failed => {
20792083
// We presumably emitted an error. Continue.
@@ -2149,7 +2153,7 @@ impl Resolver {
21492153
fn resolve_import_for_module(&mut self,
21502154
module_: @Module,
21512155
import_directive: @ImportDirective)
2152-
-> ResolveResult<()> {
2156+
-> ResolveResult<()> {
21532157
let mut resolution_result = Failed;
21542158
let module_path = &import_directive.module_path;
21552159
@@ -3230,16 +3234,20 @@ impl Resolver {
32303234

32313235
fn report_unresolved_imports(&mut self, module_: @Module) {
32323236
let index = module_.resolved_import_count.get();
3233-
let imports: &mut ~[@ImportDirective] = &mut *module_.imports;
3234-
let import_count = imports.len();
3237+
let mut imports = module_.imports.borrow_mut();
3238+
let import_count = imports.get().len();
32353239
if index != import_count {
3236-
let sn = self.session.codemap.span_to_snippet(imports[index].span).unwrap();
3240+
let sn = self.session
3241+
.codemap
3242+
.span_to_snippet(imports.get()[index].span)
3243+
.unwrap();
32373244
if sn.contains("::") {
3238-
self.resolve_error(imports[index].span, "unresolved import");
3245+
self.resolve_error(imports.get()[index].span,
3246+
"unresolved import");
32393247
} else {
32403248
let err = format!("unresolved import (maybe you meant `{}::*`?)",
32413249
sn.slice(0, sn.len()));
3242-
self.resolve_error(imports[index].span, err);
3250+
self.resolve_error(imports.get()[index].span, err);
32433251
}
32443252
}
32453253

0 commit comments

Comments
 (0)