[squeak-dev] Re: Can i has underscores? :)
siguctua at gmail.com
Thu Apr 15 10:28:21 UTC 2010
On 15 April 2010 07:39, Andreas Raab <andreas.raab at gmx.de> wrote:
> On 4/14/2010 5:22 PM, Igor Stasenko wrote:
>> Here the code, Stéphane.
>> Please, let me know, if it meets your expectations.
> Ah! See *now* we're talking. This is useful because we can immediately put
> this to a real test along the lines of:
> Smalltalk allClasses do:[:cls|
> cls selectorsAndMethodsDo:[:sel :method|
> | source filtered node compiled |
> source := (cls sourceCodeAt: sel) asString.
> (source indexOf: $_) > 0 ifTrue:[
> filtered := (UnderscoreFilter on: source readStream)
> replacement: ':='; upToEnd.
> source = filtered ifFalse:[
> Transcript cr; show: cls name, '>>', sel.
> node := cls compilerClass new compile: filtered
> in: cls classified: nil notifying: nil ifFail: nil..
> compiled := node generate: method trailer.
> self assert: (method equivalentTo: compiled).
> ] displayingProgress:[:cls| 'Verifying ', cls name].
> What this does is verifying that your underscore filter indeed replaces all
> the source code correctly. It also spits out where underscores are used and
> I was positively surprised that it seems as if there are precisely 11
> methods with underscore assignments left in Squeak 4.1.
> The other thing we can do with it is to wrap it into a more useful form
> where we 'auto-detect' whether to translate underscores and do so only if
> needed. Check out the attached code - it provides the fileIn facilities in a
> separate class so that we can properly modify and install variations by
> subclassing. Also note that the idea is that generally we detect the
> underscore usage by looking at the fileOut version (which is fast) but if
> not present we might look at the file contents, too (this is left as an
> exercise for the interested reader :-)
Yes, that is exactly what i have proposed - use clever approach when
My proposal was more explicit - i.e. put something like: Me usingUnderscores. !
But yours also ok , except that some fileouts don't using the 'From
Squeak blabla' headers (see an attachment for instance).
If file contains a fileout version header, then we can make some
assumptions what to expect from its contents.
> BTW, I've also added a test for a fileIn translation that shows a case where
> your filter goes wrong - when having something like #(1 2 3 _ 4 5) you're
> replacing the underscore in the literal array with := even though it's
> equivalent to #'_'.
Interesting edge case :)
Btw its inconsistent in current image:
#( _ )
Preference were: allow underscore assignments = true, allow
underscore selectors = false.
With allow underscore assignments = false, allow underscore selectors = false
it throws an error while parsing such literal:
Illegal character (char code 95 16r5F) ->
With allow underscore assignments = false, allow underscore selectors = true
in older image (took 3.10.2), it printed as
I think it should print same results irrespectively of what preference set.
And my pick is: Illegal character (char code 95 16r5F)
IMO, we should disallow an ambiguous things in syntax. And #( _ ) is ambiguous.
Another interesting thing, which i found is, that syntax allows an
arbitrary number of spaces between
# and (
prints as #fooo
is this correct smalltalk syntax?
Here is updated version, which deals with array literals ( i hope ).
> Between UnderscoreFilter and FileInManager we're slowly getting there. The
> issues left are:
> * Dealing with is Monticello. If we can figure out how to extract a
> SystemVersion string from it we should be able to use the same basic
> * Using the Unicode glyph. I'm not certain what the best way to deal with
> this is, but it'd be good if we could also support the 'real' left-arrow
> glyph and translate underscore to left-arrow instead of :=.
Well, first, we certaintly need a better default font support of
Making it work only for left-arrow will be just another hack, which i
would prefer to not do at all.
Either we doing it good (unicode support), or not doing at all.
> * Typing the Unicode glyph. This could be done by a simple preference that
> maps underscore to left-arrow.
Yeah, this is trivial thing :)
> - Andreas
Igor Stasenko AKA sig.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 5082 bytes
Desc: not available
Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20100415/d8f881ea/Underscore-GoodBye.obj
More information about the Squeak-dev