Skip to content

Commit f92d839

Browse files
author
José Valim
committed
(Soft) deprecate set_elem/3 in favor of put_elem/3, closes #2259
1 parent cb0c3d8 commit f92d839

File tree

7 files changed

+41
-35
lines changed

7 files changed

+41
-35
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
* [Kernel] `Application.Behaviour`, `GenEvent.Behaviour`, `GenServer.Behaviour` and `Supervisor.Behaviour` are deprecated in favor of `Application`, `GenEvent`, `GenServer` and `Supervisor`
1616
* [Kernel] `defexception/3` is deprecated in favor of `defexception/1`
1717
* [Kernel] `raise/3` is deprecated in favor of `reraise/2`
18+
* [Kernel] `set_elem/3` is deprecated in favor of `put_elem/3`
1819

1920
* Soft deprecations for conversions (no warnings emitted)
2021
* [Kernel] `atom_to_binary/1` and `atom_to_list/1` are deprecated in favor of `Atom.to_string/1` and `Atom.to_char_list/1`

lib/elixir/lib/hash_dict.ex

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -129,35 +129,35 @@ defmodule HashDict do
129129
index = key_mask(hash)
130130
case elem(node, index) do
131131
[] ->
132-
{set_elem(node, index, [key|value]), 1}
132+
{put_elem(node, index, [key|value]), 1}
133133
[^key|_] ->
134-
{set_elem(node, index, [key|value]), 0}
134+
{put_elem(node, index, [key|value]), 0}
135135
[k|v] ->
136-
n = set_elem(@node_template, key_mask(key_shift(hash)), [key|value])
137-
{set_elem(node, index, {k, v, n}), 1}
136+
n = put_elem(@node_template, key_mask(key_shift(hash)), [key|value])
137+
{put_elem(node, index, {k, v, n}), 1}
138138
{^key, _, n} ->
139-
{set_elem(node, index, {key, value, n}), 0}
139+
{put_elem(node, index, {key, value, n}), 0}
140140
{k, v, n} ->
141141
{n, counter} = do_put(n, key, value, key_shift(hash))
142-
{set_elem(node, index, {k, v, n}), counter}
142+
{put_elem(node, index, {k, v, n}), counter}
143143
end
144144
end
145145

146146
defp do_update(node, key, initial, fun, hash) do
147147
index = key_mask(hash)
148148
case elem(node, index) do
149149
[] ->
150-
{set_elem(node, index, [key|initial.()]), 1}
150+
{put_elem(node, index, [key|initial.()]), 1}
151151
[^key|value] ->
152-
{set_elem(node, index, [key|fun.(value)]), 0}
152+
{put_elem(node, index, [key|fun.(value)]), 0}
153153
[k|v] ->
154-
n = set_elem(@node_template, key_mask(key_shift(hash)), [key|initial.()])
155-
{set_elem(node, index, {k, v, n}), 1}
154+
n = put_elem(@node_template, key_mask(key_shift(hash)), [key|initial.()])
155+
{put_elem(node, index, {k, v, n}), 1}
156156
{^key, value, n} ->
157-
{set_elem(node, index, {key, fun.(value), n}), 0}
157+
{put_elem(node, index, {key, fun.(value), n}), 0}
158158
{k, v, n} ->
159159
{n, counter} = do_update(n, key, initial, fun, key_shift(hash))
160-
{set_elem(node, index, {k, v, n}), counter}
160+
{put_elem(node, index, {k, v, n}), counter}
161161
end
162162
end
163163

@@ -167,17 +167,17 @@ defmodule HashDict do
167167
[] ->
168168
:error
169169
[^key|value] ->
170-
{set_elem(node, index, []), value}
170+
{put_elem(node, index, []), value}
171171
[_|_] ->
172172
:error
173173
{^key, value, n} ->
174-
{set_elem(node, index, do_compact_node(n)), value}
174+
{put_elem(node, index, do_compact_node(n)), value}
175175
{k, v, n} ->
176176
case do_delete(n, key, key_shift(hash)) do
177177
{@node_template, value} ->
178-
{set_elem(node, index, [k|v]), value}
178+
{put_elem(node, index, [k|v]), value}
179179
{n, value} ->
180-
{set_elem(node, index, {k, v, n}), value}
180+
{put_elem(node, index, {k, v, n}), value}
181181
:error ->
182182
:error
183183
end
@@ -188,12 +188,12 @@ defmodule HashDict do
188188
defp do_compact_node(node) when elem(node, unquote(index)) != [] do
189189
case elem(node, unquote(index)) do
190190
[k|v] ->
191-
case set_elem(node, unquote(index), []) do
191+
case put_elem(node, unquote(index), []) do
192192
@node_template -> [k|v]
193193
n -> {k, v, n}
194194
end
195195
{k, v, n} ->
196-
{k, v, set_elem(node, unquote(index), do_compact_node(n))}
196+
{k, v, put_elem(node, unquote(index), do_compact_node(n))}
197197
end
198198
end
199199
end

lib/elixir/lib/hash_set.ex

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -134,15 +134,15 @@ defmodule HashSet do
134134
index = key_mask(hash)
135135
case elem(node, index) do
136136
[] ->
137-
{set_elem(node, index, [term]), 1}
137+
{put_elem(node, index, [term]), 1}
138138
[^term|_] ->
139139
{node, 0}
140140
[t] ->
141-
n = set_elem(@node_template, key_mask(key_shift(hash)), [term])
142-
{set_elem(node, index, [t|n]), 1}
141+
n = put_elem(@node_template, key_mask(key_shift(hash)), [term])
142+
{put_elem(node, index, [t|n]), 1}
143143
[t|n] ->
144144
{n, counter} = do_put(n, term, key_shift(hash))
145-
{set_elem(node, index, [t|n]), counter}
145+
{put_elem(node, index, [t|n]), counter}
146146
end
147147
end
148148

@@ -152,17 +152,17 @@ defmodule HashSet do
152152
[] ->
153153
:error
154154
[^term] ->
155-
{:ok, set_elem(node, index, [])}
155+
{:ok, put_elem(node, index, [])}
156156
[_] ->
157157
:error
158158
[^term|n] ->
159-
{:ok, set_elem(node, index, do_compact_node(n))}
159+
{:ok, put_elem(node, index, do_compact_node(n))}
160160
[t|n] ->
161161
case do_delete(n, term, key_shift(hash)) do
162162
{:ok, @node_template} ->
163-
{:ok, set_elem(node, index, [t])}
163+
{:ok, put_elem(node, index, [t])}
164164
{:ok, n} ->
165-
{:ok, set_elem(node, index, [t|n])}
165+
{:ok, put_elem(node, index, [t|n])}
166166
:error ->
167167
:error
168168
end
@@ -173,12 +173,12 @@ defmodule HashSet do
173173
defp do_compact_node(node) when elem(node, unquote(index)) != [] do
174174
case elem(node, unquote(index)) do
175175
[t] ->
176-
case set_elem(node, unquote(index), []) do
176+
case put_elem(node, unquote(index), []) do
177177
@node_template -> [t]
178178
n -> [t|n]
179179
end
180180
[t|n] ->
181-
[t|set_elem(node, unquote(index), do_compact_node(n))]
181+
[t|put_elem(node, unquote(index), do_compact_node(n))]
182182
end
183183
end
184184
end

lib/elixir/lib/kernel.ex

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,11 @@ defmodule Kernel do
220220
:erlang.tuple_to_list(tuple)
221221
end
222222

223+
@doc false
224+
def set_elem(tuple, index, value) do
225+
:erlang.setelement(index + 1, tuple, value)
226+
end
227+
223228
## END OF DEPRECATED
224229

225230
@doc """
@@ -1211,12 +1216,12 @@ defmodule Kernel do
12111216
## Example
12121217
12131218
iex> tuple = {:foo, :bar, 3}
1214-
iex> set_elem(tuple, 0, :baz)
1219+
iex> put_elem(tuple, 0, :baz)
12151220
{:baz, :bar, 3}
12161221
12171222
"""
1218-
@spec set_elem(tuple, non_neg_integer, term) :: tuple
1219-
def set_elem(tuple, index, value) do
1223+
@spec put_elem(tuple, non_neg_integer, term) :: tuple
1224+
def put_elem(tuple, index, value) do
12201225
:erlang.setelement(index + 1, tuple, value)
12211226
end
12221227

lib/elixir/lib/kernel/special_forms.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ defmodule Kernel.SpecialForms do
2929
Conveniences for manipulating tuples can be found in the
3030
`Tuple` module. Some functions for working with tuples are
3131
also available in `Kernel`, namely `Kernel.elem/2`,
32-
`Kernel.set_elem/3` and `Kernel.tuple_size/1`.
32+
`Kernel.put_elem/3` and `Kernel.tuple_size/1`.
3333
3434
## Examples
3535

lib/elixir/src/elixir_dispatch.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ rewrite(?atom, to_string, [Arg], _) ->
341341
{ok, erlang, atom_to_binary, [Arg, utf8]};
342342
rewrite(?kernel, elem, [Tuple, Index], _) ->
343343
{ok, erlang, element, [increment(Index), Tuple]};
344-
rewrite(?kernel, set_elem, [Tuple, Index, Value], _) ->
344+
rewrite(?kernel, put_elem, [Tuple, Index, Value], _) ->
345345
{ok, erlang, setelement, [increment(Index), Tuple, Value]};
346346
rewrite(?map, 'has_key?', [Map, Key], _) ->
347347
{ok, maps, is_key, [Key, Map]};

lib/elixir/test/elixir/tuple_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ defmodule TupleTest do
77
assert elem({:a, :b, :c}, 1) == :b
88
end
99

10-
test :set_elem do
11-
assert set_elem({:a, :b, :c}, 1, :d) == {:a, :d, :c}
10+
test :put_elem do
11+
assert put_elem({:a, :b, :c}, 1, :d) == {:a, :d, :c}
1212
end
1313

1414
test :keywords do

0 commit comments

Comments
 (0)