Skip to content

Commit 01e098a

Browse files
AatchJames Miller
authored andcommitted
Make CrateContext::new() fn.
Move construction of a CrateContext into a static method on CrateContext.
1 parent b1f39ce commit 01e098a

File tree

3 files changed

+192
-186
lines changed

3 files changed

+192
-186
lines changed

src/librustc/middle/trans/base.rs

Lines changed: 47 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,11 @@
2626
use core::prelude::*;
2727

2828
use back::link::{mangle_exported_name};
29-
use back::{link, abi, upcall};
29+
use back::{link, abi};
3030
use driver::session;
3131
use driver::session::Session;
3232
use lib::llvm::{ContextRef, ModuleRef, ValueRef, TypeRef, BasicBlockRef};
33-
use lib::llvm::{True, False};
34-
use lib::llvm::{llvm, mk_target_data, mk_type_names};
33+
use lib::llvm::{llvm, True, False};
3534
use lib;
3635
use metadata::common::LinkMeta;
3736
use metadata::{csearch, cstore, encoder};
@@ -65,7 +64,7 @@ use util::common::indenter;
6564
use util::ppaux::{Repr, ty_to_str};
6665

6766
use core::hash;
68-
use core::hashmap::{HashMap, HashSet};
67+
use core::hashmap::{HashMap};
6968
use core::int;
7069
use core::io;
7170
use core::libc::c_uint;
@@ -86,6 +85,8 @@ use syntax::visit;
8685
use syntax::{ast, ast_util, codemap, ast_map};
8786
use syntax::abi::{X86, X86_64, Arm, Mips};
8887

88+
pub use middle::trans::context::task_llcx;
89+
8990
pub struct icx_popper {
9091
ccx: @CrateContext,
9192
}
@@ -3037,152 +3038,52 @@ pub fn trans_crate(sess: session::Session,
30373038
// such as a function name in the module.
30383039
// 1. http://llvm.org/bugs/show_bug.cgi?id=11479
30393040
let llmod_id = link_meta.name.to_owned() + ".rc";
3041+
let ccx = @CrateContext::new(sess, llmod_id, tcx, emap2, maps,
3042+
symbol_hasher, link_meta, reachable);
3043+
// FIXME(#6511): get LLVM building with --enable-threads so this
3044+
// function can be called
3045+
// if !llvm::LLVMRustStartMultithreading() {
3046+
// sess.bug("couldn't enable multi-threaded LLVM");
3047+
// }
30403048
3041-
unsafe {
3042-
// FIXME(#6511): get LLVM building with --enable-threads so this
3043-
// function can be called
3044-
// if !llvm::LLVMRustStartMultithreading() {
3045-
// sess.bug("couldn't enable multi-threaded LLVM");
3046-
// }
3047-
let llcx = llvm::LLVMContextCreate();
3048-
set_task_llcx(llcx);
3049-
let llmod = str::as_c_str(llmod_id, |buf| {
3050-
llvm::LLVMModuleCreateWithNameInContext(buf, llcx)
3051-
});
3052-
let data_layout: &str = sess.targ_cfg.target_strs.data_layout;
3053-
let targ_triple: &str = sess.targ_cfg.target_strs.target_triple;
3054-
let _: () =
3055-
str::as_c_str(data_layout,
3056-
|buf| llvm::LLVMSetDataLayout(llmod, buf));
3057-
let _: () =
3058-
str::as_c_str(targ_triple,
3059-
|buf| llvm::LLVMSetTarget(llmod, buf));
3060-
let targ_cfg = sess.targ_cfg;
3061-
let td = mk_target_data(sess.targ_cfg.target_strs.data_layout);
3062-
let tn = mk_type_names();
3063-
let mut intrinsics = declare_intrinsics(llmod);
3064-
if sess.opts.extra_debuginfo {
3065-
declare_dbg_intrinsics(llmod, &mut intrinsics);
3066-
}
3067-
let int_type = T_int(targ_cfg);
3068-
let float_type = T_float(targ_cfg);
3069-
let tydesc_type = T_tydesc(targ_cfg);
3070-
lib::llvm::associate_type(tn, @"tydesc", tydesc_type);
3071-
let crate_map = decl_crate_map(sess, link_meta, llmod);
3072-
let dbg_cx = if sess.opts.debuginfo {
3073-
Some(debuginfo::mk_ctxt(copy llmod_id))
3074-
} else {
3075-
None
3076-
};
3077-
3078-
let ccx = @CrateContext {
3079-
sess: sess,
3080-
llmod: llmod,
3081-
llcx: llcx,
3082-
td: td,
3083-
tn: tn,
3084-
externs: @mut HashMap::new(),
3085-
intrinsics: intrinsics,
3086-
item_vals: @mut HashMap::new(),
3087-
exp_map2: emap2,
3088-
reachable: reachable,
3089-
item_symbols: @mut HashMap::new(),
3090-
link_meta: link_meta,
3091-
enum_sizes: @mut HashMap::new(),
3092-
discrims: @mut HashMap::new(),
3093-
discrim_symbols: @mut HashMap::new(),
3094-
tydescs: @mut HashMap::new(),
3095-
finished_tydescs: @mut false,
3096-
external: @mut HashMap::new(),
3097-
monomorphized: @mut HashMap::new(),
3098-
monomorphizing: @mut HashMap::new(),
3099-
type_use_cache: @mut HashMap::new(),
3100-
vtables: @mut HashMap::new(),
3101-
const_cstr_cache: @mut HashMap::new(),
3102-
const_globals: @mut HashMap::new(),
3103-
const_values: @mut HashMap::new(),
3104-
extern_const_values: @mut HashMap::new(),
3105-
impl_method_cache: @mut HashMap::new(),
3106-
module_data: @mut HashMap::new(),
3107-
lltypes: @mut HashMap::new(),
3108-
llsizingtypes: @mut HashMap::new(),
3109-
adt_reprs: @mut HashMap::new(),
3110-
names: new_namegen(),
3111-
next_addrspace: new_addrspace_gen(),
3112-
symbol_hasher: symbol_hasher,
3113-
type_hashcodes: @mut HashMap::new(),
3114-
type_short_names: @mut HashMap::new(),
3115-
all_llvm_symbols: @mut HashSet::new(),
3116-
tcx: tcx,
3117-
maps: maps,
3118-
stats: @mut Stats {
3119-
n_static_tydescs: 0u,
3120-
n_glues_created: 0u,
3121-
n_null_glues: 0u,
3122-
n_real_glues: 0u,
3123-
n_fns: 0u,
3124-
n_monos: 0u,
3125-
n_inlines: 0u,
3126-
n_closures: 0u,
3127-
llvm_insn_ctxt: @mut ~[],
3128-
llvm_insns: @mut HashMap::new(),
3129-
fn_times: @mut ~[]
3130-
},
3131-
upcalls: upcall::declare_upcalls(targ_cfg, llmod),
3132-
tydesc_type: tydesc_type,
3133-
int_type: int_type,
3134-
float_type: float_type,
3135-
opaque_vec_type: T_opaque_vec(targ_cfg),
3136-
builder: BuilderRef_res(unsafe {
3137-
llvm::LLVMCreateBuilderInContext(llcx)
3138-
}),
3139-
shape_cx: mk_ctxt(llmod),
3140-
crate_map: crate_map,
3141-
uses_gc: @mut false,
3142-
dbg_cx: dbg_cx,
3143-
do_not_commit_warning_issued: @mut false
3144-
};
3145-
3146-
{
3147-
let _icx = ccx.insn_ctxt("data");
3148-
trans_constants(ccx, crate);
3149-
}
3150-
3151-
{
3152-
let _icx = ccx.insn_ctxt("text");
3153-
trans_mod(ccx, &crate.node.module);
3154-
}
3155-
3156-
decl_gc_metadata(ccx, llmod_id);
3157-
fill_crate_map(ccx, crate_map);
3158-
glue::emit_tydescs(ccx);
3159-
write_abi_version(ccx);
3160-
3161-
// Translate the metadata.
3162-
write_metadata(ccx, crate);
3163-
if ccx.sess.trans_stats() {
3164-
io::println("--- trans stats ---");
3165-
io::println(fmt!("n_static_tydescs: %u",
3166-
ccx.stats.n_static_tydescs));
3167-
io::println(fmt!("n_glues_created: %u",
3168-
ccx.stats.n_glues_created));
3169-
io::println(fmt!("n_null_glues: %u", ccx.stats.n_null_glues));
3170-
io::println(fmt!("n_real_glues: %u", ccx.stats.n_real_glues));
3171-
3172-
io::println(fmt!("n_fns: %u", ccx.stats.n_fns));
3173-
io::println(fmt!("n_monos: %u", ccx.stats.n_monos));
3174-
io::println(fmt!("n_inlines: %u", ccx.stats.n_inlines));
3175-
io::println(fmt!("n_closures: %u", ccx.stats.n_closures));
3176-
}
3049+
{
3050+
let _icx = ccx.insn_ctxt("data");
3051+
trans_constants(ccx, crate);
3052+
}
31773053
3178-
if ccx.sess.count_llvm_insns() {
3179-
for ccx.stats.llvm_insns.each |&k, &v| {
3180-
io::println(fmt!("%-7u %s", v, k));
3181-
}
3054+
{
3055+
let _icx = ccx.insn_ctxt("text");
3056+
trans_mod(ccx, &crate.node.module);
3057+
}
3058+
3059+
decl_gc_metadata(ccx, llmod_id);
3060+
fill_crate_map(ccx, ccx.crate_map);
3061+
glue::emit_tydescs(ccx);
3062+
write_abi_version(ccx);
3063+
3064+
// Translate the metadata.
3065+
write_metadata(ccx, crate);
3066+
if ccx.sess.trans_stats() {
3067+
io::println("--- trans stats ---");
3068+
io::println(fmt!("n_static_tydescs: %u",
3069+
ccx.stats.n_static_tydescs));
3070+
io::println(fmt!("n_glues_created: %u",
3071+
ccx.stats.n_glues_created));
3072+
io::println(fmt!("n_null_glues: %u", ccx.stats.n_null_glues));
3073+
io::println(fmt!("n_real_glues: %u", ccx.stats.n_real_glues));
3074+
3075+
io::println(fmt!("n_fns: %u", ccx.stats.n_fns));
3076+
io::println(fmt!("n_monos: %u", ccx.stats.n_monos));
3077+
io::println(fmt!("n_inlines: %u", ccx.stats.n_inlines));
3078+
io::println(fmt!("n_closures: %u", ccx.stats.n_closures));
3079+
}
3080+
3081+
if ccx.sess.count_llvm_insns() {
3082+
for ccx.stats.llvm_insns.each |&k, &v| {
3083+
io::println(fmt!("%-7u %s", v, k));
31823084
}
3183-
unset_task_llcx();
3184-
return (llcx, llmod, link_meta);
31853085
}
3086+
return (llmod, link_meta);
31863087
}
31873088
31883089
fn task_local_llcx_key(_v: @ContextRef) {}

src/librustc/middle/trans/common.rs

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,18 @@
1212
1313
use core::prelude::*;
1414

15-
use back::{abi, upcall};
15+
use back::{abi};
1616
use driver::session;
1717
use driver::session::Session;
18-
use lib::llvm::{ModuleRef, ValueRef, TypeRef, BasicBlockRef, BuilderRef};
19-
use lib::llvm::{ContextRef, True, False, Bool};
20-
use lib::llvm::{llvm, TargetData, TypeNames, associate_type, name_has_type};
18+
use lib::llvm::{ValueRef, TypeRef, BasicBlockRef, BuilderRef};
19+
use lib::llvm::{True, False, Bool};
20+
use lib::llvm::{llvm, TypeNames, associate_type, name_has_type};
2121
use lib;
22-
use metadata::common::LinkMeta;
23-
use middle::astencode;
24-
use middle::resolve;
25-
use middle::trans::adt;
2622
use middle::trans::base;
2723
use middle::trans::build;
2824
use middle::trans::datum;
29-
use middle::trans::debuginfo;
3025
use middle::trans::glue;
31-
use middle::trans::reachable;
32-
use middle::trans::shape;
3326
use middle::trans::type_of;
34-
use middle::trans::type_use;
3527
use middle::trans::write_guard;
3628
use middle::ty::substs;
3729
use middle::ty;
@@ -41,8 +33,7 @@ use util::ppaux::{Repr};
4133

4234
use core::cast::transmute;
4335
use core::cast;
44-
use core::hash;
45-
use core::hashmap::{HashMap, HashSet};
36+
use core::hashmap::{HashMap};
4637
use core::libc::{c_uint, c_longlong, c_ulonglong};
4738
use core::str;
4839
use core::to_bytes;

0 commit comments

Comments
 (0)