There is also http://code.google.com/p/pharo/issues/detail?id=5404 in
the same corner.

Give you a pleasure, remove these 5 lines of code!

Le 27 février 2012 00:58, Nicolas Cellier
<[email protected]> a écrit :
> http://code.google.com/p/pharo/issues/detail?id=5406
>
> SmalltalkEditor>>notify:at:in: is wrong and has been reverted in Cuis too.
>
> I have a plan explained in above issue if we want to get rid of
> ReadStream on:from:to:
>
> Nicolas
>
> Le 26 février 2012 21:57, Nicolas Cellier
> <[email protected]> a écrit :
>> One of the area of high interaction is
>> Parser>>correctSelector:wordIntervals:exprInterval:ifAbort: which has
>> to then to deal with (self startIndex - 1) offset.
>> It will have to be fixed too.
>>
>> Nicolas
>>
>> Le 26 février 2012 21:54, Stéphane Ducasse <[email protected]> a 
>> écrit :
>>>
>>> On Feb 26, 2012, at 9:41 PM, Nicolas Cellier wrote:
>>>
>>>> Compare this which is like old squeak selectionAsStream
>>>>
>>>> SmalltalkEditor>>selectionForDoitAsStream
>>>>       ^ ReadWriteStream
>>>>               on: self string
>>>>               from: self startIndex
>>>>               to: self stopIndex - 1
>>>>
>>>> and this which has been changed conforming to Cuis
>>>>
>>>> TextEditor>>selectionAsStream
>>>>       "Answer a ReadStream on the text in the paragraph that is currently
>>>>       selected."
>>>>
>>>>       ^ReadStream
>>>>               on: (self string copyFrom: self startIndex to: self 
>>>> stopIndex - 1)
>>>>
>>>> (or self selection asString readStream)
>>>> The two differ.
>>>> The former stream position starts at editor startIndex - 1, while the
>>>> later stream position starts at 0.
>>>> The stream position is used by the Compiler/Parser for notifying the
>>>> SmalltalkEditor (or TextMorph) requestor.
>>>>
>>>> Now look at SmalltalkEditor>>notify: aString at: anInteger in: aStream
>>>>       "The compilation of text failed. The syntax error is noted as the 
>>>> argument,
>>>>       aString. Insert it in the text at starting character position 
>>>> anInteger."
>>>>
>>>>       | pos |
>>>>       pos := self selectionInterval notEmpty
>>>>               ifTrue: [self startIndex + anInteger - 1 ]
>>>>               ifFalse: [anInteger].
>>>>       self insertAndSelect: aString at: (pos max: 1)
>>>>
>>>> You see that it adds (startIndex - 1) to the error message insertion
>>>> position which is a Cuis change.
>>>> (The old ParagraphEditor did not).
>>>>
>>>> When #notify:at:in: is used for evaluating #selectionAsStream, all is
>>>> OK, the (startIndex - 1) is added only once.
>>>> But when it is used with #selectionForDoitAsStream, the offset is
>>>> counted twice (because already in the stream location passed in
>>>> anInteger parameter).
>>>>
>>>> I guess the hack #selectionForDoitAsStream that undo the Cuis clean-up
>>>> has been added because some other part of Parser/Encoder/Compiler is
>>>> messing with the requestor selection (like highlighting some part of
>>>> the source for user interaction in case of ambiguity).
>>>> Tthis is not a valid workaround.
>>>>
>>>> In Squeak, I did revert the Cuis clean-up just to keep some simple
>>>> compatibility with ParagraphEditor, but Pharo does not care about
>>>> that, so it should apply full simplification.
>>>> I suggest removing #selectionForDoitAsStream, and replace senders with
>>>> #selectionAsStream.
>>>> Then if there are some other feature broken we'll fix'em.
>>>> OK?
>>>
>>> Sure!!!
>>>
>>>>
>>>> Nicolas
>>>>
>>>
>>>

Reply via email to