Am 31.03.2006 um 13:30 schrieb Bert Freudenberg:
Am 31.03.2006 um 08:25 schrieb goran@krampe.se:
Ok, I sat down last night and spent a few hours (!) on getting SM into shape for 3.9. It turned out to be more work if doing it properly. [...] unfortunately it contained [...] tons of modifications caused by automatic conversion of underscore to :=.
Now - one question regarding that last part: Why did you replace *all* underscores in the source with ":=" ?!? I saw at least one method in which underscores *inside my String literals* had been replaced. Ouch.
That shouldn't have happened, at least not with my automatic conversion procedure, which carefully does not touch methods that contain underscore in literals. I hope. Of course, when going over the remaining methods manually these might have slipped in.
Oh well, turns out there actually *is* a bug in the conversion. It does not recognize literal underscores inside arrays :(
This snippet will find potentially broken methods (those that have a ':=' inside a literal array):
SystemNavigation default browseAllSelect: [:meth | meth literals anySatisfy: [:lit | lit class == Array and: [ | todo found | todo := OrderedCollection withAll: lit. found := false. [found or: [todo isEmpty]] whileFalse: [ | next | next := todo removeFirst. next class == Array ifTrue: [todo addAll: next]. found := next isString and: [next includesSubString: ':=']]. found]]]
I have no fix yet, one would have to change MethodReference>>fixUnderscores to also look inside arrays. Or even better, use the Parser to recognize assignments and only replace those instead of all underscores in the source.
- Bert -