Hi All,
Eliot Miranda uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-eem.460.mcz
==================== Summary ====================
Name: Collections-eem.460
Author: eem
Time: 29 September 2011, 12:42:36.39 pm
UUID: 0b90a58f-9354-4927-91f0-3432359541fe
Ancestors: Collections-ul.459
Fix String>numArgs for prefAllowUnderscoreSelectors regime.
=============== Diff against Collections-ul.459 ===============
Item was changed:
�----- Method: String>>numArgs (in category 'accessing') -----
�numArgs
� � � �"Answer either the number of arguments that the receiver would take if considered a selector. �Answer -1 if it couldn't be a selector. �Note that currently this will answer -1 for anything begining with an uppercase letter even though the system will accept such symbols as selectors. �It is intended mostly for the assistance of spelling correction."
� � � �| firstChar numColons excess start ix |
� � � �self size = 0 ifTrue: [^ -1].
� � � �firstChar := self at: 1.
� � � �(firstChar isLetter or: [firstChar = $:]) ifTrue:
� � � � � � � �["Fast reject if any chars are non-alphanumeric
� � � � � � � �NOTE: fast only for Byte things - Broken for Wide"
+ � � � � � � � Scanner prefAllowUnderscoreSelectors ifFalse:
+ � � � � � � � � � � � [self class isBytes
+ � � � � � � � � � � � � � � � ifTrue: [(self findSubstring: '~' in: self startingAt: 1 matchTable: Tokenish) > 0 ifTrue: [^ -1]]
+ � � � � � � � � � � � � � � � ifFalse: [2 to: self size do: [:i | (self at: i) tokenish ifFalse: [^ -1]]]].
- � � � � � � � self class isBytes
- � � � � � � � � � � � ifTrue: [(self findSubstring: '~' in: self startingAt: 1 matchTable: Tokenish) > 0 ifTrue: [^ -1]]
- � � � � � � � � � � � ifFalse: [2 to: self size do: [:i | (self at: i) tokenish ifFalse: [^ -1]]].
� � � � � � � �"Fast colon count"
� � � � � � � �numColons := 0. �start := 1.
� � � � � � � �[(ix := self indexOf: $: startingAt: start) > 0]
� � � � � � � � � � � �whileTrue:
� � � � � � � � � � � � � � � �[numColons := numColons + 1.
� � � � � � � � � � � � � � � �start := ix + 1].
� � � � � � � �numColons = 0 ifTrue: [^ 0].
� � � � � � � �firstChar = $:
� � � � � � � � � � � �ifTrue: [excess := 2 "Has an initial keyword, as #:if:then:else:"]
� � � � � � � � � � � �ifFalse: [excess := 0].
� � � � � � � �self last = $:
� � � � � � � � � � � �ifTrue: [^ numColons - excess]
� � � � � � � � � � � �ifFalse: [^ numColons - excess - 1 "Has a final keywords as #nextPut::andCR"]].
� � � �firstChar isSpecial ifTrue:
� � � � � � � �[self size = 1 ifTrue: [^ 1].
� � � � � � � �2 to: self size do: [:i | (self at: i) isSpecial ifFalse: [^ -1]].
� � � � � � � �^ 1].
� � � �^ -1.!