auto merge of #5017 : catamorphism/rust/less-copy, r=catamorphism
This commit is contained in:
commit
396f911925
@ -456,7 +456,6 @@ pub fn set_glue_inlining(f: ValueRef, t: ty::t) {
|
||||
// Double-check that we never ask LLVM to declare the same symbol twice. It
|
||||
// silently mangles such symbols, breaking our linkage model.
|
||||
pub fn note_unique_llvm_symbol(ccx: @crate_ctxt, +sym: ~str) {
|
||||
// XXX: Bad copy.
|
||||
if ccx.all_llvm_symbols.contains_key(&sym) {
|
||||
ccx.sess.bug(~"duplicate LLVM symbol: " + sym);
|
||||
}
|
||||
@ -628,7 +627,10 @@ pub fn iter_structural_ty(cx: block, av: ValueRef, t: ty::t,
|
||||
for vec::each(fn_ty.sig.inputs) |a| {
|
||||
let llfldp_a = GEP_enum(cx, a_tup, tid, v_id,
|
||||
/*bad*/copy tps, j);
|
||||
// XXX: Is "None" right here?
|
||||
// This assumes the self type is absent (it passes
|
||||
// None for the self_ty_opt arg of substs_tps).
|
||||
// I think that's ok since you can't have an enum
|
||||
// inside a trait.
|
||||
let ty_subst = ty::subst_tps(ccx.tcx, tps, None, a.ty);
|
||||
cx = f(cx, llfldp_a, ty_subst);
|
||||
j += 1u;
|
||||
@ -1038,8 +1040,7 @@ pub fn load_if_immediate(cx: block, v: ValueRef, t: ty::t) -> ValueRef {
|
||||
pub fn trans_trace(bcx: block, sp_opt: Option<span>, +trace_str: ~str) {
|
||||
if !bcx.sess().trace() { return; }
|
||||
let _icx = bcx.insn_ctxt("trans_trace");
|
||||
// XXX: Bad copy.
|
||||
add_comment(bcx, copy trace_str);
|
||||
add_comment(bcx, trace_str);
|
||||
let V_trace_str = C_cstr(bcx.ccx(), trace_str);
|
||||
let {V_filename, V_line} = match sp_opt {
|
||||
Some(sp) => {
|
||||
@ -1551,7 +1552,7 @@ pub fn new_fn_ctxt_w_id(ccx: @crate_ctxt,
|
||||
llfndecl: ValueRef,
|
||||
id: ast::node_id,
|
||||
impl_id: Option<ast::def_id>,
|
||||
+param_substs: Option<param_substs>,
|
||||
param_substs: Option<@param_substs>,
|
||||
sp: Option<span>) -> fn_ctxt {
|
||||
let llbbs = mk_standard_basic_blocks(llfndecl);
|
||||
return @fn_ctxt_ {
|
||||
@ -1740,7 +1741,7 @@ pub fn trans_closure(ccx: @crate_ctxt,
|
||||
body: &ast::blk,
|
||||
llfndecl: ValueRef,
|
||||
ty_self: self_arg,
|
||||
+param_substs: Option<param_substs>,
|
||||
param_substs: Option<@param_substs>,
|
||||
id: ast::node_id,
|
||||
impl_id: Option<ast::def_id>,
|
||||
maybe_load_env: fn(fn_ctxt),
|
||||
@ -1804,7 +1805,7 @@ pub fn trans_fn(ccx: @crate_ctxt,
|
||||
body: &ast::blk,
|
||||
llfndecl: ValueRef,
|
||||
ty_self: self_arg,
|
||||
+param_substs: Option<param_substs>,
|
||||
param_substs: Option<@param_substs>,
|
||||
id: ast::node_id,
|
||||
impl_id: Option<ast::def_id>) {
|
||||
let do_time = ccx.sess.trans_stats();
|
||||
@ -1813,8 +1814,8 @@ pub fn trans_fn(ccx: @crate_ctxt,
|
||||
debug!("trans_fn(ty_self=%?)", ty_self);
|
||||
let _icx = ccx.insn_ctxt("trans_fn");
|
||||
ccx.stats.n_fns += 1;
|
||||
// XXX: Bad copy of `path`.
|
||||
trans_closure(ccx, copy path, decl, body, llfndecl, ty_self,
|
||||
let the_path_str = path_str(ccx.sess, path);
|
||||
trans_closure(ccx, path, decl, body, llfndecl, ty_self,
|
||||
param_substs, id, impl_id,
|
||||
|fcx| {
|
||||
if ccx.sess.opts.extra_debuginfo {
|
||||
@ -1824,7 +1825,7 @@ pub fn trans_fn(ccx: @crate_ctxt,
|
||||
|_bcx| { });
|
||||
if do_time {
|
||||
let end = time::get_time();
|
||||
log_fn_time(ccx, path_str(ccx.sess, path), start, end);
|
||||
log_fn_time(ccx, the_path_str, start, end);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1834,7 +1835,7 @@ pub fn trans_enum_variant(ccx: @crate_ctxt,
|
||||
args: ~[ast::variant_arg],
|
||||
disr: int,
|
||||
is_degen: bool,
|
||||
+param_substs: Option<param_substs>,
|
||||
param_substs: Option<@param_substs>,
|
||||
llfndecl: ValueRef) {
|
||||
let _icx = ccx.insn_ctxt("trans_enum_variant");
|
||||
// Translate variant arguments to function arguments.
|
||||
@ -1850,9 +1851,8 @@ pub fn trans_enum_variant(ccx: @crate_ctxt,
|
||||
id: varg.id,
|
||||
}
|
||||
};
|
||||
// XXX: Bad copy of `param_substs`.
|
||||
let fcx = new_fn_ctxt_w_id(ccx, ~[], llfndecl, variant.node.id, None,
|
||||
copy param_substs, None);
|
||||
param_substs, None);
|
||||
// XXX: Bad copy.
|
||||
let raw_llargs = create_llargs_for_fn_args(fcx, no_self, copy fn_args);
|
||||
let ty_param_substs = match param_substs {
|
||||
@ -1897,7 +1897,7 @@ pub fn trans_enum_variant(ccx: @crate_ctxt,
|
||||
pub fn trans_tuple_struct(ccx: @crate_ctxt,
|
||||
fields: ~[@ast::struct_field],
|
||||
ctor_id: ast::node_id,
|
||||
+param_substs: Option<param_substs>,
|
||||
param_substs: Option<@param_substs>,
|
||||
llfndecl: ValueRef) {
|
||||
let _icx = ccx.insn_ctxt("trans_tuple_struct");
|
||||
|
||||
@ -1951,7 +1951,7 @@ pub fn trans_struct_dtor(ccx: @crate_ctxt,
|
||||
+path: path,
|
||||
body: &ast::blk,
|
||||
dtor_id: ast::node_id,
|
||||
+psubsts: Option<param_substs>,
|
||||
psubsts: Option<@param_substs>,
|
||||
hash_id: Option<mono_id>,
|
||||
parent_id: ast::def_id)
|
||||
-> ValueRef {
|
||||
@ -1968,7 +1968,7 @@ pub fn trans_struct_dtor(ccx: @crate_ctxt,
|
||||
let lldty = type_of_dtor(ccx, class_ty);
|
||||
|
||||
// XXX: Bad copies.
|
||||
let s = get_dtor_symbol(ccx, copy path, dtor_id, copy psubsts);
|
||||
let s = get_dtor_symbol(ccx, copy path, dtor_id, psubsts);
|
||||
|
||||
/* Register the dtor as a function. It has external linkage */
|
||||
let lldecl = decl_internal_cdecl_fn(ccx.llmod, s, lldty);
|
||||
@ -2296,7 +2296,7 @@ pub fn item_path(ccx: @crate_ctxt, i: @ast::item) -> path {
|
||||
pub fn get_dtor_symbol(ccx: @crate_ctxt,
|
||||
+path: path,
|
||||
id: ast::node_id,
|
||||
+substs: Option<param_substs>)
|
||||
substs: Option<@param_substs>)
|
||||
-> ~str {
|
||||
let t = ty::node_id_to_type(ccx.tcx, id);
|
||||
match ccx.item_symbols.find(&id) {
|
||||
|
@ -834,7 +834,7 @@ pub fn add_span_comment(bcx: block, sp: span, text: ~str) {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn add_comment(bcx: block, text: ~str) {
|
||||
pub fn add_comment(bcx: block, text: &str) {
|
||||
unsafe {
|
||||
let ccx = bcx.ccx();
|
||||
if !ccx.sess.no_asm_comments() {
|
||||
|
@ -311,7 +311,7 @@ pub struct fn_ctxt_ {
|
||||
|
||||
// If this function is being monomorphized, this contains the type
|
||||
// substitutions used.
|
||||
param_substs: Option<param_substs>,
|
||||
param_substs: Option<@param_substs>,
|
||||
|
||||
// The source span and nesting context where this function comes from, for
|
||||
// error reporting and symbol generation.
|
||||
@ -1395,7 +1395,7 @@ pub fn resolve_vtable_in_fn_ctxt(fcx: fn_ctxt, +vt: typeck::vtable_origin)
|
||||
}
|
||||
typeck::vtable_param(n_param, n_bound) => {
|
||||
match fcx.param_substs {
|
||||
Some(ref substs) => {
|
||||
Some(substs) => {
|
||||
find_vtable(tcx, substs, n_param, n_bound)
|
||||
}
|
||||
_ => {
|
||||
|
@ -524,7 +524,8 @@ pub impl Datum {
|
||||
if bcx.sess().trace() {
|
||||
trans_trace(
|
||||
bcx, None,
|
||||
fmt!("preserving until end of scope %d", root_info.scope));
|
||||
fmt!("preserving until end of scope %d",
|
||||
root_info.scope));
|
||||
}
|
||||
|
||||
let scratch = scratch_datum(bcx, self.ty, true);
|
||||
|
@ -332,7 +332,7 @@ pub fn trans_intrinsic(ccx: @crate_ctxt,
|
||||
decl: ValueRef,
|
||||
item: @ast::foreign_item,
|
||||
+path: ast_map::path,
|
||||
+substs: param_substs,
|
||||
substs: @param_substs,
|
||||
ref_id: Option<ast::node_id>) {
|
||||
debug!("trans_intrinsic(item.ident=%s)", ccx.sess.str_of(item.ident));
|
||||
|
||||
|
@ -66,7 +66,7 @@ pub fn trans_impl(ccx: @crate_ctxt, +path: path, name: ast::ident,
|
||||
match self_ty {
|
||||
None => param_substs_opt = None,
|
||||
Some(self_ty) => {
|
||||
param_substs_opt = Some(param_substs {
|
||||
param_substs_opt = Some(@param_substs {
|
||||
tys: ~[],
|
||||
vtables: None,
|
||||
bounds: @~[],
|
||||
@ -99,7 +99,7 @@ Translates a (possibly monomorphized) method body.
|
||||
pub fn trans_method(ccx: @crate_ctxt,
|
||||
+path: path,
|
||||
method: &ast::method,
|
||||
+param_substs: Option<param_substs>,
|
||||
param_substs: Option<@param_substs>,
|
||||
base_self_ty: Option<ty::t>,
|
||||
llfn: ValueRef,
|
||||
impl_id: ast::def_id) {
|
||||
@ -118,7 +118,7 @@ pub fn trans_method(ccx: @crate_ctxt,
|
||||
}
|
||||
let self_ty = match param_substs {
|
||||
None => self_ty,
|
||||
Some(param_substs {tys: ref tys, _}) => {
|
||||
Some(@param_substs {tys: ref tys, _}) => {
|
||||
ty::subst_tps(ccx.tcx, *tys, None, self_ty)
|
||||
}
|
||||
};
|
||||
@ -247,7 +247,7 @@ pub fn trans_method_callee(bcx: block,
|
||||
bound_num: b
|
||||
}) => {
|
||||
match bcx.fcx.param_substs {
|
||||
Some(ref substs) => {
|
||||
Some(substs) => {
|
||||
let vtbl = find_vtable(bcx.tcx(), substs, p, b);
|
||||
trans_monomorphized_callee(bcx, callee_id, self, mentry,
|
||||
trait_id, off, vtbl)
|
||||
|
@ -156,7 +156,7 @@ pub fn monomorphic_fn(ccx: @crate_ctxt,
|
||||
lldecl
|
||||
};
|
||||
|
||||
let psubsts = Some(param_substs {
|
||||
let psubsts = Some(@param_substs {
|
||||
tys: substs,
|
||||
vtables: vtables,
|
||||
bounds: tpt.bounds,
|
||||
|
Loading…
x
Reference in New Issue
Block a user