diff -r ebf8bfd3e5ba -r 64a11f77e263 Stream.st --- a/Stream.st Thu Sep 26 20:58:54 2019 +0200 +++ b/Stream.st Sat Sep 28 14:52:23 2019 +0200 @@ -3448,6 +3448,24 @@ " |s| + s := '12345678901234567890' readStream. + s readLimit:5. + s upTo:$3. + self assert:(s position = 3). + s upTo:$x. + self assert:(s position = 5). + self assert:(s atEnd). + " + " + |s| + s := '12345678901234567890' readStream. + s upTo:$x. + self assert:(s position = 20). + self assert:(s atEnd). + " + + " + |s| s := ReadStream on:#(1 2 3 4 5 6 7 8). Transcript showCR:(s upTo:4). Transcript showCR:s next @@ -3484,6 +3502,7 @@ "Modified: / 12-01-1998 / 21:58:38 / cg" "Modified: / 10-01-2018 / 18:30:36 / stefan" + "Modified (comment): / 24-09-2019 / 14:35:36 / Stefan Vogel" ! upTo:anObject into:aStream @@ -3498,13 +3517,21 @@ |element| - [ - element := self nextOrNil. - ((element isNil and:[self atEnd]) or:[element = anObject]) ifTrue:[ - ^ self + anObject isImmediate ifTrue:[ + "speed uo for anObject being an Integer or a Character <= 255 + - identity compare is inlined and a lot faster" + [((element := aStream nextOrNil) notNil or:[self atEnd]) + and:[element ~~ anObject]] whileTrue:[ + aStream nextPut:element. ]. - aStream nextPut:element. - ] loop. + ] ifFalse:[ + [((element := aStream nextOrNil) notNil or:[self atEnd]) + and:[element ~= anObject]] whileTrue:[ + aStream nextPut:element. + ]. + ]. + + "Modified (format): / 24-09-2019 / 14:35:01 / Stefan Vogel" ! upToAllExcluding:aCollection