[squeak-dev] The Trunk: Collections-ul.900.mcz

Jakob Reschke forums.jakob at resfarm.de
Sun Jun 28 20:01:06 UTC 2020


Hi Levente,

An uncommented side effect of PositionableStream>>match: is that it
sets the stream to the end if there is no match. Your optimized
version does not exhibit this side effect. This is one cause of the
current bug with traitCompositions. See the usage in
MCStReader>>#classDefinitionFrom:.

Kind regards,
Jakob

Am Di., 23. Juni 2020 um 22:48 Uhr schrieb <commits at source.squeak.org>:
>
> Levente Uzonyi uploaded a new version of Collections to project The Trunk:
> http://source.squeak.org/trunk/Collections-ul.900.mcz
>
> ==================== Summary ====================
>
> Name: Collections-ul.900
> Author: ul
> Time: 23 June 2020, 10:48:18.28482 pm
> UUID: ff11e218-b6f4-44db-bd02-2e2284158946
> Ancestors: Collections-mt.898
>
> - enable the use of primitive 158 in String >> #compareWith:collated: because when collation is specified, the VM does not use the jitted version
> - fix: String >> #compare:caseSensitive: needs to transform the return value of String >> #compareWith:collated:
> - speed up ReadStream >> #match: when the receiver's class is ReadStream
>
> =============== Diff against Collections-mt.898 ===============
>
> Item was added:
> + ----- Method: ReadStream>>match: (in category 'positioning') -----
> + match: subCollection
> +       "Faster version than the one implemented by super, but due to my subclasses breaking various invariants true for actual ReadStreams, only use it when the receiver's class is ReadStream."
> +
> +       | matchPosition |
> +       self class == ReadStream ifFalse: [ ^super match: subCollection ].
> +       subCollection isEmpty ifTrue: [ ^true ].
> +       matchPosition := collection indexOfSubCollection: subCollection startingAt: position + 1.
> +       matchPosition = 0 ifTrue: [ ^false ].
> +       matchPosition <= readLimit ifFalse: [ ^false ].
> +       position := matchPosition + subCollection size - 1.
> +       ^true!
>
> Item was changed:
>   ----- Method: String>>compare:caseSensitive: (in category 'comparing') -----
>   compare: aString caseSensitive: aBool
>         "Answer a comparison code telling how the receiver sorts relative to aString:
>                 1 - before
>                 2 - equal
>                 3 - after.
>         "
> +       | map result |
> -       | map |
>         map := aBool ifTrue:[CaseSensitiveOrder] ifFalse:[CaseInsensitiveOrder].
> +       result := self compareWith: aString collated: map.
> +       result = 0 ifTrue: [ ^2 ].
> +       ^result > 0
> +               ifTrue: [ 3 ]
> +               ifFalse: [ 1 ]!
> -       ^(self compareWith: aString collated: map) + 2!
>
> Item was changed:
>   ----- Method: String>>compareWith:collated: (in category 'comparing') -----
>   compareWith: aString collated: collation
>
> +       <primitive: 158>
> -       "<primitive: 158>"
>         ^(self compare: self with: aString collated: collation) - 2!
>
>


More information about the Squeak-dev mailing list