From 7ae711fc0305c8c0972f15e962f5e767e9b6edbe Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 7 Jul 2011 22:18:38 -0700 Subject: [PATCH] Begin splitting metadata::decoder into decoding and crate search modules --- src/comp/metadata/csearch.rs | 43 ++++++++++++++++++++++++++++++++++++ src/comp/middle/resolve.rs | 4 ++-- src/comp/middle/trans.rs | 10 ++++----- src/comp/middle/ty.rs | 7 +++--- src/comp/middle/typeck.rs | 4 ++-- src/comp/rustc.rc | 3 ++- 6 files changed, 57 insertions(+), 14 deletions(-) create mode 100644 src/comp/metadata/csearch.rs diff --git a/src/comp/metadata/csearch.rs b/src/comp/metadata/csearch.rs new file mode 100644 index 000000000000..f4f1070069a0 --- /dev/null +++ b/src/comp/metadata/csearch.rs @@ -0,0 +1,43 @@ +import driver::session; +import syntax::ast; +import middle::ty; +import std::io; + +fn get_symbol(session::session sess, ast::def_id def) -> str { + decoder::get_symbol(sess, def) +} + +fn get_tag_variants(ty::ctxt ctx, ast::def_id def) -> ty::variant_info[] { + decoder::get_tag_variants(ctx, def) +} + +fn get_type(ty::ctxt tcx, ast::def_id def) -> ty::ty_param_count_and_ty { + decoder::get_type(tcx, def) +} + +fn get_type_param_count(ty::ctxt tcx, &ast::def_id def) -> uint { + decoder::get_type_param_count(tcx, def) +} + +fn lookup_defs(session::session sess, ast::crate_num cnum, + vec[ast::ident] path) -> vec[ast::def] { + decoder::lookup_defs(sess, cnum, path) +} + +fn get_crate_attributes(&vec[u8] data) -> ast::attribute[] { + decoder::get_crate_attributes(data) +} + +fn list_crate_metadata(vec[u8] data, io::writer out) { + decoder::list_crate_metadata(data, out) +} + + +// Local Variables: +// mode: rust +// fill-column: 78; +// indent-tabs-mode: nil +// c-basic-offset: 4 +// buffer-file-coding-system: utf-8-unix +// compile-command: "make -k -C $RBUILD 2>&1 | sed -e 's/\\/x\\//x:\\//g'"; +// End: diff --git a/src/comp/middle/resolve.rs b/src/comp/middle/resolve.rs index 668ef7596bd6..caed0e6bff95 100644 --- a/src/comp/middle/resolve.rs +++ b/src/comp/middle/resolve.rs @@ -7,7 +7,7 @@ import ast::def_id; import ast::node_id; import ast::local_def; -import metadata::decoder; +import metadata::csearch; import metadata::cstore; import driver::session::session; import util::common::new_def_hash; @@ -1143,7 +1143,7 @@ fn ns_for_def(def d) -> namespace { fn lookup_external(&env e, int cnum, vec[ident] ids, namespace ns) -> option::t[def] { - for (def d in decoder::lookup_defs(e.sess, cnum, ids)) { + for (def d in csearch::lookup_defs(e.sess, cnum, ids)) { e.ext_map.insert(ast::def_id_of_def(d), ids); if (ns == ns_for_def(d)) { ret some(d); } } diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 7e92991d38d2..985381ecea1f 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -65,7 +65,7 @@ import link::mangle_internal_name_by_path_and_seq; import link::mangle_exported_name; import metadata::tyencode; import metadata::creader; -import metadata::decoder; +import metadata::csearch; import metadata::cstore; import util::ppaux::ty_to_str; import util::ppaux::ty_to_short_str; @@ -2220,12 +2220,12 @@ fn trans_res_drop(@block_ctxt cx, ValueRef rs, &ast::def_id did, case (_) { ccx.tcx.sess.bug("internal error in trans_res_drop") } } } else { - auto params = decoder::get_type_param_count(ccx.tcx, did); + auto params = csearch::get_type_param_count(ccx.tcx, did); auto f_t = type_of_fn(ccx, cx.sp, ast::proto_fn, ~[rec(mode=ty::mo_alias(false), ty=inner_t)], ty::mk_nil(ccx.tcx), params); get_extern_const(ccx.externs, ccx.llmod, - decoder::get_symbol(ccx.sess, did), + csearch::get_symbol(ccx.sess, did), T_fn_pair(ccx.tn, f_t)) }; auto dtor_addr = cx.build.Load @@ -4942,7 +4942,7 @@ fn lval_val(&@block_ctxt cx, ValueRef val) -> lval_result { fn trans_external_path(&@block_ctxt cx, &ast::def_id did, &ty::ty_param_count_and_ty tpt) -> lval_result { auto lcx = cx.fcx.lcx; - auto name = decoder::get_symbol(lcx.ccx.sess, did); + auto name = csearch::get_symbol(lcx.ccx.sess, did); auto v = get_extern_const(lcx.ccx.externs, lcx.ccx.llmod, name, type_of_ty_param_count_and_ty(lcx, cx.sp, tpt)); @@ -4988,7 +4988,7 @@ fn lookup_discriminant(&@local_ctxt lcx, &ast::def_id tid, &ast::def_id vid) // It's an external discriminant that we haven't seen yet. assert (vid._0 != ast::local_crate); - auto sym = decoder::get_symbol(lcx.ccx.sess, vid); + auto sym = csearch::get_symbol(lcx.ccx.sess, vid); auto gvar = llvm::LLVMAddGlobal(lcx.ccx.llmod, T_int(), str::buf(sym)); llvm::LLVMSetLinkage(gvar, diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs index 1cd8a8756e9a..7d3ac38f1ab4 100644 --- a/src/comp/middle/ty.rs +++ b/src/comp/middle/ty.rs @@ -21,8 +21,7 @@ import ast::controlflow; import ast::path_to_str; import ast::spanned; import syntax::codemap::span; -import metadata::creader; -import metadata::decoder; +import metadata::csearch; import util::common::*; import syntax::util::interner; import util::ppaux::ty_to_str; @@ -2814,7 +2813,7 @@ fn def_has_ty_params(&ast::def def) -> bool { type variant_info = rec(ty::t[] args, ty::t ctor_ty, ast::def_id id); fn tag_variants(&ctxt cx, &ast::def_id id) -> variant_info[] { - if (ast::local_crate != id._0) { ret decoder::get_tag_variants(cx, id); } + if (ast::local_crate != id._0) { ret csearch::get_tag_variants(cx, id); } auto item = alt (cx.items.find(id._1)) { case (some(?i)) { i } case (none) { @@ -2875,7 +2874,7 @@ fn lookup_item_type(ctxt cx, ast::def_id did) -> ty_param_count_and_ty { alt (cx.tcache.find(did)) { case (some(?tpt)) { ret tpt; } case (none) { - auto tyt = decoder::get_type(cx, did); + auto tyt = csearch::get_type(cx, did); cx.tcache.insert(did, tyt); ret tyt; } diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs index f1dc08001cf8..3f4afe0f3858 100644 --- a/src/comp/middle/typeck.rs +++ b/src/comp/middle/typeck.rs @@ -5,7 +5,7 @@ import ast::local_def; import ast::path_to_str; import ast::respan; import syntax::walk; -import metadata::decoder; +import metadata::csearch; import driver::session; import util::common; import syntax::codemap::span; @@ -522,7 +522,7 @@ mod collect { fn getter(@ctxt cx, &ast::def_id id) -> ty::ty_param_count_and_ty { if (id._0 != ast::local_crate) { // This is a type we need to load in from the crate reader. - ret decoder::get_type(cx.tcx, id); + ret csearch::get_type(cx.tcx, id); } auto it = cx.tcx.items.find(id._1); auto tpt; diff --git a/src/comp/rustc.rc b/src/comp/rustc.rc index 62e9a9598574..174e9298c05b 100644 --- a/src/comp/rustc.rc +++ b/src/comp/rustc.rc @@ -79,9 +79,9 @@ mod back { mod metadata { export tyencode; export encoder; - export decoder; export creader; export cstore; + export csearch; mod common; mod tyencode; @@ -90,6 +90,7 @@ mod metadata { mod decoder; mod creader; mod cstore; + mod csearch; } mod driver {