X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fearly-extensions.lisp;h=7db471f279fd9ed57cec4f2f72b64f40d27f6050;hb=2e52fa05;hp=9ed8d28c4c5d6f4cdd748bea5581ef7b639cbe6b;hpb=47f408ca8480937ac946db8455b7c3d3e0b353bb;p=sbcl.git diff --git a/src/code/early-extensions.lisp b/src/code/early-extensions.lisp index 9ed8d28..7db471f 100644 --- a/src/code/early-extensions.lisp +++ b/src/code/early-extensions.lisp @@ -1154,9 +1154,11 @@ ;;; - SB-C::MERGE-TAIL-CALLS (policy), since 1.0.53.74 (11/2011) -> Late: 11/2012 ;;; - SB-EXT:QUIT, since 1.0.56.55 (05/2012) -> Late: 05/2013 ;;; - SB-UNIX:UNIX-EXIT, since 1.0.56.55 (05/2012) -> Late: 05/2013 +;;; - SB-DEBUG:*SHOW-ENTRY-POINT-DETAILS*, since 1.1.4.9 (02/2013) -> Late: 02/2014 ;;; ;;; LATE: ;;; - SB-SYS:OUTPUT-RAW-BYTES, since 1.0.8.16 (06/2007) -> Final: anytime +;;; Note: make sure CLX doesn't use it anymore! ;;; - SB-C::STACK-ALLOCATE-DYNAMIC-EXTENT (policy), since 1.0.19.7 -> Final: anytime ;;; - SB-C::STACK-ALLOCATE-VECTOR (policy), since 1.0.19.7 -> Final: anytime ;;; - SB-C::STACK-ALLOCATE-VALUE-CELLS (policy), since 1.0.19.7 -> Final: anytime @@ -1191,6 +1193,21 @@ (setf (compiler-macro-function ',name) (deprecation-compiler-macro ,state ,since ',name ',replacements))))) +(defun check-deprecated-variable (name) + (let ((info (info :variable :deprecated name))) + (when info + (deprecation-warning (car info) (cdr info) name nil)))) + +(defmacro define-deprecated-variable (state since name &key (value nil valuep) replacement) + `(progn + (setf (info :variable :deprecated ',name) (cons ,state ,since)) + ,@(when (member state '(:early :late)) + `((defvar ,name ,@(when valuep (list value)) + ,(let ((*package* (find-package :keyword))) + (format nil + "~@<~S has been deprecated as of SBCL ~A~@[, use ~S instead~].~:>" + name since replacement))))))) + ;;; Anaphoric macros (defmacro awhen (test &body body) `(let ((it ,test)) @@ -1300,12 +1317,16 @@ ;;; Returns a list of members of LIST. Useful for dealing with circular lists. ;;; For a dotted list returns a secondary value of T -- in which case the ;;; primary return value does not include the dotted tail. -(defun list-members (list) +;;; If the maximum length is reached, return a secondary value of :MAYBE. +(defun list-members (list &key max-length) (when list (do ((tail (cdr list) (cdr tail)) - (members (list (car list)) (cons (car tail) members))) - ((or (not (consp tail)) (eq tail list)) - (values members (not (listp tail))))))) + (members (list (car list)) (cons (car tail) members)) + (count 0 (1+ count))) + ((or (not (consp tail)) (eq tail list) + (and max-length (>= count max-length))) + (values members (or (not (listp tail)) + (and (>= count max-length) :maybe))))))) ;;; Default evaluator mode (interpeter / compiler)