io:read: don't resize output buffer if unnecessary

Even with a short-circuit test in the VM primitives, resize still has an overly high runtime cost in tight loops. For #376.
db4
Joe Groff 2011-11-09 14:29:12 -08:00
parent bab801b321
commit f31fb8a968
1 changed files with 5 additions and 1 deletions

View File

@ -119,9 +119,13 @@ SYMBOL: error-stream
: (new-sequence-for-stream) ( n stream -- seq )
stream-exemplar new-sequence ; inline
: resize-if-necessary ( wanted-n got-n seq -- seq' )
2over = [ [ 2drop ] dip ] [ resize nip ] if ; inline
: (read-into-new) ( n stream quot -- seq/f )
[ dup ] 2dip
[ 2dup (new-sequence-for-stream) swap ] dip curry keep
over 0 = [ 2drop f ] [ resize ] if ; inline
over 0 = [ 3drop f ] [ resize-if-necessary ] if ; inline
: (read-into) ( buf stream quot -- buf-slice/f )
[ dup length over ] 2dip call