From 4570e2192cd376294570e2ab197169679922a3bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Kochma=C5=84ski?= Date: Tue, 24 Feb 2015 13:30:49 +0100 Subject: [PATCH] seqlib: stable-sort: fix bogus optimization's in #'stable-sort. This patch fixes bug #292, where #'stable-sort weren't sorting in place strings, when provided with predicate #'char-greaterp. This was due to optimization, where if sequence was of type string or vector-bit function #'sort was called (which invoked #'quicksort), while for the rest cases merge-sort is used. Optimization is reduced to use quicksort only on vector-bit sequences. See: http://sourceforge.net/p/ecls/bugs/292/ --- src/lsp/seqlib.lsp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lsp/seqlib.lsp b/src/lsp/seqlib.lsp index b6e0094f8..63c58f254 100644 --- a/src/lsp/seqlib.lsp +++ b/src/lsp/seqlib.lsp @@ -882,7 +882,7 @@ SEQUENCE. See SORT." predicate (si::coerce-to-function predicate)) (if (listp sequence) (list-merge-sort sequence predicate key) - (if (or (stringp sequence) (bit-vector-p sequence)) + (if (bit-vector-p sequence) (sort sequence predicate :key key) (coerce (list-merge-sort (coerce sequence 'list) predicate