Relevant to Pharo? >From http://forum.world.st/ByteArray-at-put-tp4955848.html :
Bert Freudenberg wrote > On 26 April 2018 at 11:28, marcel.taeumel < > Marcel.Taeumel@ > > wrote: > >> Hi, there. >> >> I cannot put a ByteString into a ByteArray via a WriteStream anymore: >> >> | s | >> s := WriteStream on: ByteArray new. >> s nextPutAll: 'hello'. >> >> You need to do: >> >> | s | >> s := WriteStream on: ByteArray new. >> s nextPutAll: 'hello' asByteArray. >> >> This breaks code. >> >> Best, >> Marcel >> > > Technically this is an expected error - you simply cannot put Characters > (the elements of a String) into a ByteArray. However, for convenience we > do > support copying Strings into ByteArrays in various places, including > WriteStream>>nextPutAll:. > > However, the test in WriteStream>>nextPutAll: is too strict. It needs to > be > "collection class isBits" instead of "collection isString". This makes the > code actually match its comment: > > WriteStream>>nextPutAll: aCollection > > | newEnd | > (collection class == aCollection class > or: [ collection class isBits > and: [ aCollection isString > and: [ collection class format = aCollection class format ] ] ]) "Let > Strings with the same field size as collection take the quick route too." > ifFalse: [ ^ super nextPutAll: aCollection ]. > > newEnd := position + aCollection size. > newEnd > writeLimit ifTrue: > [self growTo: newEnd + 10]. > > collection replaceFrom: position+1 to: newEnd with: aCollection > startingAt: 1. > position := newEnd. > ^aCollection > > With that change your example works. I think this was the original intent > of the code. > > Fixed in Collections-bf.787 > > - Bert - ----- Cheers, Sean -- Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
