Skip to content

Commit

Permalink
[fix] better handle sbcl version if it can't be parsed as X.Y.Z&rest
Browse files Browse the repository at this point in the history
  • Loading branch information
digikar99 committed Apr 2, 2024
1 parent 9829988 commit f55c6cc
Showing 1 changed file with 17 additions and 6 deletions.
23 changes: 17 additions & 6 deletions src/types.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -84,21 +84,32 @@ or SUBOPTIMAL-NOTE is non-NIL, then emits a OPTIMIZATION-FAILURE-NOTE

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

(defun sbcl-version-spec-integer (&optional version)
(destructuring-bind (major-1 major-2 minor)
(destructuring-bind (major-1 major-2 minor &rest sub-minor)
(sbcl-version-spec-list version)
(declare (ignore sub-minor))
(+ (* 12 (+ (* 10 major-1) major-2))
minor))))

(define-constant +optimize-speed-or-compilation-speed+
;; optimize for compilation-speed for SBCL>2.2.3 else for speed
(if (and (string= "SBCL" (lisp-implementation-type))
(< (sbcl-version-spec-integer "2.2.3")
(sbcl-version-spec-integer (lisp-implementation-version))))
(let ((spec-integer (sbcl-version-spec-integer (lisp-implementation-version))))
(if (zerop spec-integer)
(progn
(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))
t)
(< (sbcl-version-spec-integer "2.2.3")
spec-integer))))
`(optimize compilation-speed)
`(optimize speed))
:test #'equal)
Expand Down

0 comments on commit f55c6cc

Please sign in to comment.