Very strange bug on Streams and probably compiler
Bert Freudenberg
bert at freudenbergs.de
Wed Feb 14 15:36:14 UTC 2007
On Feb 14, 2007, at 16:18 , Damien Cassou wrote:
> Execute the following piece of code:
>
>
> "-------------------------------------------------------------------"
> |stream stream2|
> stream := WriteStream with: 'a test '.
> stream reset.
> stream nextPutAll: 'to test'.
> self assert: [stream contents = 'to test'].
>
> "On the following line, you can remove 'copy'"
> "the problem is present without. It's here to prevent"
> " the streams from using the same collection"
> "because the compiler tries to avoid creating 2 identical"
> "strings"
> stream2 := WriteStream with: 'a test ' copy.
> stream2 nextPutAll: 'to test'.
>
> "This assert passes but this is abnormal"
> self assert: [stream2 contents = 'to testto test'].
>
> "This assert pass and this is abnormal too"
> "because the strings MUST be equal !!"
> self assert: [stream2 contents ~= 'a test to test']
> "-------------------------------------------------------------------"
>
>
>
> On my image, all the 3 tests pass. This is completely abnormal in
> my opinion.
It is normal.
You are modifying the 'a test ' literal into 'to test'. This modified
string gets copied in the second test.
Lesson: never modify string literals.
- Bert -
More information about the Squeak-dev
mailing list
|