diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-08-28 16:27:42 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-08-31 16:20:36 -0700 |
| commit | b999973c0ffa86738daab277cd6e985248ef08aa (patch) | |
| tree | dd9bf206a6b6a5d19e3f8873f370540b9ad27063 /src/rustc | |
| parent | a02ab41b65927c39e912ea820b5dff5032ad5695 (diff) | |
| download | rust-b999973c0ffa86738daab277cd6e985248ef08aa.tar.gz rust-b999973c0ffa86738daab277cd6e985248ef08aa.zip | |
Add a morestack_addr (temporary) intrinsic
Diffstat (limited to 'src/rustc')
| -rw-r--r-- | src/rustc/middle/trans/foreign.rs | 10 | ||||
| -rw-r--r-- | src/rustc/middle/typeck/check.rs | 3 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/rustc/middle/trans/foreign.rs b/src/rustc/middle/trans/foreign.rs index 34ccdb3d6e5..05f1d83cc89 100644 --- a/src/rustc/middle/trans/foreign.rs +++ b/src/rustc/middle/trans/foreign.rs @@ -993,6 +993,16 @@ fn trans_intrinsic(ccx: @crate_ctxt, decl: ValueRef, item: @ast::foreign_item, lv_temporary), arg_vals(~[frameaddress_val]), ignore); } + ~"morestack_addr" => { + // XXX This is a hack to grab the address of this particular + // native function. There should be a general in-language + // way to do this + let llfty = type_of_fn(bcx.ccx(), ~[], ty::mk_nil(bcx.tcx())); + let morestack_addr = decl_cdecl_fn( + bcx.ccx().llmod, ~"__morestack", llfty); + let morestack_addr = PointerCast(bcx, morestack_addr, T_ptr(T_nil())); + Store(bcx, morestack_addr, fcx.llretptr); + } _ => { // Could we make this an enum rather than a string? does it get // checked earlier? diff --git a/src/rustc/middle/typeck/check.rs b/src/rustc/middle/typeck/check.rs index 57a53904337..da096cbab24 100644 --- a/src/rustc/middle/typeck/check.rs +++ b/src/rustc/middle/typeck/check.rs @@ -2590,6 +2590,9 @@ fn check_intrinsic_type(ccx: @crate_ctxt, it: @ast::foreign_item) { }); (0u, ~[arg(ast::by_ref, fty)], ty::mk_nil(tcx)) } + ~"morestack_addr" => { + (0u, ~[], ty::mk_nil_ptr(tcx)) + } other => { tcx.sess.span_err(it.span, ~"unrecognized intrinsic function: `" + other + ~"`"); |
