Skip to content

Commit 34004a2

Browse files
committed
Preserve gradual mode on tuple and map operations
1 parent 09fc63d commit 34004a2

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

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

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -358,37 +358,37 @@ defmodule Module.Types.Apply do
358358
end
359359
end
360360

361-
defp remote_apply(:erlang, :hd, _info, [list], _stack) do
361+
defp remote_apply(:erlang, :hd, _info, [list], stack) do
362362
case list_hd(list) do
363-
{:ok, value_type} -> {:ok, value_type}
363+
{:ok, value_type} -> {:ok, return(value_type, [list], stack)}
364364
:badnonemptylist -> {:error, badremote(:erlang, :hd, 1)}
365365
end
366366
end
367367

368-
defp remote_apply(:erlang, :tl, _info, [list], _stack) do
368+
defp remote_apply(:erlang, :tl, _info, [list], stack) do
369369
case list_tl(list) do
370-
{:ok, value_type} -> {:ok, value_type}
370+
{:ok, value_type} -> {:ok, return(value_type, [list], stack)}
371371
:badnonemptylist -> {:error, badremote(:erlang, :tl, 1)}
372372
end
373373
end
374374

375-
defp remote_apply(:maps, :keys, _info, [map], _stack) do
375+
defp remote_apply(:maps, :keys, _info, [map], stack) do
376376
case map_to_list(map, fn key, _value -> key end) do
377-
{:ok, list_type} -> {:ok, list_type}
377+
{:ok, list_type} -> {:ok, return(list_type, [map], stack)}
378378
:badmap -> {:error, badremote(:maps, :keys, 1)}
379379
end
380380
end
381381

382-
defp remote_apply(:maps, :values, _info, [map], _stack) do
382+
defp remote_apply(:maps, :values, _info, [map], stack) do
383383
case map_to_list(map, fn _key, value -> value end) do
384-
{:ok, list_type} -> {:ok, list_type}
384+
{:ok, list_type} -> {:ok, return(list_type, [map], stack)}
385385
:badmap -> {:error, badremote(:maps, :keys, 1)}
386386
end
387387
end
388388

389-
defp remote_apply(:maps, :to_list, _info, [map], _stack) do
389+
defp remote_apply(:maps, :to_list, _info, [map], stack) do
390390
case map_to_list(map) do
391-
{:ok, list_type} -> {:ok, list_type}
391+
{:ok, list_type} -> {:ok, return(list_type, [map], stack)}
392392
:badmap -> {:error, badremote(:maps, :to_list, 1)}
393393
end
394394
end
@@ -415,32 +415,32 @@ defmodule Module.Types.Apply do
415415
end
416416
end
417417

418-
defp remote_apply({:element, index}, [_index, tuple], _stack) do
418+
defp remote_apply({:element, index}, [_, tuple] = args_types, stack) do
419419
case tuple_fetch(tuple, index - 1) do
420-
{_optional?, value_type} -> {:ok, value_type}
420+
{_optional?, value_type} -> {:ok, return(value_type, args_types, stack)}
421421
:badtuple -> {:error, badremote(:erlang, :element, 2)}
422422
:badindex -> {:error, {:badindex, index, tuple}}
423423
end
424424
end
425425

426-
defp remote_apply({:insert_element, index}, [_index, tuple, value], _stack) do
426+
defp remote_apply({:insert_element, index}, [_, tuple, value] = args_types, stack) do
427427
case tuple_insert_at(tuple, index - 1, value) do
428-
value_type when is_descr(value_type) -> {:ok, value_type}
428+
value_type when is_descr(value_type) -> {:ok, return(value_type, args_types, stack)}
429429
:badtuple -> {:error, badremote(:erlang, :insert_element, 3)}
430430
:badindex -> {:error, {:badindex, index - 1, tuple}}
431431
end
432432
end
433433

434-
defp remote_apply({:delete_element, index}, [_index, tuple], _stack) do
434+
defp remote_apply({:delete_element, index}, [_, tuple] = args_types, stack) do
435435
case tuple_delete_at(tuple, index - 1) do
436-
value_type when is_descr(value_type) -> {:ok, value_type}
436+
value_type when is_descr(value_type) -> {:ok, return(value_type, args_types, stack)}
437437
:badtuple -> {:error, badremote(:erlang, :delete_element, 2)}
438438
:badindex -> {:error, {:badindex, index, tuple}}
439439
end
440440
end
441441

442-
defp remote_apply({:make_tuple, size}, [_size, elem], _stack) do
443-
{:ok, tuple(List.duplicate(elem, size))}
442+
defp remote_apply({:make_tuple, size}, [_, elem] = args_types, stack) do
443+
{:ok, return(tuple(List.duplicate(elem, size)), args_types, stack)}
444444
end
445445

446446
defp remote_apply({:ordered_compare, name, check?}, [left, right], stack) do

0 commit comments

Comments
 (0)