summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Högberg <john@erlang.org>2019-09-17 10:45:56 +0200
committerJohn Högberg <john@erlang.org>2019-09-17 11:43:51 +0200
commit5943680509c0469a1a43c27dc892536f4ea7f4a3 (patch)
tree76ffbb8fe3a59f5e31d0895425c42dbb2c5733d7
parent7848e6bfaa2848df69738e31909afa4a15dbcd18 (diff)
downloaderlang-5943680509c0469a1a43c27dc892536f4ea7f4a3.tar.gz
erts: Use global trap entries for lists
The local ones are redundant now that the global ones can't be traced anymore.
-rw-r--r--erts/emulator/beam/erl_bif_lists.c59
-rw-r--r--erts/emulator/beam/erl_init.c1
-rw-r--r--erts/emulator/beam/global.h3
3 files changed, 10 insertions, 53 deletions
diff --git a/erts/emulator/beam/erl_bif_lists.c b/erts/emulator/beam/erl_bif_lists.c
index 9d485abc35..40512a117d 100644
--- a/erts/emulator/beam/erl_bif_lists.c
+++ b/erts/emulator/beam/erl_bif_lists.c
@@ -32,45 +32,6 @@
#include "bif.h"
#include "erl_binary.h"
-static Export plusplus_trap_export;
-static Export append_trap_export;
-
-static Export minusminus_trap_export;
-static Export subtract_trap_export;
-
-static Export member_trap_export;
-
-static Export reverse_trap_export;
-
-static Export keymember_trap_export;
-static Export keysearch_trap_export;
-static Export keyfind_trap_export;
-
-void erts_init_bif_lists(void) {
- erts_init_trap_export(&plusplus_trap_export, am_erlang, am_PlusPlus, 2,
- ebif_plusplus_2);
- erts_init_trap_export(&append_trap_export, am_erlang, am_append, 2,
- append_2);
-
- erts_init_trap_export(&minusminus_trap_export, am_erlang, am_MinusMinus, 2,
- ebif_minusminus_2);
- erts_init_trap_export(&subtract_trap_export, am_lists, am_subtract, 2,
- subtract_2);
-
- erts_init_trap_export(&reverse_trap_export, am_lists, am_reverse, 2,
- lists_reverse_2);
-
- erts_init_trap_export(&member_trap_export, am_lists, am_member, 2,
- lists_member_2);
-
- erts_init_trap_export(&keymember_trap_export, am_lists, am_keymember, 3,
- lists_keymember_3);
- erts_init_trap_export(&keysearch_trap_export, am_lists, am_keysearch, 3,
- lists_keysearch_3);
- erts_init_trap_export(&keyfind_trap_export, am_lists, am_keyfind, 3,
- lists_keyfind_3);
-}
-
static Eterm keyfind(Export* Bif, Process* p, Eterm Key, Eterm Pos, Eterm List);
/* erlang:'++'/2
@@ -346,12 +307,12 @@ static Eterm append(Export *bif_entry, BIF_ALIST_2) {
Eterm
ebif_plusplus_2(BIF_ALIST_2)
{
- return append(&plusplus_trap_export, BIF_CALL_ARGS);
+ return append(&bif_trap_export[BIF_ebif_plusplus_2], BIF_CALL_ARGS);
}
BIF_RETTYPE append_2(BIF_ALIST_2)
{
- return append(&append_trap_export, BIF_CALL_ARGS);
+ return append(&bif_trap_export[BIF_append_2], BIF_CALL_ARGS);
}
/* erlang:'--'/2
@@ -1077,11 +1038,11 @@ static Eterm subtract(Export *bif_entry, BIF_ALIST_2) {
}
BIF_RETTYPE ebif_minusminus_2(BIF_ALIST_2) {
- return subtract(&minusminus_trap_export, BIF_CALL_ARGS);
+ return subtract(&bif_trap_export[BIF_ebif_minusminus_2], BIF_CALL_ARGS);
}
BIF_RETTYPE subtract_2(BIF_ALIST_2) {
- return subtract(&subtract_trap_export, BIF_CALL_ARGS);
+ return subtract(&bif_trap_export[BIF_subtract_2], BIF_CALL_ARGS);
}
@@ -1106,7 +1067,7 @@ BIF_RETTYPE lists_member_2(BIF_ALIST_2)
while (is_list(list)) {
if (--max_iter < 0) {
BUMP_ALL_REDS(BIF_P);
- BIF_TRAP2(&member_trap_export, BIF_P, term, list);
+ BIF_TRAP2(&bif_trap_export[BIF_lists_member_2], BIF_P, term, list);
}
item = CAR(list_val(list));
if ((item == term) || (non_immed_key && eq(item, term))) {
@@ -1168,7 +1129,7 @@ static BIF_RETTYPE lists_reverse_alloc(Process *c_p,
}
ASSERT(is_list(tail) && cells_left == 0);
- BIF_TRAP2(&reverse_trap_export, c_p, list, tail);
+ BIF_TRAP2(&bif_trap_export[BIF_lists_reverse_2], c_p, list, tail);
}
static BIF_RETTYPE lists_reverse_onheap(Process *c_p,
@@ -1217,7 +1178,7 @@ static BIF_RETTYPE lists_reverse_onheap(Process *c_p,
}
BUMP_ALL_REDS(c_p);
- BIF_TRAP2(&reverse_trap_export, c_p, list, tail);
+ BIF_TRAP2(&bif_trap_export[BIF_lists_reverse_2], c_p, list, tail);
}
BIF_ERROR(c_p, BADARG);
@@ -1247,7 +1208,7 @@ lists_keymember_3(BIF_ALIST_3)
{
Eterm res;
- res = keyfind(&keymember_trap_export, BIF_P,
+ res = keyfind(&bif_trap_export[BIF_lists_keymember_3], BIF_P,
BIF_ARG_1, BIF_ARG_2, BIF_ARG_3);
if (is_value(res) && is_tuple(res)) {
return am_true;
@@ -1261,7 +1222,7 @@ lists_keysearch_3(BIF_ALIST_3)
{
Eterm res;
- res = keyfind(&keysearch_trap_export, BIF_P,
+ res = keyfind(&bif_trap_export[BIF_lists_keysearch_3], BIF_P,
BIF_ARG_1, BIF_ARG_2, BIF_ARG_3);
if (is_non_value(res) || is_not_tuple(res)) {
return res;
@@ -1274,7 +1235,7 @@ lists_keysearch_3(BIF_ALIST_3)
BIF_RETTYPE
lists_keyfind_3(BIF_ALIST_3)
{
- return keyfind(&keyfind_trap_export, BIF_P,
+ return keyfind(&bif_trap_export[BIF_lists_keyfind_3], BIF_P,
BIF_ARG_1, BIF_ARG_2, BIF_ARG_3);
}
diff --git a/erts/emulator/beam/erl_init.c b/erts/emulator/beam/erl_init.c
index 4d0ebbd1ed..547e4064a2 100644
--- a/erts/emulator/beam/erl_init.c
+++ b/erts/emulator/beam/erl_init.c
@@ -354,7 +354,6 @@ erl_init(int ncpu,
erts_init_bif_chksum();
erts_init_bif_binary();
erts_init_bif_guard();
- erts_init_bif_lists();
erts_init_bif_persistent_term();
erts_init_bif_re();
erts_init_unicode(); /* after RE to get access to PCRE unicode */
diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h
index b86709b093..dd114a98fa 100644
--- a/erts/emulator/beam/global.h
+++ b/erts/emulator/beam/global.h
@@ -912,9 +912,6 @@ Eterm erts_trapping_length_1(Process* p, Eterm* args);
Eterm erl_is_function(Process* p, Eterm arg1, Eterm arg2);
-/* beam_bif_lists.c */
-void erts_init_bif_lists(void);
-
/* beam_bif_load.c */
Eterm erts_check_process_code(Process *c_p, Eterm module, int *redsp, int fcalls);
Eterm erts_proc_copy_literal_area(Process *c_p, int *redsp, int fcalls, int gc_allowed);