aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_bif_info.c
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2014-08-21 16:32:52 +0200
committerBjörn-Egil Dahlberg <[email protected]>2014-08-21 16:32:52 +0200
commited5a0b9cdf6a7e87cec1a50c6e9adb29698ce8d9 (patch)
tree4b9f103d907d336a45cc4efe1e8f59d95ec29ec1 /erts/emulator/beam/erl_bif_info.c
parentcffe162d9ddce58b2aaf71a102f3b6c6738a2029 (diff)
parente2148351cd40a8affacf6fc0589448d15bc603f7 (diff)
downloadotp-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.c19
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)) {