Skip to content

Commit d9db4f0

Browse files
committed
move to dvec in metadata
1 parent 4490c99 commit d9db4f0

File tree

2 files changed

+19
-14
lines changed

2 files changed

+19
-14
lines changed

src/rustc/metadata/creader.rs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import std::map::{hashmap, int_hash};
1313
import syntax::print::pprust;
1414
import filesearch::filesearch;
1515
import common::*;
16+
import dvec::{dvec, extensions};
1617

1718
export read_crates;
1819

@@ -26,7 +27,7 @@ fn read_crates(diag: span_handler, crate: ast::crate,
2627
cstore: cstore,
2728
os: os,
2829
static: static,
29-
mut crate_cache: [],
30+
crate_cache: dvec(),
3031
mut next_crate_num: 1};
3132
let v =
3233
visit::mk_simple_visitor(@{visit_view_item:
@@ -35,7 +36,7 @@ fn read_crates(diag: span_handler, crate: ast::crate,
3536
with *visit::default_simple_visitor()});
3637
visit::visit_crate(crate, (), v);
3738
dump_crates(e.crate_cache);
38-
warn_if_multiple_versions(diag, copy e.crate_cache);
39+
warn_if_multiple_versions(diag, e.crate_cache.get());
3940
}
4041

4142
type cache_entry = {
@@ -45,7 +46,7 @@ type cache_entry = {
4546
metas: @[@ast::meta_item]
4647
};
4748

48-
fn dump_crates(crate_cache: [cache_entry]) {
49+
fn dump_crates(crate_cache: dvec<cache_entry>) {
4950
#debug("resolved crates:");
5051
for crate_cache.each {|entry|
5152
#debug("cnum: %?", entry.cnum);
@@ -64,10 +65,10 @@ fn warn_if_multiple_versions(diag: span_handler,
6465
crate_cache: [cache_entry]) {
6566
import either::*;
6667

67-
if crate_cache.is_not_empty() {
68+
if crate_cache.len() != 0u {
6869
let name = loader::crate_name_from_metas(*crate_cache.last().metas);
6970
let {lefts: matches, rights: non_matches} =
70-
partition(crate_cache.map {|entry|
71+
partition(crate_cache.map_to_vec {|entry|
7172
let othername = loader::crate_name_from_metas(*entry.metas);
7273
if name == othername {
7374
left(entry)
@@ -99,7 +100,7 @@ type env = @{diag: span_handler,
99100
cstore: cstore::cstore,
100101
os: loader::os,
101102
static: bool,
102-
mut crate_cache: [cache_entry],
103+
crate_cache: dvec<cache_entry>,
103104
mut next_crate_num: ast::crate_num};
104105

105106
fn visit_view_item(e: env, i: @ast::view_item) {
@@ -176,12 +177,14 @@ fn metas_with_ident(ident: ast::ident,
176177

177178
fn existing_match(e: env, metas: [@ast::meta_item], hash: str) ->
178179
option<int> {
179-
let maybe_entry = e.crate_cache.find {|c|
180-
loader::metadata_matches(*c.metas, metas) &&
181-
(hash.is_empty() || c.hash == hash)
182-
};
183180

184-
maybe_entry.map {|c| c.cnum }
181+
for e.crate_cache.each {|c|
182+
if loader::metadata_matches(*c.metas, metas)
183+
&& (hash.is_empty() || c.hash == hash) {
184+
ret some(c.cnum);
185+
}
186+
}
187+
ret none;
185188
}
186189

187190
fn resolve_crate(e: env, ident: ast::ident, metas: [@ast::meta_item],
@@ -211,8 +214,8 @@ fn resolve_crate(e: env, ident: ast::ident, metas: [@ast::meta_item],
211214

212215
// Claim this crate number and cache it
213216
let cnum = e.next_crate_num;
214-
e.crate_cache += [{cnum: cnum, span: span,
215-
hash: hash, metas: @linkage_metas}];
217+
e.crate_cache.push({cnum: cnum, span: span,
218+
hash: hash, metas: @linkage_metas});
216219
e.next_crate_num += 1;
217220

218221
// Now resolve the crates referenced by this crate

src/rustc/metadata/cstore.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@ type cstore_private =
6363
type use_crate_map = map::hashmap<ast::node_id, ast::crate_num>;
6464

6565
// Internal method to retrieve the data from the cstore
66-
fn p(cstore: cstore) -> cstore_private { alt cstore { private(p) { p } } }
66+
pure fn p(cstore: cstore) -> cstore_private {
67+
alt cstore { private(p) { p } }
68+
}
6769

6870
fn mk_cstore() -> cstore {
6971
let meta_cache = map::int_hash::<crate_metadata>();

0 commit comments

Comments
 (0)