librustc: De-@mut
the monomorphizing
field in CrateContext
This commit is contained in:
parent
b5218ba6ad
commit
d3f58c59e4
@ -70,7 +70,7 @@ pub struct CrateContext {
|
|||||||
non_inlineable_statics: HashSet<ast::NodeId>,
|
non_inlineable_statics: HashSet<ast::NodeId>,
|
||||||
// Cache instances of monomorphized functions
|
// Cache instances of monomorphized functions
|
||||||
monomorphized: RefCell<HashMap<mono_id, ValueRef>>,
|
monomorphized: RefCell<HashMap<mono_id, ValueRef>>,
|
||||||
monomorphizing: HashMap<ast::DefId, uint>,
|
monomorphizing: RefCell<HashMap<ast::DefId, uint>>,
|
||||||
// Cache generated vtables
|
// Cache generated vtables
|
||||||
vtables: HashMap<(ty::t, mono_id), ValueRef>,
|
vtables: HashMap<(ty::t, mono_id), ValueRef>,
|
||||||
// Cache of constant strings,
|
// Cache of constant strings,
|
||||||
@ -201,7 +201,7 @@ impl CrateContext {
|
|||||||
external_srcs: HashMap::new(),
|
external_srcs: HashMap::new(),
|
||||||
non_inlineable_statics: HashSet::new(),
|
non_inlineable_statics: HashSet::new(),
|
||||||
monomorphized: RefCell::new(HashMap::new()),
|
monomorphized: RefCell::new(HashMap::new()),
|
||||||
monomorphizing: HashMap::new(),
|
monomorphizing: RefCell::new(HashMap::new()),
|
||||||
vtables: HashMap::new(),
|
vtables: HashMap::new(),
|
||||||
const_cstr_cache: HashMap::new(),
|
const_cstr_cache: HashMap::new(),
|
||||||
const_globals: HashMap::new(),
|
const_globals: HashMap::new(),
|
||||||
|
@ -184,17 +184,22 @@ pub fn monomorphic_fn(ccx: @mut CrateContext,
|
|||||||
|
|
||||||
ccx.stats.n_monos += 1;
|
ccx.stats.n_monos += 1;
|
||||||
|
|
||||||
let depth = match ccx.monomorphizing.find(&fn_id) {
|
let depth;
|
||||||
Some(&d) => d, None => 0
|
{
|
||||||
};
|
let mut monomorphizing = ccx.monomorphizing.borrow_mut();
|
||||||
// Random cut-off -- code that needs to instantiate the same function
|
depth = match monomorphizing.get().find(&fn_id) {
|
||||||
// recursively more than thirty times can probably safely be assumed to be
|
Some(&d) => d, None => 0
|
||||||
// causing an infinite expansion.
|
};
|
||||||
if depth > 30 {
|
|
||||||
ccx.sess.span_fatal(
|
// Random cut-off -- code that needs to instantiate the same function
|
||||||
span, "overly deep expansion of inlined function");
|
// recursively more than thirty times can probably safely be assumed
|
||||||
|
// to be causing an infinite expansion.
|
||||||
|
if depth > 30 {
|
||||||
|
ccx.sess.span_fatal(
|
||||||
|
span, "overly deep expansion of inlined function");
|
||||||
|
}
|
||||||
|
monomorphizing.get().insert(fn_id, depth + 1);
|
||||||
}
|
}
|
||||||
ccx.monomorphizing.insert(fn_id, depth + 1);
|
|
||||||
|
|
||||||
let (_, elt) = gensym_name(ccx.sess.str_of(name));
|
let (_, elt) = gensym_name(ccx.sess.str_of(name));
|
||||||
let mut pt = (*pt).clone();
|
let mut pt = (*pt).clone();
|
||||||
@ -292,7 +297,11 @@ pub fn monomorphic_fn(ccx: @mut CrateContext,
|
|||||||
ccx.tcx.sess.bug(format!("Can't monomorphize a {:?}", map_node))
|
ccx.tcx.sess.bug(format!("Can't monomorphize a {:?}", map_node))
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
ccx.monomorphizing.insert(fn_id, depth);
|
|
||||||
|
{
|
||||||
|
let mut monomorphizing = ccx.monomorphizing.borrow_mut();
|
||||||
|
monomorphizing.get().insert(fn_id, depth);
|
||||||
|
}
|
||||||
|
|
||||||
debug!("leaving monomorphic fn {}", ty::item_path_str(ccx.tcx, fn_id));
|
debug!("leaving monomorphic fn {}", ty::item_path_str(ccx.tcx, fn_id));
|
||||||
(lldecl, must_cast)
|
(lldecl, must_cast)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user