aboutsummaryrefslogtreecommitdiff
path: root/src/comp
diff options
context:
space:
mode:
authorPatrick Walton <[email protected]>2010-12-09 15:26:16 -0800
committerPatrick Walton <[email protected]>2010-12-09 15:26:16 -0800
commit1c9dc2ca52cd4ab4d37734eeb8fd21f254162afe (patch)
tree7f62cc8d15bee882d344708d2494ee3e4c1fda2c /src/comp
parentSimplify second pass of collect_item_types so I can understand it better. (diff)
downloadrust-1c9dc2ca52cd4ab4d37734eeb8fd21f254162afe.tar.xz
rust-1c9dc2ca52cd4ab4d37734eeb8fd21f254162afe.zip
rustc: Decouple new_fn_ctxt from AST items so that we can use it to generate glue too
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/middle/trans.rs22
1 files changed, 12 insertions, 10 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index 8249d31d..efbff5d2 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -1815,26 +1815,22 @@ impure fn trans_block(@block_ctxt cx, &ast.block b) -> result {
fn new_fn_ctxt(@crate_ctxt cx,
str name,
vec[ast.arg] args,
- ast.def_id fid) -> @fn_ctxt {
+ ValueRef llfndecl) -> @fn_ctxt {
- check (cx.item_ids.contains_key(fid));
- let ValueRef llfn = cx.item_ids.get(fid);
- cx.item_names.insert(cx.path, llfn);
-
- let ValueRef lltaskptr = llvm.LLVMGetParam(llfn, 0u);
+ let ValueRef lltaskptr = llvm.LLVMGetParam(llfndecl, 0u);
let uint arg_n = 1u;
let hashmap[ast.def_id, ValueRef] lllocals = new_def_hash[ValueRef]();
let hashmap[ast.def_id, ValueRef] llargs = new_def_hash[ValueRef]();
for (ast.arg arg in args) {
- auto llarg = llvm.LLVMGetParam(llfn, arg_n);
+ auto llarg = llvm.LLVMGetParam(llfndecl, arg_n);
check (llarg as int != 0);
llargs.insert(arg.id, llarg);
arg_n += 1u;
}
- ret @rec(llfn=llfn,
+ ret @rec(llfn=llfndecl,
lltaskptr=lltaskptr,
llargs=llargs,
lllocals=lllocals,
@@ -1882,7 +1878,10 @@ fn arg_tys_of_fn(ast.ann ann) -> vec[typeck.arg] {
impure fn trans_fn(@crate_ctxt cx, &ast._fn f, ast.def_id fid,
&ast.ann ann) {
- auto fcx = new_fn_ctxt(cx, cx.path, f.inputs, fid);
+ auto llfndecl = cx.item_ids.get(fid);
+ cx.item_names.insert(cx.path, llfndecl);
+
+ auto fcx = new_fn_ctxt(cx, cx.path, f.inputs, llfndecl);
auto bcx = new_top_block_ctxt(fcx);
copy_args_to_allocas(bcx, f.inputs, arg_tys_of_fn(ann));
@@ -1918,7 +1917,10 @@ fn trans_tag_variant(@crate_ctxt cx, ast.def_id tag_id,
let ValueRef llfn = decl_fastcall_fn(cx.llmod, s, llfnty);
cx.item_ids.insert(variant.id, llfn);
- auto fcx = new_fn_ctxt(cx, cx.path, fn_args, variant.id);
+ let ValueRef llfndecl = cx.item_ids.get(variant.id);
+ cx.item_names.insert(cx.path, llfndecl);
+
+ auto fcx = new_fn_ctxt(cx, cx.path, fn_args, llfndecl);
auto bcx = new_top_block_ctxt(fcx);
auto arg_tys = arg_tys_of_fn(variant.ann);