Skip to content

Commit 0baf25d

Browse files
committed
Inline `decode_name/1 in all three compile-time blocks
Unroll validate16XXX for 8/4/2 bytes Fast-path remove_ignored/2
1 parent 39d646f commit 0baf25d

1 file changed

Lines changed: 27 additions & 1 deletion

File tree

lib/elixir/lib/base.ex

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,10 @@ defmodule Base do
152152
defp remove_ignored(string, nil), do: string
153153

154154
defp remove_ignored(string, :whitespace) do
155-
for <<char::8 <- string>>, char not in ~c"\s\t\r\n", into: <<>>, do: <<char::8>>
155+
case :binary.match(string, [<<?\s>>, <<?\t>>, <<?\r>>, <<?\n>>]) do
156+
:nomatch -> string
157+
_ -> for <<char::8 <- string>>, char not in ~c"\s\t\r\n", into: <<>>, do: <<char::8>>
158+
end
156159
end
157160

158161
@doc """
@@ -376,6 +379,26 @@ defmodule Base do
376379

377380
defp unquote(validate_name)(<<>>), do: true
378381

382+
defp unquote(validate_name)(<<c1, c2, c3, c4, c5, c6, c7, c8, rest::binary>>) do
383+
unquote(valid_char_name)(c1) and
384+
unquote(valid_char_name)(c2) and
385+
unquote(valid_char_name)(c3) and
386+
unquote(valid_char_name)(c4) and
387+
unquote(valid_char_name)(c5) and
388+
unquote(valid_char_name)(c6) and
389+
unquote(valid_char_name)(c7) and
390+
unquote(valid_char_name)(c8) and
391+
unquote(validate_name)(rest)
392+
end
393+
394+
defp unquote(validate_name)(<<c1, c2, c3, c4, rest::binary>>) do
395+
unquote(valid_char_name)(c1) and
396+
unquote(valid_char_name)(c2) and
397+
unquote(valid_char_name)(c3) and
398+
unquote(valid_char_name)(c4) and
399+
unquote(validate_name)(rest)
400+
end
401+
379402
defp unquote(validate_name)(<<c1, c2, rest::binary>>) do
380403
unquote(valid_char_name)(c1) and
381404
unquote(valid_char_name)(c2) and
@@ -391,6 +414,7 @@ defmodule Base do
391414

392415
defp unquote(valid_char_name)(_char), do: false
393416

417+
@compile {:inline, [{decode_name, 1}]}
394418
defp unquote(decode_name)(char) do
395419
index = char - unquote(min)
396420

@@ -870,6 +894,7 @@ defmodule Base do
870894

871895
defp unquote(valid_char_name)(_char), do: false
872896

897+
@compile {:inline, [{decode_name, 1}]}
873898
defp unquote(decode_name)(char) do
874899
index = char - unquote(min)
875900

@@ -1526,6 +1551,7 @@ defmodule Base do
15261551

15271552
defp unquote(valid_char_name)(_char), do: false
15281553

1554+
@compile {:inline, [{decode_name, 1}]}
15291555
defp unquote(decode_name)(char) do
15301556
index = char - unquote(min)
15311557

0 commit comments

Comments
 (0)