@@ -154,16 +154,8 @@ function splitkwargs(kwargs, keys)
154154end
155155@specialize
156156
157- # Check that mode is valid.
158- macro checkmode (validmodes)
159- mode = esc (:mode )
160- validmodes = Any[arg for arg in validmodes. args]
161- quote
162- if ! $ (foldr ((x, y) -> :($ (mode) === $ x || $ (y)), validmodes, init= false ))
163- throw (ArgumentError (string (" invalid mode :" , $ (mode))))
164- end
165- end
166- end
157+ # throw ArgumentError that mode is invalid.
158+ throw_invalid_mode (mode) = throw (ArgumentError (string (" invalid mode :" , mode)))
167159
168160
169161# Base IO Functions
@@ -291,13 +283,14 @@ codec may change the length of data.
291283"""
292284function Base. position (stream:: TranscodingStream )
293285 mode = stream. state. mode
294- @checkmode (:idle , :read , :write )
295286 if mode === :idle
296287 return Int64 (0 )
297288 elseif mode === :read
298289 return stats (stream). out
299290 elseif mode === :write
300291 return stats (stream). in
292+ else
293+ throw_invalid_mode (mode)
301294 end
302295 @assert false " unreachable"
303296end
@@ -308,23 +301,27 @@ end
308301
309302function Base. seekstart (stream:: TranscodingStream )
310303 mode = stream. state. mode
311- @checkmode (:idle , :read )
312- if mode == :read
304+ if mode === :read
313305 callstartproc (stream, mode)
314306 emptybuffer! (stream. buffer1)
315307 emptybuffer! (stream. buffer2)
308+ elseif mode === :idle
309+ else
310+ throw_invalid_mode (mode)
316311 end
317312 seekstart (stream. stream)
318313 return stream
319314end
320315
321316function Base. seekend (stream:: TranscodingStream )
322317 mode = stream. state. mode
323- @checkmode (:idle , :read )
324318 if mode == :read
325319 callstartproc (stream, mode)
326320 emptybuffer! (stream. buffer1)
327321 emptybuffer! (stream. buffer2)
322+ elseif mode === :idle
323+ else
324+ throw_invalid_mode (mode)
328325 end
329326 seekend (stream. stream)
330327 return stream
@@ -578,23 +575,22 @@ Create an I/O statistics object of `stream`.
578575function stats (stream:: TranscodingStream )
579576 state = stream. state
580577 mode = state. mode
581- @checkmode (:idle , :read , :write )
582578 buffer1 = stream. buffer1
583579 buffer2 = stream. buffer2
584- if mode == :idle
580+ if mode === :idle
585581 transcoded_in = transcoded_out = in = out = 0
586- elseif mode == :read
582+ elseif mode === :read
587583 transcoded_in = buffer2. transcoded
588584 transcoded_out = buffer1. transcoded
589585 in = transcoded_in + buffersize (buffer2)
590586 out = transcoded_out - buffersize (buffer1)
591- elseif mode == :write
587+ elseif mode === :write
592588 transcoded_in = buffer1. transcoded
593589 transcoded_out = buffer2. transcoded
594590 in = transcoded_in + buffersize (buffer1)
595591 out = transcoded_out - buffersize (buffer2)
596592 else
597- @assert false " unreachable "
593+ throw_invalid_mode (mode)
598594 end
599595 return Stats (in, out, transcoded_in, transcoded_out)
600596end
0 commit comments