@@ -25,6 +25,12 @@ defmodule IO do
25
25
26
26
import :erlang , only: [ group_leader: 0 ]
27
27
28
+ defmacrop is_iolist ( data ) do
29
+ quote do
30
+ is_list ( unquote ( data ) ) or is_binary ( unquote ( data ) )
31
+ end
32
+ end
33
+
28
34
@ doc """
29
35
Reads `count` characters from the IO device or until
30
36
the end of the line if `:line` is given. It returns:
@@ -92,8 +98,8 @@ defmodule IO do
92
98
#=> "error"
93
99
94
100
"""
95
- def write ( device // group_leader ( ) , item ) do
96
- :io . put_chars map_dev ( device ) , to_iodata ( item )
101
+ def write ( device // group_leader ( ) , item ) when is_iolist ( item ) do
102
+ :io . put_chars map_dev ( device ) , item
97
103
end
98
104
99
105
@ doc """
@@ -102,18 +108,18 @@ defmodule IO do
102
108
103
109
Check `write/2` for more information.
104
110
"""
105
- def binwrite ( device // group_leader ( ) , item ) do
106
- :file . write map_dev ( device ) , to_iodata ( item )
111
+ def binwrite ( device // group_leader ( ) , item ) when is_iolist ( item ) do
112
+ :file . write map_dev ( device ) , item
107
113
end
108
114
109
115
@ doc """
110
116
Writes the argument to the device, similar to `write/2`,
111
117
but adds a newline at the end. The argument is expected
112
118
to be a chardata.
113
119
"""
114
- def puts ( device // group_leader ( ) , item ) do
120
+ def puts ( device // group_leader ( ) , item ) when is_iolist ( item ) do
115
121
erl_dev = map_dev ( device )
116
- :io . put_chars erl_dev , [ to_iodata ( item ) , ?\n ]
122
+ :io . put_chars erl_dev , [ item , ?\n ]
117
123
end
118
124
119
125
@ doc """
@@ -182,7 +188,7 @@ defmodule IO do
182
188
Otherwise, `count` is the number of raw bytes to be retrieved.
183
189
"""
184
190
def getn ( device , prompt , count ) do
185
- :io . get_chars ( map_dev ( device ) , to_iodata ( prompt ) , count )
191
+ :io . get_chars ( map_dev ( device ) , prompt , count )
186
192
end
187
193
188
194
@ doc """
@@ -198,7 +204,7 @@ defmodule IO do
198
204
NFS file system.
199
205
"""
200
206
def gets ( device // group_leader ( ) , prompt ) do
201
- :io . get_line ( map_dev ( device ) , to_iodata ( prompt ) )
207
+ :io . get_line ( map_dev ( device ) , prompt )
202
208
end
203
209
204
210
@ doc """
@@ -271,7 +277,4 @@ defmodule IO do
271
277
defp map_dev ( :stdio ) , do: :standard_io
272
278
defp map_dev ( :stderr ) , do: :standard_error
273
279
defp map_dev ( other ) , do: other
274
-
275
- defp to_iodata ( io ) when is_list ( io ) or is_binary ( io ) , do: io
276
- defp to_iodata ( other ) , do: to_string ( other )
277
280
end
0 commit comments