Skip to content

Commit 8e53a61

Browse files
committed
Expose getting process dictionary value for specific key in Process.info/2
This functionality is present since OTP 26.2: erlang/otp#7707
1 parent 6863a51 commit 8e53a61

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

lib/elixir/lib/process.ex

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -826,6 +826,9 @@ defmodule Process do
826826
@spec flag(pid, :save_calls, 0..10000) :: 0..10000
827827
defdelegate flag(pid, flag, value), to: :erlang, as: :process_flag
828828

829+
@type process_info_item :: atom | {:dictionary, term}
830+
@type process_info_result_item :: {process_info_item, term}
831+
829832
@doc """
830833
Returns information about the process identified by `pid`, or returns `nil` if the process
831834
is not alive.
@@ -834,7 +837,7 @@ defmodule Process do
834837
835838
See `:erlang.process_info/1` for more information.
836839
"""
837-
@spec info(pid) :: keyword | nil
840+
@spec info(pid) :: [process_info_result_item] | nil
838841
def info(pid) do
839842
nilify(:erlang.process_info(pid))
840843
end
@@ -845,7 +848,8 @@ defmodule Process do
845848
846849
See `:erlang.process_info/2` for more information.
847850
"""
848-
@spec info(pid, atom | [atom]) :: {atom, term} | [{atom, term}] | nil
851+
@spec info(pid, process_info_item | [process_info_item]) ::
852+
process_info_result_item | [process_info_result_item] | nil
849853
def info(pid, spec)
850854

851855
def info(pid, :registered_name) do
@@ -856,6 +860,10 @@ defmodule Process do
856860
end
857861
end
858862

863+
def info(pid, {:dictionary, key}) do
864+
nilify(:erlang.process_info(pid, {:dictionary, key}))
865+
end
866+
859867
def info(pid, spec) when is_atom(spec) or is_list(spec) do
860868
nilify(:erlang.process_info(pid, spec))
861869
end

0 commit comments

Comments
 (0)