Skip to content

Commit

Permalink
Refactor trans_call to separate out the translation of the arguments,…
Browse files Browse the repository at this point in the history
… environment, and return pointer
  • Loading branch information
nikomatsakis committed Mar 19, 2013
1 parent e67448d commit e821671
Showing 1 changed file with 26 additions and 34 deletions.
60 changes: 26 additions & 34 deletions src/librustc/middle/trans/callee.rs
Original file line number Diff line number Diff line change
Expand Up @@ -491,12 +491,14 @@ pub fn trans_call_inner(
}
};

let args_res = trans_args(bcx, llenv, args, fn_expr_ty,
dest, ret_flag, autoref_arg);
bcx = args_res.bcx;
let mut llargs = /*bad*/copy args_res.args;
let llretslot = trans_ret_slot(bcx, fn_expr_ty, dest);

let mut llargs = ~[];
llargs.push(llretslot);
llargs.push(llenv);
bcx = trans_args(bcx, args, fn_expr_ty,
ret_flag, autoref_arg, &mut llargs);

let llretslot = args_res.retslot;

// Now that the arguments have finished evaluating, we need to revoke
// the cleanup for the self argument, if it exists
Expand Down Expand Up @@ -554,30 +556,12 @@ pub enum CallArgs {
ArgVals(&'self [ValueRef])
}

pub struct Args {
bcx: block,
args: ~[ValueRef],
retslot: ValueRef
}

pub fn trans_args(cx: block,
llenv: ValueRef,
+args: CallArgs,
fn_ty: ty::t,
dest: expr::Dest,
ret_flag: Option<ValueRef>,
+autoref_arg: AutorefArg) -> Args {
let _icx = cx.insn_ctxt("trans_args");
let mut temp_cleanups = ~[];
let arg_tys = ty::ty_fn_args(fn_ty);
let mut llargs: ~[ValueRef] = ~[];

let mut bcx = cx;

pub fn trans_ret_slot(+bcx: block,
+fn_ty: ty::t,
+dest: expr::Dest) -> ValueRef
{
let retty = ty::ty_fn_ret(fn_ty);

// Arg 0: Output pointer.
let llretslot = match dest {
match dest {
expr::SaveIn(dst) => dst,
expr::Ignore => {
if ty::type_is_nil(retty) {
Expand All @@ -588,13 +572,21 @@ pub fn trans_args(cx: block,
alloc_ty(bcx, retty)
}
}
};
llargs.push(llretslot);
}
}

// Arg 1: Env (closure-bindings / self value)
llargs.push(llenv);
pub fn trans_args(+cx: block,
+args: CallArgs,
+fn_ty: ty::t,
+ret_flag: Option<ValueRef>,
+autoref_arg: AutorefArg,
+llargs: &mut ~[ValueRef]) -> block
{
let _icx = cx.insn_ctxt("trans_args");
let mut temp_cleanups = ~[];
let arg_tys = ty::ty_fn_args(fn_ty);

// ... then explicit args.
let mut bcx = cx;

// First we figure out the caller's view of the types of the arguments.
// This will be needed if this is a generic call, because the callee has
Expand Down Expand Up @@ -623,7 +615,7 @@ pub fn trans_args(cx: block,
revoke_clean(bcx, *c)
}

Args { bcx: bcx, args: llargs, retslot: llretslot }
return bcx;
}

pub enum AutorefArg {
Expand Down

5 comments on commit e821671

@bors
Copy link
Contributor

@bors bors commented on e821671 Mar 20, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

saw approval from graydon
at nikomatsakis@e821671

@bors
Copy link
Contributor

@bors bors commented on e821671 Mar 20, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merging nikomatsakis/rust/issue-3678-refactor-trans_call = e821671 into auto

@bors
Copy link
Contributor

@bors bors commented on e821671 Mar 20, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nikomatsakis/rust/issue-3678-refactor-trans_call = e821671 merged ok, testing candidate = 99ac243

@bors
Copy link
Contributor

@bors bors commented on e821671 Mar 20, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bors
Copy link
Contributor

@bors bors commented on e821671 Mar 20, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fast-forwarding incoming to auto = 99ac243

Please sign in to comment.