diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2012-06-04 08:03:14 -0700 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2012-06-06 18:37:31 -0700 |
| commit | d9db4f02a4092009a29fa4b2f0be0438856aeb36 (patch) | |
| tree | 0fccd3f39f275762139ffdcdf72cf2a25c50ef2f /src/rustc | |
| parent | 4490c99b113a572d771a3b9171cb83b42813c97c (diff) | |
| download | rust-d9db4f02a4092009a29fa4b2f0be0438856aeb36.tar.gz rust-d9db4f02a4092009a29fa4b2f0be0438856aeb36.zip | |
move to dvec in metadata
Diffstat (limited to 'src/rustc')
| -rw-r--r-- | src/rustc/metadata/creader.rs | 29 | ||||
| -rw-r--r-- | src/rustc/metadata/cstore.rs | 4 |
2 files changed, 19 insertions, 14 deletions
diff --git a/src/rustc/metadata/creader.rs b/src/rustc/metadata/creader.rs index 2aacd87cbe8..3356e8cdd65 100644 --- a/src/rustc/metadata/creader.rs +++ b/src/rustc/metadata/creader.rs @@ -13,6 +13,7 @@ import std::map::{hashmap, int_hash}; import syntax::print::pprust; import filesearch::filesearch; import common::*; +import dvec::{dvec, extensions}; export read_crates; @@ -26,7 +27,7 @@ fn read_crates(diag: span_handler, crate: ast::crate, cstore: cstore, os: os, static: static, - mut crate_cache: [], + crate_cache: dvec(), mut next_crate_num: 1}; let v = visit::mk_simple_visitor(@{visit_view_item: @@ -35,7 +36,7 @@ fn read_crates(diag: span_handler, crate: ast::crate, with *visit::default_simple_visitor()}); visit::visit_crate(crate, (), v); dump_crates(e.crate_cache); - warn_if_multiple_versions(diag, copy e.crate_cache); + warn_if_multiple_versions(diag, e.crate_cache.get()); } type cache_entry = { @@ -45,7 +46,7 @@ type cache_entry = { metas: @[@ast::meta_item] }; -fn dump_crates(crate_cache: [cache_entry]) { +fn dump_crates(crate_cache: dvec<cache_entry>) { #debug("resolved crates:"); for crate_cache.each {|entry| #debug("cnum: %?", entry.cnum); @@ -64,10 +65,10 @@ fn warn_if_multiple_versions(diag: span_handler, crate_cache: [cache_entry]) { import either::*; - if crate_cache.is_not_empty() { + if crate_cache.len() != 0u { let name = loader::crate_name_from_metas(*crate_cache.last().metas); let {lefts: matches, rights: non_matches} = - partition(crate_cache.map {|entry| + partition(crate_cache.map_to_vec {|entry| let othername = loader::crate_name_from_metas(*entry.metas); if name == othername { left(entry) @@ -99,7 +100,7 @@ type env = @{diag: span_handler, cstore: cstore::cstore, os: loader::os, static: bool, - mut crate_cache: [cache_entry], + crate_cache: dvec<cache_entry>, mut next_crate_num: ast::crate_num}; fn visit_view_item(e: env, i: @ast::view_item) { @@ -176,12 +177,14 @@ fn metas_with_ident(ident: ast::ident, fn existing_match(e: env, metas: [@ast::meta_item], hash: str) -> option<int> { - let maybe_entry = e.crate_cache.find {|c| - loader::metadata_matches(*c.metas, metas) && - (hash.is_empty() || c.hash == hash) - }; - maybe_entry.map {|c| c.cnum } + for e.crate_cache.each {|c| + if loader::metadata_matches(*c.metas, metas) + && (hash.is_empty() || c.hash == hash) { + ret some(c.cnum); + } + } + ret none; } 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], // Claim this crate number and cache it let cnum = e.next_crate_num; - e.crate_cache += [{cnum: cnum, span: span, - hash: hash, metas: @linkage_metas}]; + e.crate_cache.push({cnum: cnum, span: span, + hash: hash, metas: @linkage_metas}); e.next_crate_num += 1; // Now resolve the crates referenced by this crate diff --git a/src/rustc/metadata/cstore.rs b/src/rustc/metadata/cstore.rs index 22d19f81c86..0bbbeafdb54 100644 --- a/src/rustc/metadata/cstore.rs +++ b/src/rustc/metadata/cstore.rs @@ -63,7 +63,9 @@ type cstore_private = type use_crate_map = map::hashmap<ast::node_id, ast::crate_num>; // Internal method to retrieve the data from the cstore -fn p(cstore: cstore) -> cstore_private { alt cstore { private(p) { p } } } +pure fn p(cstore: cstore) -> cstore_private { + alt cstore { private(p) { p } } +} fn mk_cstore() -> cstore { let meta_cache = map::int_hash::<crate_metadata>(); |
