Skip to content

Commit 62d3e61

Browse files
committed
Improvements to Descr.map_update to support put operations
1 parent de32dff commit 62d3e61

File tree

4 files changed

+336
-204
lines changed

4 files changed

+336
-204
lines changed

lib/elixir/lib/module/types/apply.ex

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -455,27 +455,22 @@ defmodule Module.Types.Apply do
455455

456456
defp remote_apply(:maps, :get, _info, [key, map] = args_types, stack) do
457457
case map_get(map, key) do
458-
{_, value} ->
459-
{:ok, return(value, args_types, stack)}
460-
461-
:badmap ->
462-
{:error, badremote(:maps, :get, 2)}
463-
464-
:error ->
465-
{:error, {:badkeydomain, map, key, nil}}
458+
{:ok, value} -> {:ok, return(value, args_types, stack)}
459+
:badmap -> {:error, badremote(:maps, :get, 2)}
460+
:error -> {:error, {:badkeydomain, map, key, nil}}
466461
end
467462
end
468463

469464
defp remote_apply(:maps, :update, _info, [key, value, map] = args_types, stack) do
470-
case map_update(map, key, value, false) do
465+
case map_update(map, key, value, false, false) do
471466
{_value, descr, _errors} -> {:ok, return(descr, args_types, stack)}
472467
:badmap -> {:error, badremote(:maps, :update, 3)}
473468
{:error, _errors} -> {:error, {:badkeydomain, map, key, nil}}
474469
end
475470
end
476471

477472
defp remote_apply(:maps, :take, _info, [key, map] = args_types, stack) do
478-
case map_update(map, key, not_set()) do
473+
case map_update(map, key, not_set(), true, false) do
479474
# We could suggest to use :maps.delete if the key always exists
480475
# but :maps.take/2 means calling Erlang directly, so we are fine.
481476
{value, descr, errors} ->

0 commit comments

Comments
 (0)