librustc: De-@mut CStore::used_libraries

This commit is contained in:
Patrick Walton 2013-12-20 19:54:01 -08:00
parent 3528f74335
commit af1184030b
3 changed files with 17 additions and 9 deletions

View file

@ -853,7 +853,9 @@ fn link_rlib(sess: Session,
out_filename: &Path) -> Archive {
let mut a = Archive::create(sess, out_filename, obj_filename);
for &(ref l, kind) in sess.cstore.get_used_libraries().iter() {
let used_libraries = sess.cstore.get_used_libraries();
let used_libraries = used_libraries.borrow();
for &(ref l, kind) in used_libraries.get().iter() {
match kind {
cstore::NativeStatic => {
a.add_native_library(l.as_slice());
@ -1116,7 +1118,9 @@ fn add_local_native_libraries(args: &mut ~[~str], sess: Session) {
args.push("-L" + path.as_str().unwrap().to_owned());
}
for &(ref l, kind) in sess.cstore.get_used_libraries().iter() {
let used_libraries = sess.cstore.get_used_libraries();
let used_libraries = used_libraries.borrow();
for &(ref l, kind) in used_libraries.get().iter() {
match kind {
cstore::NativeUnknown | cstore::NativeStatic => {
args.push("-l" + *l);

View file

@ -64,7 +64,7 @@ pub struct CStore {
priv metas: RefCell<HashMap<ast::CrateNum, @crate_metadata>>,
priv extern_mod_crate_map: RefCell<extern_mod_crate_map>,
priv used_crate_sources: RefCell<~[CrateSource]>,
priv used_libraries: ~[(~str, NativeLibaryKind)],
priv used_libraries: RefCell<~[(~str, NativeLibaryKind)]>,
priv used_link_args: ~[~str],
intr: @ident_interner
}
@ -78,7 +78,7 @@ impl CStore {
metas: RefCell::new(HashMap::new()),
extern_mod_crate_map: RefCell::new(HashMap::new()),
used_crate_sources: RefCell::new(~[]),
used_libraries: ~[],
used_libraries: RefCell::new(~[]),
used_link_args: ~[],
intr: intr
}
@ -137,15 +137,17 @@ impl CStore {
pub fn add_used_library(&mut self, lib: ~str, kind: NativeLibaryKind) -> bool {
assert!(!lib.is_empty());
if self.used_libraries.iter().any(|&(ref x, _)| x == &lib) {
let mut used_libraries = self.used_libraries.borrow_mut();
if used_libraries.get().iter().any(|&(ref x, _)| x == &lib) {
return false;
}
self.used_libraries.push((lib, kind));
used_libraries.get().push((lib, kind));
true
}
pub fn get_used_libraries<'a>(&'a self) -> &'a [(~str, NativeLibaryKind)] {
self.used_libraries.as_slice()
pub fn get_used_libraries<'a>(&'a self)
-> &'a RefCell<~[(~str, NativeLibaryKind)]> {
&self.used_libraries
}
pub fn add_used_link_args(&mut self, args: &str) {

View file

@ -1611,7 +1611,9 @@ fn encode_lang_items(ecx: &EncodeContext, ebml_w: &mut writer::Encoder) {
fn encode_native_libraries(ecx: &EncodeContext, ebml_w: &mut writer::Encoder) {
ebml_w.start_tag(tag_native_libraries);
for &(ref lib, kind) in ecx.cstore.get_used_libraries().iter() {
let used_libraries = ecx.tcx.sess.cstore.get_used_libraries();
let used_libraries = used_libraries.borrow();
for &(ref lib, kind) in used_libraries.get().iter() {
match kind {
cstore::NativeStatic => {} // these libraries are not propagated
cstore::NativeFramework | cstore::NativeUnknown => {