about summary refs log tree commit diff
path: root/src/rustc/middle/trans
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-05-13 17:01:52 -0700
committerBrian Anderson <banderson@mozilla.com>2012-05-13 17:08:35 -0700
commita2572fe77efe58a7c202824deeb0b78fca89cf7e (patch)
tree1b591568facb5d29d5655d29010df5582d2eac32 /src/rustc/middle/trans
parentecf290d448e1b46e073bd8727c04156a06948bf5 (diff)
downloadrust-a2572fe77efe58a7c202824deeb0b78fca89cf7e.tar.gz
rust-a2572fe77efe58a7c202824deeb0b78fca89cf7e.zip
rustc: Eliminate metadata's dependency on trans
Diffstat (limited to 'src/rustc/middle/trans')
-rw-r--r--src/rustc/middle/trans/base.rs24
-rw-r--r--src/rustc/middle/trans/common.rs15
2 files changed, 23 insertions, 16 deletions
diff --git a/src/rustc/middle/trans/base.rs b/src/rustc/middle/trans/base.rs
index 1df25c9e93e..6bad2249cac 100644
--- a/src/rustc/middle/trans/base.rs
+++ b/src/rustc/middle/trans/base.rs
@@ -38,7 +38,7 @@ import link::{mangle_internal_name_by_type_only,
               mangle_internal_name_by_path,
               mangle_internal_name_by_path_and_seq,
               mangle_exported_name};
-import metadata::{csearch, cstore};
+import metadata::{csearch, cstore, encoder};
 import util::ppaux::{ty_to_str, ty_to_short_str};
 
 import common::*;
@@ -4932,9 +4932,26 @@ fn fill_crate_map(ccx: @crate_ctxt, map: ValueRef) {
          C_array(ccx.int_type, subcrates)]));
 }
 
+fn crate_ctxt_to_encode_parms(cx: @crate_ctxt)
+    -> encoder::encode_parms {
+
+    {
+        tcx: cx.tcx,
+        reachable: cx.reachable,
+        exp_map: cx.exp_map,
+        item_symbols: cx.item_symbols,
+        discrim_symbols: cx.discrim_symbols,
+        link_meta: cx.link_meta,
+        cstore: cx.sess.cstore,
+        maps: cx.maps,
+    }
+
+}
+
 fn write_metadata(cx: @crate_ctxt, crate: @ast::crate) {
     if !cx.sess.building_library { ret; }
-    let llmeta = C_bytes(metadata::encoder::encode_metadata(cx, crate));
+    let encode_parms = crate_ctxt_to_encode_parms(cx);
+    let llmeta = C_bytes(encoder::encode_metadata(encode_parms, crate));
     let llconst = C_struct([llmeta]);
     let mut llglobal = str::as_c_str("rust_metadata", {|buf|
         llvm::LLVMAddGlobal(cx.llmod, val_ty(llconst), buf)
@@ -4961,7 +4978,8 @@ fn write_abi_version(ccx: @crate_ctxt) {
 }
 
 fn trans_crate(sess: session::session, crate: @ast::crate, tcx: ty::ctxt,
-               output: str, emap: resolve::exp_map, maps: maps)
+               output: str, emap: resolve::exp_map,
+               maps: metadata::maps)
     -> (ModuleRef, link::link_meta) {
     let sha = std::sha1::sha1();
     let link_meta = link::build_link_meta(sess, *crate, output, sha);
diff --git a/src/rustc/middle/trans/common.rs b/src/rustc/middle/trans/common.rs
index c2e9d8ed5fb..72e982ba445 100644
--- a/src/rustc/middle/trans/common.rs
+++ b/src/rustc/middle/trans/common.rs
@@ -17,7 +17,7 @@ import lib::llvm::{llvm, target_data, type_names, associate_type,
                    name_has_type};
 import lib::llvm::{ModuleRef, ValueRef, TypeRef, BasicBlockRef, BuilderRef};
 import lib::llvm::{True, False, Bool};
-import metadata::csearch;
+import metadata::{csearch, encoder};
 import ast_map::path;
 
 type namegen = fn@(str) -> str;
@@ -62,17 +62,6 @@ type stats =
 
 resource BuilderRef_res(B: BuilderRef) { llvm::LLVMDisposeBuilder(B); }
 
-// Misc. auxiliary maps used in the crate_ctxt
-type maps = {
-    mutbl_map: middle::borrowck::mutbl_map,
-    copy_map: middle::alias::copy_map,
-    last_uses: middle::last_use::last_uses,
-    impl_map: middle::resolve::impl_map,
-    method_map: middle::typeck::method_map,
-    vtable_map: middle::typeck::vtable_map,
-    spill_map: last_use::spill_map
-};
-
 // Crate context.  Every crate we compile has one of these.
 type crate_ctxt = {
      sess: session::session,
@@ -110,7 +99,7 @@ type crate_ctxt = {
      type_short_names: hashmap<ty::t, str>,
      all_llvm_symbols: set<str>,
      tcx: ty::ctxt,
-     maps: maps,
+     maps: metadata::maps,
      stats: stats,
      upcalls: @upcall::upcalls,
      tydesc_type: TypeRef,