On Mon, Apr 25, 2016 at 10:19 AM, Ben Coman <[email protected]> wrote:
> On Mon, Apr 25, 2016 at 4:03 AM, Stephan Eggermont <[email protected]> wrote:
>> On 24-04-16 21:35, stepharo wrote:
>>>
>>>
>>>
>>> Le 24/4/16 à 12:10, Hilaire a écrit :
>>>>
>>>> Hi Nicolai,
>>>>
>>>> http://smalltalkhub.com/#!/~HilaireFernandes/DrGeo
>>>>
>>>> You can't use the installation procedure described in the wiki, because
>>>> Pharo5 also got stuck when loading a dependent package (gettext package
>>>> to name it).
>>>
>>> From where do you load gettext because I can have a look.
>>> Your work is important to me :)
>>
>>
>> It is a simple, but annoying problem. A symbol with whitespace between the
>> # and the literal is no longer accepted by RBScanner>scanLiteral
>
> That seems a bad regression, to break loading code that
> loads fine with Pharo 4, and could be a common scenario.
>
>>
>> scanLiteral
>>     "Do not allow whitespace between # and the literal."
>>
>>     "Do not allow number literals after the #"
>>
>>     self step.
>>     characterType = #alphabetic
>>         ifTrue: [ ^ self scanSymbol ].
>>     characterType = #binary
>>         ifTrue:
>>             [ ^ (self scanBinary: RBLiteralToken)
>>                 stop: self previousStepPosition ].
>>     currentCharacter = $'
>>         ifTrue: [ ^ self scanStringSymbol ].
>>     (currentCharacter = $( or: [ currentCharacter = $[ ])
>>         ifTrue: [ ^ self scanLiteralArrayToken ].
>>     "Accept multiple #."
>>     currentCharacter = $#
>>         ifTrue: [ ^ self scanLiteral ].
>>     ^ self scanError: 'Expecting a literal type'
>>
>> vs
>>
>> scanLiteral
>>     self step.
>>     self stripSeparators.
>>     characterType = #alphabetic
>>         ifTrue: [ ^ self scanSymbol ].
>>     characterType = #binary
>>         ifTrue: [ ^ (self scanBinary: RBLiteralToken) stop: self
>> previousStepPosition ].
>>     currentCharacter = $'
>>         ifTrue: [ ^ self scanStringSymbol ].
>>     (currentCharacter = $( or: [ currentCharacter = $[ ])
>>         ifTrue: [ ^ self scanLiteralArrayToken].
>>     "Accept some strange literals like '#1', '# species' and '##species:'"
>>     characterType = #digit
>>         ifTrue: [ ^ self scanNumber ].
>>     currentCharacter = $#
>>         ifTrue: [ ^ self scanLiteral ].
>>     ^self scanError: 'Expecting a literal type' translated.
>>
>> The problem is that recovering from that while loading code asks for
>> rather well-developed debugging skills... It is faster to just load the code
>> in an old Pharo image, fix it there and commit a new version
>
> Wouldn't you then have the problem of manually tracking down
> that space in your codebase ?
>
> Is it feasible to have a setting for compatibility so old code can at
> least be loaded in Pharo 5? Then a re-compilation with setting
> disabled would directly identify the error to be fixed.   Maybe even
> Monticello could always temporarily enable the setting while loading -
> with that behaviour removed for Pharo 6.

Normally there is already a setting to use the old parser.
I have done something similar recently in order to load old code,
I just switch the setting before loading my old code and then fix the code.

Regards,
-- 
Serge Stinckwich
UCBN & UMI UMMISCO 209 (IRD/UPMC)
Every DSL ends up being Smalltalk
http://www.doesnotunderstand.org/

Reply via email to