aboutsummaryrefslogtreecommitdiff
path: root/src/comp/middle/trans.rs
diff options
context:
space:
mode:
authorPatrick Walton <[email protected]>2011-03-23 15:43:18 -0700
committerPatrick Walton <[email protected]>2011-03-23 15:44:17 -0700
commitc669f2023109b400aa4a7297cb151ebfb71ae44e (patch)
tree3606f0720f12c35f68c9957c13a3b78c6dd6ef5e /src/comp/middle/trans.rs
parentSplit too-long 'tidy' command-line up using xargs, for win32. (diff)
downloadrust-c669f2023109b400aa4a7297cb151ebfb71ae44e.tar.xz
rust-c669f2023109b400aa4a7297cb151ebfb71ae44e.zip
rustc: Write out crate metadata
Diffstat (limited to 'src/comp/middle/trans.rs')
-rw-r--r--src/comp/middle/trans.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index b7fb0687..94539423 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -76,9 +76,11 @@ state type crate_ctxt = rec(session.session sess,
hashmap[ast.def_id, @ast.item] items,
hashmap[ast.def_id,
@ast.native_item] native_items,
+ hashmap[ast.def_id, str] item_symbols,
// TODO: hashmap[tup(tag_id,subtys), @tag_info]
hashmap[@ty.t, uint] tag_sizes,
hashmap[ast.def_id, ValueRef] discrims,
+ hashmap[ast.def_id, str] discrim_symbols,
hashmap[ast.def_id, ValueRef] fn_pairs,
hashmap[ast.def_id, ValueRef] consts,
hashmap[ast.def_id,()] obj_methods,
@@ -5332,6 +5334,7 @@ fn trans_vtbl(@crate_ctxt cx, TypeRef self_ty,
let str s = cx.names.next("_rust_method") + sep() + mcx.path;
let ValueRef llfn = decl_fastcall_fn(cx.llmod, s, llfnty);
cx.item_ids.insert(m.node.id, llfn);
+ cx.item_symbols.insert(m.node.id, s);
trans_fn(mcx, m.node.meth, m.node.id, some[TypeRef](self_ty),
ty_params, m.node.ann);
@@ -5663,6 +5666,7 @@ fn register_fn_pair(@crate_ctxt cx, str ps, TypeRef llpairty, ValueRef llfn,
as llvm.Linkage);
cx.item_ids.insert(id, llfn);
+ cx.item_symbols.insert(id, ps);
cx.fn_pairs.insert(id, gvar);
}
@@ -5884,8 +5888,9 @@ fn trans_constant(&@crate_ctxt cx, @ast.item it) -> @crate_ctxt {
auto discrim_val = C_int(i as int);
// FIXME: better name.
+ auto s = cx.names.next("_rust_tag_discrim");
auto discrim_gvar = llvm.LLVMAddGlobal(cx.llmod, T_int(),
- _str.buf("tag_discrim"));
+ _str.buf(s));
// FIXME: Eventually we do want to export these, but we need
// to figure out what name they get first!
@@ -5895,6 +5900,7 @@ fn trans_constant(&@crate_ctxt cx, @ast.item it) -> @crate_ctxt {
as llvm.Linkage);
cx.discrims.insert(variant.id, discrim_gvar);
+ cx.discrim_symbols.insert(variant.id, s);
i += 1u;
}
@@ -5905,6 +5911,8 @@ fn trans_constant(&@crate_ctxt cx, @ast.item it) -> @crate_ctxt {
// with consts.
auto v = C_int(1);
cx.item_ids.insert(cid, v);
+ auto s = cx.names.next("_rust_const") + sep() + name;
+ cx.item_symbols.insert(cid, s);
}
case (_) {
@@ -6485,8 +6493,10 @@ fn trans_crate(session.session sess, @ast.crate crate, str output,
item_ids = new_def_hash[ValueRef](),
items = new_def_hash[@ast.item](),
native_items = new_def_hash[@ast.native_item](),
+ item_symbols = new_def_hash[str](),
tag_sizes = tag_sizes,
discrims = new_def_hash[ValueRef](),
+ discrim_symbols = new_def_hash[str](),
fn_pairs = new_def_hash[ValueRef](),
consts = new_def_hash[ValueRef](),
obj_methods = new_def_hash[()](),