X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-extensions.lisp;h=088694dc90a177fcab171afc0adc0a910c290d63;hb=cee8ef591040db9a79cdd19297867672a9529051;hp=1aff0b98640f4bec07d5a42e14d2b86865f045f2;hpb=8437549fb42bdbfe9baad0e3595c5a52178ee5b9;p=sbcl.git diff --git a/src/code/target-extensions.lisp b/src/code/target-extensions.lisp index 1aff0b9..088694d 100644 --- a/src/code/target-extensions.lisp +++ b/src/code/target-extensions.lisp @@ -35,6 +35,13 @@ order when a saved core image starts up, after the system itself has been initialized. Unused by SBCL itself: reserved for user and applications.") +(defvar *exit-hooks* nil + #!+sb-doc + "This is a list of functions which are called in an unspecified +order when SBCL process exits. Unused by SBCL itself: reserved for +user and applications. Using (SB-EXT:EXIT :ABORT T), or calling +exit(3) directly will circumvent these hooks.") + ;;; Binary search for simple vectors (defun binary-search (value seq &key (key #'identity)) @@ -94,6 +101,7 @@ applications.") (type (integer 0 ,(1- sb!xc:array-dimension-limit)) ,pointer) (type (simple-array ,element-type (*)) ,string)) (flet ((push-char (char) + (declare (optimize (sb!c::insert-array-bounds-checks 0))) (when (= ,pointer ,size) (let ((old ,string)) (setf ,size (* 2 (+ ,size 2)) @@ -111,3 +119,8 @@ applications.") (%shrink-vector string size) string))) ,@body)))) + +;;; The smallest power of two that is equal to or greater than X. +(defun power-of-two-ceiling (x) + (declare (index x)) + (ash 1 (integer-length (1- x))))