X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fsort.lisp;h=076a9b9e3f65c71b605786d0abe74164583ccaee;hb=1dc38285834db2d374a156a4f68b19096341deb3;hp=83e98984ac68a17675f9104bb6098b927a8ceb9a;hpb=26265f96389d737bf2e1e4c787ea8943ae499944;p=sbcl.git diff --git a/src/code/sort.lisp b/src/code/sort.lisp index 83e9898..076a9b9 100644 --- a/src/code/sort.lisp +++ b/src/code/sort.lisp @@ -23,7 +23,7 @@ #!+sb-doc "Destructively sort SEQUENCE. PREDICATE should return non-NIL if ARG1 is to precede ARG2." - (declare (dynamic-extent args)) + (declare (truly-dynamic-extent args)) (let ((predicate-fun (%coerce-callable-to-fun predicate))) (seq-dispatch sequence (stable-sort-list sequence @@ -43,7 +43,7 @@ #!+sb-doc "Destructively sort SEQUENCE. PREDICATE should return non-NIL if ARG1 is to precede ARG2." - (declare (dynamic-extent args)) + (declare (truly-dynamic-extent args)) (let ((predicate-fun (%coerce-callable-to-fun predicate))) (seq-dispatch sequence (stable-sort-list sequence @@ -240,8 +240,8 @@ (simple-vector ,temp)) (when (> ,vector-len ,temp-len) (setf ,temp (make-array (max ,vector-len - (min most-positive-fixnum - (+ ,temp-len ,temp-len)))) + (min (truncate array-dimension-limit 2) + (logand most-positive-fixnum (+ ,temp-len ,temp-len))))) *merge-sort-temp-vector* ,temp)) ;; Rebind, in case PRED or KEY calls STABLE-SORT. This is also ;; interrupt safe: we bind before we put any data of our own in @@ -297,10 +297,6 @@ ) ; EVAL-when -;;; temporary vector for stable sorting vectors, allocated for each new thread -(defvar *merge-sort-temp-vector* (vector)) -(declaim (simple-vector *merge-sort-temp-vector*)) - (defun stable-sort-simple-vector (vector pred key) (declare (type simple-vector vector) (type function pred)