[squeak-dev] replaceFrom:to:with:startingAt:

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Tue Sep 23 19:51:36 UTC 2014


2014-09-23 21:20 GMT+02:00 Nicolas Cellier <
nicolas.cellier.aka.nice at gmail.com>:

>
>
> 2014-09-22 23:16 GMT+02:00 Bert Freudenberg <bert at freudenbergs.de>:
>
>>
>> On 22.09.2014, at 22:47, Nicolas Cellier <
>> nicolas.cellier.aka.nice at gmail.com> wrote:
>>
>>
>>
>> 2014-09-22 22:34 GMT+02:00 Bert Freudenberg <bert at freudenbergs.de>:
>>
>>>
>>> On 22.09.2014, at 22:21, Ron Teitelbaum <ron at usmedrec.com> wrote:
>>>
>>> >
>>> >> From: Bert Freudenberg
>>> >> Sent: Monday, September 22, 2014 4:00 PM
>>> >>
>>> >> I just found out why PNG decoding was broken in SqueakJS [*]. Wouldn't
>>> >> have believed that any code actually relied on the following behavior:
>>> >>
>>> >>      | a |
>>> >>      a := (1 to: 20) asArray.
>>> >>      a replaceFrom: 11 to: 20 with: a startingAt: 8.
>>> >>
>>> >>      ==> #(1 2 3 4 5 6 7 8 9 10 8 9 10 8 9 10 8 9 10 8)
>>> >>
>>> > That's funky!  Hope it wasn't my code!  Seems wrong to not copy the
>>> array
>>> > before modifying it  (Like your buggy VM did).
>>>
>>> It's not a copy. It moved the numbers 8-17 to index 11. Which is what I
>>> erroneously had assumed to be the desired behavior.
>>>
>>> - Bert -
>>>
>>>
>> It's a known problem.
>> The primitive should use memmove rather than memcpy.
>> So the solution is quite simple, it's just that it's waiting for a good
>> soul to integrate it.
>>
>>
>> What I'm saying is that there is code which will actually fail in subtle
>> ways if we change that behavior. The LZW decode *relies* on this. If we
>> change the primitive it would fail.
>>
>>
> Ah, oh !
> I missread your post!
> Relying on an undefined behavior is not a clever thing...
> OK, since we never changed the implementation, it's a stable behavior...
> but it is for sure unspecified.
> There is no limit to the hackish nature of some Squeak code, really...
> Hang it in the hall of shame.
>
>
Is it decompressBlock:with: ?


>
>
>> So rather than changing what the "stringReplace" primitive does we might
>> rather want to add a "stringMove" primitive.
>>
>> Btw, BitBlt has "move" semantics and I believe this is even used in some
>> places (via #hackBits:).
>>
>> - Bert -
>>
>>
>>
>>
>>
>>> > Ron
>>> >
>>> >> In my (buggy) VM it answered
>>> >>
>>> >>      ==> #(1 2 3 4 5 6 7 8 9 10 8 9 10 11 12 13 14 15 16 17)
>>> >>
>>> >> which apparently did not at all match what The Creators intended ;)
>>> >>
>>> >> - Bert -
>>> >>
>>> >> [*] specifically, #decompressBlock:with:
>>> >
>>> >
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>>
>>
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20140923/f648ef3b/attachment.htm


More information about the Squeak-dev mailing list