Skip to content

Commit 598c33d

Browse files
author
José Valim
committed
Fold decomposition recursions at compile time
1 parent 2bfd924 commit 598c33d

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

lib/elixir/unicode/unicode.ex

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -449,8 +449,18 @@ defmodule String.Break do
449449

450450
defp add_buffer_to_acc("", acc), do: acc
451451
defp add_buffer_to_acc(buffer, acc), do: [buffer|acc]
452-
end
453452

453+
# Decompose
454+
455+
def decompose(entries, map) do
456+
for entry <- entries do
457+
case map do
458+
%{^entry => match} -> decompose(match, map)
459+
%{} -> <<entry::utf8>>
460+
end
461+
end
462+
end
463+
end
454464

455465
defmodule String.Normalizer do
456466
@moduledoc false
@@ -516,7 +526,11 @@ defmodule String.Normalizer do
516526
end
517527

518528
for {cp, decomposition} <- decompositions do
519-
decomposition = decomposition |> Enum.map(&<<&1::utf8>>) |> IO.iodata_to_binary()
529+
decomposition =
530+
decomposition
531+
|> String.Break.decompose(decompositions)
532+
|> IO.iodata_to_binary()
533+
520534
defp canonical_order(unquote(<<cp::utf8>>) <> rest, acc) do
521535
canonical_order(unquote(decomposition) <> rest, acc)
522536
end

0 commit comments

Comments
 (0)