Skip to content

Commit f55c6cc

Browse files
committed
[fix] better handle sbcl version if it can't be parsed as X.Y.Z&rest
1 parent 9829988 commit f55c6cc

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

src/types.lisp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,21 +84,32 @@ or SUBOPTIMAL-NOTE is non-NIL, then emits a OPTIMIZATION-FAILURE-NOTE
8484

8585
(with-eval-always
8686
(defun sbcl-version-spec-list (&optional version)
87-
(mapcar #'parse-integer
88-
(uiop:split-string (or version (lisp-implementation-version))
89-
:separator '(#\.))))
87+
(let ((spec-list (uiop:split-string (or version (lisp-implementation-version))
88+
:separator '(#\.))))
89+
(cond ((nth 2 spec-list) ; there are atleast three elements
90+
(handler-case (loop :for elt :in spec-list
91+
:collect (parse-integer elt :junk-allowed t))
92+
(parse-error () `(0 0 0))))
93+
(t
94+
`(0 0 0)))))
9095

9196
(defun sbcl-version-spec-integer (&optional version)
92-
(destructuring-bind (major-1 major-2 minor)
97+
(destructuring-bind (major-1 major-2 minor &rest sub-minor)
9398
(sbcl-version-spec-list version)
99+
(declare (ignore sub-minor))
94100
(+ (* 12 (+ (* 10 major-1) major-2))
95101
minor))))
96102

97103
(define-constant +optimize-speed-or-compilation-speed+
98104
;; optimize for compilation-speed for SBCL>2.2.3 else for speed
99105
(if (and (string= "SBCL" (lisp-implementation-type))
100-
(< (sbcl-version-spec-integer "2.2.3")
101-
(sbcl-version-spec-integer (lisp-implementation-version))))
106+
(let ((spec-integer (sbcl-version-spec-integer (lisp-implementation-version))))
107+
(if (zerop spec-integer)
108+
(progn
109+
(warn "Detected implementation to be SBCL but could not parse version ~A as X.Y.Z~%Optimizing polymorphic-functions for compilation-speed." (lisp-implementation-version))
110+
t)
111+
(< (sbcl-version-spec-integer "2.2.3")
112+
spec-integer))))
102113
`(optimize compilation-speed)
103114
`(optimize speed))
104115
:test #'equal)

0 commit comments

Comments
 (0)