Created
December 27, 2022 03:27
-
-
Save devsnek/e7aabb4e93ce26ef217ceedc7fe85e24 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/erts/emulator/beam/bif.c b/erts/emulator/beam/bif.c | |
index 41ba66062f..255bbc92b1 100644 | |
--- a/erts/emulator/beam/bif.c | |
+++ b/erts/emulator/beam/bif.c | |
@@ -2404,7 +2473,7 @@ do_send(Process *p, Eterm to, Eterm msg, Eterm return_term, Eterm *refp, | |
} | |
} | |
-BIF_RETTYPE send_3(BIF_ALIST_3) | |
+BIF_RETTYPE erts_internal_send_3(BIF_ALIST_3) | |
{ | |
BIF_RETTYPE retval; | |
Eterm ref; | |
@@ -2464,7 +2533,7 @@ BIF_RETTYPE send_3(BIF_ALIST_3) | |
break; | |
case SEND_YIELD: | |
if (suspend) { | |
- ERTS_BIF_PREP_YIELD3(retval, BIF_TRAP_EXPORT(BIF_send_3), p, to, msg, opts); | |
+ ERTS_BIF_PREP_YIELD3(retval, BIF_TRAP_EXPORT(BIF_erts_internal_send_3), p, to, msg, opts); | |
} else { | |
ERTS_BIF_PREP_RET(retval, am_nosuspend); | |
} | |
@@ -2506,7 +2575,7 @@ done: | |
return retval; | |
} | |
-BIF_RETTYPE send_2(BIF_ALIST_2) | |
+BIF_RETTYPE erts_internal_send_2(BIF_ALIST_2) | |
{ | |
return erl_send(BIF_P, BIF_ARG_1, BIF_ARG_2); | |
} | |
@@ -2579,7 +2648,7 @@ Eterm erl_send(Process *p, Eterm to, Eterm msg) | |
ERTS_BIF_PREP_RET(retval, msg); | |
break; | |
case SEND_YIELD: | |
- ERTS_BIF_PREP_YIELD2(retval, BIF_TRAP_EXPORT(BIF_send_2), p, to, msg); | |
+ ERTS_BIF_PREP_YIELD2(retval, BIF_TRAP_EXPORT(BIF_erts_internal_send_2), p, to, msg); | |
break; | |
case SEND_YIELD_RETURN: | |
yield_return: | |
diff --git a/erts/emulator/beam/bif.tab b/erts/emulator/beam/bif.tab | |
index e1ca5a961b..3986297667 100644 | |
--- a/erts/emulator/beam/bif.tab | |
+++ b/erts/emulator/beam/bif.tab | |
@@ -324,8 +324,8 @@ ubif erlang:'+'/1 splus_1 | |
# internal references have been updated to the new ebif_... entries. | |
bif erlang:'!'/2 ebif_bang_2 | |
-bif erlang:send/2 | |
-bif erlang:send/3 | |
+bif erts_internal:send/2 | |
+bif erts_internal:send/3 | |
bif erlang:'++'/2 ebif_plusplus_2 | |
bif erlang:append/2 | |
bif erlang:'--'/2 ebif_minusminus_2 | |
diff --git a/erts/emulator/beam/jit/arm/instr_bif.cpp b/erts/emulator/beam/jit/arm/instr_bif.cpp | |
index 66efc4beba..2a506ffa8d 100644 | |
--- a/erts/emulator/beam/jit/arm/instr_bif.cpp | |
+++ b/erts/emulator/beam/jit/arm/instr_bif.cpp | |
@@ -593,8 +593,8 @@ void BeamModuleAssembler::emit_send() { | |
* do it in the loader. */ | |
a.bind(entry); | |
- a.ldr(ARG4, embed_constant(BIF_TRAP_EXPORT(BIF_send_2), disp32K)); | |
- a.ldr(ARG8, embed_constant(send_2, disp32K)); | |
+ a.ldr(ARG4, embed_constant(BIF_TRAP_EXPORT(BIF_erts_internal_send_2), disp32K)); | |
+ a.ldr(ARG8, embed_constant(erts_internal_send_2, disp32K)); | |
a.adr(ARG3, entry); | |
fragment_call(ga->get_call_light_bif_shared()); | |
diff --git a/erts/emulator/beam/jit/x86/instr_bif.cpp b/erts/emulator/beam/jit/x86/instr_bif.cpp | |
index 33e80c6b90..15dfa5f336 100644 | |
--- a/erts/emulator/beam/jit/x86/instr_bif.cpp | |
+++ b/erts/emulator/beam/jit/x86/instr_bif.cpp | |
@@ -648,8 +648,8 @@ void BeamModuleAssembler::emit_send() { | |
align_erlang_cp(); | |
a.bind(entry); | |
- a.mov(ARG4, imm(BIF_TRAP_EXPORT(BIF_send_2))); | |
- a.mov(RET, imm(send_2)); | |
+ a.mov(ARG4, imm(BIF_TRAP_EXPORT(BIF_erts_internal_send_2))); | |
+ a.mov(RET, imm(erts_internal_send_2)); | |
a.lea(ARG3, x86::qword_ptr(entry)); | |
fragment_call(ga->get_call_light_bif_shared()); | |
diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl | |
index b650eb70aa..2afc46cb55 100644 | |
--- a/erts/preloaded/src/erlang.erl | |
+++ b/erts/preloaded/src/erlang.erl | |
@@ -2589,16 +2589,16 @@ process_info(_Pid,_ItemSpec) -> | |
-spec erlang:send(Dest, Msg) -> Msg when | |
Dest :: send_destination(), | |
Msg :: term(). | |
-send(_Dest,_Msg) -> | |
- erlang:nif_error(undefined). | |
+send(Dest, Msg) -> | |
+ erts_internal:send(Dest, Msg). | |
-spec erlang:send(Dest, Msg, Options) -> Res when | |
Dest :: send_destination(), | |
Msg :: term(), | |
Options :: [nosuspend | noconnect], | |
Res :: ok | nosuspend | noconnect. | |
-send(_Dest,_Msg,_Options) -> | |
- erlang:nif_error(undefined). | |
+send(Dest, Msg, Options) -> | |
+ erts_internal:send(Dest, Msg, Options). | |
%% Not documented | |
-spec erlang:seq_trace_info(send) -> {send, boolean()}; | |
diff --git a/erts/preloaded/src/erts_internal.erl b/erts/preloaded/src/erts_internal.erl | |
index 2aa8739388..8cb0c18424 100644 | |
--- a/erts/preloaded/src/erts_internal.erl | |
+++ b/erts/preloaded/src/erts_internal.erl | |
@@ -29,6 +29,8 @@ | |
-module(erts_internal). | |
+-export([send/2, send/3]). | |
+ | |
-export([await_port_send_result/3]). | |
-export([cmp_term/2]). | |
-export([map_to_tuple_keys/1, term_type/1, map_hashmap_children/1, | |
@@ -118,6 +120,26 @@ | |
-export([dynamic_node_name/0, dynamic_node_name/1]). | |
+-type send_destination() :: pid() | |
+ | reference() | |
+ | port() | |
+ | (RegName :: atom()) | |
+ | {RegName :: atom(), Node :: node()}. | |
+ | |
+-spec erts_internal:send(Dest, Msg) -> Msg when | |
+ Dest :: send_destination(), | |
+ Msg :: term(). | |
+send(_Dest, _Msg) -> | |
+ erlang:nif_error(undefined). | |
+ | |
+-spec erts_internal:send(Dest, Msg, Options) -> Res when | |
+ Dest :: send_destination(), | |
+ Msg :: term(), | |
+ Options :: [nosuspend | noconnect], | |
+ Res :: ok | nosuspend | noconnect. | |
+send(_Dest, _Msg, _Options) -> | |
+ erlang:nif_error(undefined). | |
+ | |
%% | |
%% Await result of send to port | |
%% |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment