Test case: #(1 2 4) asSortedCollection reverse add: 3; yourself <print it> The answer *should* be aSortedCollection(4 3 2 1) but *is* aSortedCollection(4 2 1 3). This works in Squeak. The problem is that SortedCollection does not define #reverse[d] but simply inherits it(them), and the inherited code pays no attention to the sortBlock.
I propose adding the following two methods to SortedCollection: reverseInPlace |a z| a := firstIndex. z := lastIndex. [a < z] whileTrue: [array swap: a with: z. a := a + 1. z := z - 1]. sortBlock := sortBlock ifNil: [[:x :y | y <= x]] ifNotNil: [[:x :y | sortBlock value: y value: x]]. ^self reversed ^self copy reverseInPlace The ANSI method is #reverse, not #reversed, but Pharo defines #reverse to call #reversed, and OrderedCollection overrides #reversed, so SortedCollection *must* override #reversed. #reverseInPlace is the name Squeak uses for the other method. It also has a definition in SequenceableCollection, which is not but is equivalent to reverseInPlace |a z| a := 1. z := self size. [a < z] whileTrue: [self swap: a with: z. a := a + 1. z := z - 1].l ^self r