Skip to content

Commit b535f07

Browse files
author
José Valim
committed
No need for accumulator on downcase/upcase
1 parent 4b795a0 commit b535f07

File tree

2 files changed

+16
-20
lines changed

2 files changed

+16
-20
lines changed

lib/elixir/lib/string.ex

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -208,9 +208,7 @@ defmodule String do
208208
209209
"""
210210
@spec upcase(t) :: t
211-
def upcase(binary) do
212-
String.Unicode.upcase(binary, [])
213-
end
211+
defdelegate upcase(binary), to: String.Unicode
214212

215213
@doc """
216214
Convert all characters on the given string to downcase.
@@ -226,9 +224,7 @@ defmodule String do
226224
227225
"""
228226
@spec downcase(t) :: t
229-
def downcase(binary) do
230-
String.Unicode.downcase(binary, [])
231-
end
227+
defdelegate downcase(binary), to: String.Unicode
232228

233229
@doc """
234230
Converts the first character in the given string to

lib/elixir/priv/unicode.ex

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -57,35 +57,35 @@ defmodule String.Unicode do
5757

5858
# Downcase
5959

60-
lc { codepoint, _upper, lower, _title } inlist codes, lower && lower != codepoint do
61-
l = binary_to_list(lower) |> :lists.reverse
60+
def downcase(string), do: do_downcase(string) |> list_to_binary
6261

63-
def downcase(unquote(codepoint) <> rest, acc) do
64-
downcase(rest, unquote(l) ++ acc)
62+
lc { codepoint, _upper, lower, _title } inlist codes, lower && lower != codepoint do
63+
defp do_downcase(unquote(codepoint) <> rest) do
64+
unquote(binary_to_list(lower)) ++ downcase(rest)
6565
end
6666
end
6767

68-
def downcase(<< char, rest :: binary >>, acc) do
69-
downcase(rest, [char|acc])
68+
defp do_downcase(<< char, rest :: binary >>) do
69+
[char|do_downcase(rest)]
7070
end
7171

72-
def downcase("", acc), do: acc |> :lists.reverse |> list_to_binary
72+
defp do_downcase(""), do: []
7373

7474
# Upcase
7575

76-
lc { codepoint, upper, _lower, _title } inlist codes, upper && upper != codepoint do
77-
u = binary_to_list(upper) |> :lists.reverse
76+
def upcase(string), do: do_upcase(string) |> list_to_binary
7877

79-
def upcase(unquote(codepoint) <> rest, acc) do
80-
upcase(rest, unquote(u) ++ acc)
78+
lc { codepoint, upper, _lower, _title } inlist codes, upper && upper != codepoint do
79+
defp do_upcase(unquote(codepoint) <> rest) do
80+
unquote(binary_to_list(upper)) ++ do_upcase(rest)
8181
end
8282
end
8383

84-
def upcase(<< char, rest :: binary >>, acc) do
85-
upcase(rest, [char|acc])
84+
defp do_upcase(<< char, rest :: binary >>) do
85+
[char|do_upcase(rest)]
8686
end
8787

88-
def upcase("", acc), do: acc |> :lists.reverse |> list_to_binary
88+
defp do_upcase(""), do: []
8989

9090
# Titlecase once
9191

0 commit comments

Comments
 (0)