diff --git a/core/io/buffers/buffers.factor b/core/io/buffers/buffers.factor index 7bca0678c6..cb897c26d8 100644 --- a/core/io/buffers/buffers.factor +++ b/core/io/buffers/buffers.factor @@ -51,12 +51,11 @@ TUPLE: buffer size ptr fill pos ; : buffer>> ( buffer -- string ) dup (buffer>>) 0 rot buffer-reset ; -: (buffer-until) ( start end alien separators -- n ) +: search-buffer-until ( start end alien separators -- n ) [ >r swap alien-unsigned-1 r> memq? ] 2curry find* drop ; -: buffer-until ( separators buffer -- string separator ) - tuck { buffer-pos buffer-fill buffer-ptr } get-slots roll - (buffer-until) [ +: finish-buffer-until ( buffer n -- string separator ) + [ over buffer-pos - over buffer> swap buffer-pop @@ -64,6 +63,10 @@ TUPLE: buffer size ptr fill pos ; buffer>> f ] if* ; +: buffer-until ( separators buffer -- string separator ) + tuck { buffer-pos buffer-fill buffer-ptr } get-slots roll + search-buffer-until finish-buffer-until ; + : buffer-length ( buffer -- n ) dup buffer-fill swap buffer-pos - ; diff --git a/core/optimizer/known-words/known-words.factor b/core/optimizer/known-words/known-words.factor index 8ca92c05a3..dffe18e630 100755 --- a/core/optimizer/known-words/known-words.factor +++ b/core/optimizer/known-words/known-words.factor @@ -149,4 +149,4 @@ float-arrays combinators.private ; \ >be { { fixnum bignum } fixnum } "specializer" set-word-prop -\ (buffer-until) { fixnum fixnum simple-alien string } "specializer" set-word-prop +\ search-buffer-until { fixnum fixnum simple-alien string } "specializer" set-word-prop