Skip to content

Commit c1d63e4

Browse files
author
José Valim
committed
Optimize IO.ANSI.format/2 by avoiding remote calls
1 parent 90f83e1 commit c1d63e4

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

lib/elixir/lib/io/ansi.ex

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ defmodule IO.ANSI.Sequence do
1010
defp escape_sequence(unquote(Atom.to_char_list(name))) do
1111
unquote(name)()
1212
end
13+
14+
defp format_sequence(unquote(name)) do
15+
unquote(name)()
16+
end
1317
end
1418
end
1519
end
@@ -134,6 +138,10 @@ defmodule IO.ANSI do
134138
raise ArgumentError, "invalid ANSI sequence specification: #{other}"
135139
end
136140

141+
defp format_sequence(other) do
142+
raise ArgumentError, "invalid ANSI sequence specification: #{other}"
143+
end
144+
137145
@doc ~S"""
138146
Formats a chardata-like argument by converting named ANSI sequences into actual
139147
ANSI codes.
@@ -184,12 +192,7 @@ defmodule IO.ANSI do
184192
end
185193

186194
defp do_format(term, rem, acc, true, append_reset) when is_atom(term) do
187-
try do
188-
do_format([], rem, [acc | [apply(IO.ANSI, term, [])]], true, !!append_reset)
189-
rescue
190-
_ in UndefinedFunctionError ->
191-
raise ArgumentError, message: "invalid ANSI sequence specification: #{term}"
192-
end
195+
do_format([], rem, [acc | format_sequence(term)], true, !!append_reset)
193196
end
194197

195198
defp do_format(term, rem, acc, false, append_reset) when is_atom(term) do

0 commit comments

Comments
 (0)