diff options
author | Björn-Egil Dahlberg <[email protected]> | 2014-08-21 16:32:52 +0200 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2014-08-21 16:32:52 +0200 |
commit | ed5a0b9cdf6a7e87cec1a50c6e9adb29698ce8d9 (patch) | |
tree | 4b9f103d907d336a45cc4efe1e8f59d95ec29ec1 /erts/emulator/beam/erl_bif_info.c | |
parent | cffe162d9ddce58b2aaf71a102f3b6c6738a2029 (diff) | |
parent | e2148351cd40a8affacf6fc0589448d15bc603f7 (diff) | |
download | otp-ed5a0b9cdf6a7e87cec1a50c6e9adb29698ce8d9.tar.gz otp-ed5a0b9cdf6a7e87cec1a50c6e9adb29698ce8d9.tar.bz2 otp-ed5a0b9cdf6a7e87cec1a50c6e9adb29698ce8d9.zip |
Merge branch 'egil/proc_lib-optimizations/OTP-12060' into maint
* egil/proc_lib-optimizations/OTP-12060:
stdlib: Update dependencies to erts-6.2
erts: Update preloaded erlang.beam
stdlib: Use erlang:fun_info_mfa/1 in proc_lib:init_p/3
erts: Test erlang:fun_info_mfa/1
erts: Introduce erlang:fun_info_mfa/1
Diffstat (limited to 'erts/emulator/beam/erl_bif_info.c')
-rw-r--r-- | erts/emulator/beam/erl_bif_info.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/erts/emulator/beam/erl_bif_info.c b/erts/emulator/beam/erl_bif_info.c index 6915765dab..6efe9d9550 100644 --- a/erts/emulator/beam/erl_bif_info.c +++ b/erts/emulator/beam/erl_bif_info.c @@ -3055,6 +3055,25 @@ fun_info_2(BIF_ALIST_2) return TUPLE2(hp, what, val); } +BIF_RETTYPE +fun_info_mfa_1(BIF_ALIST_1) +{ + Process* p = BIF_P; + Eterm fun = BIF_ARG_1; + Eterm* hp; + + if (is_fun(fun)) { + ErlFunThing* funp = (ErlFunThing *) fun_val(fun); + hp = HAlloc(p, 4); + BIF_RET(TUPLE3(hp,funp->fe->module,funp->fe->address[-2],make_small(funp->arity))); + } else if (is_export(fun)) { + Export* exp = (Export *) ((UWord) (export_val(fun))[1]); + hp = HAlloc(p, 4); + BIF_RET(TUPLE3(hp,exp->code[0],exp->code[1],make_small(exp->code[2]))); + } + BIF_ERROR(p, BADARG); +} + BIF_RETTYPE is_process_alive_1(BIF_ALIST_1) { if(is_internal_pid(BIF_ARG_1)) { |