On Mon, Apr 25, 2016 at 10:19 AM, Ben Coman <btc@openinworld.com> wrote:
On Mon, Apr 25, 2016 at 4:03 AM, Stephan Eggermont <stephan@stack.nl> 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/