aboutsummaryrefslogtreecommitdiff
path: root/src/comp/middle
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2011-02-09 09:54:58 -0800
committerGraydon Hoare <[email protected]>2011-02-09 09:54:58 -0800
commit8c0d35066bcc0ab0eb35818f4de63bccee097e5c (patch)
tree1d4e8731b6851136a777936e3b1e79a5b306b308 /src/comp/middle
parentAdd the single instruction required in activate glue to fix burning darwin ti... (diff)
downloadrust-8c0d35066bcc0ab0eb35818f4de63bccee097e5c.tar.xz
rust-8c0d35066bcc0ab0eb35818f4de63bccee097e5c.zip
Elide passed-typarams when tydescs are captured. Un-XFAIL generic-obj.rs.
Diffstat (limited to 'src/comp/middle')
-rw-r--r--src/comp/middle/trans.rs28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index 4401f885..2a9c32da 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -399,13 +399,15 @@ fn type_of_fn_full(@crate_ctxt cx,
}
}
- // Args >3: ty params ...
- auto ty_param_count =
- ty.count_ty_params(plain_ty(ty.ty_fn(inputs, output)));
- auto i = 0u;
- while (i < ty_param_count) {
- atys += T_ptr(T_tydesc());
- i += 1u;
+ // Args >3: ty params, if not acquired via capture...
+ if (obj_self == none[TypeRef]) {
+ auto ty_param_count =
+ ty.count_ty_params(plain_ty(ty.ty_fn(inputs, output)));
+ auto i = 0u;
+ while (i < ty_param_count) {
+ atys += T_ptr(T_tydesc());
+ i += 1u;
+ }
}
// ... then explicit args.
@@ -3387,11 +3389,13 @@ fn create_llargs_for_fn_args(&@fn_ctxt cx,
auto arg_n = 3u;
- for (ast.ty_param tp in ty_params) {
- auto llarg = llvm.LLVMGetParam(cx.llfn, arg_n);
- check (llarg as int != 0);
- cx.lltydescs.insert(tp.id, llarg);
- arg_n += 1u;
+ if (ty_self == none[TypeRef]) {
+ for (ast.ty_param tp in ty_params) {
+ auto llarg = llvm.LLVMGetParam(cx.llfn, arg_n);
+ check (llarg as int != 0);
+ cx.lltydescs.insert(tp.id, llarg);
+ arg_n += 1u;
+ }
}