diff --git a/code/extensions.lisp b/code/extensions.lisp index 857414ebdcb0397aff1469b297339d5beb00be11..1274319f9356956ba557cba78b6376e02b01e2be 100644 --- a/code/extensions.lisp +++ b/code/extensions.lisp @@ -17,7 +17,8 @@ (export '(letf* letf dovector deletef indenting-further file-comment read-char-no-edit listen-skip-whitespace concat-pnames iterate once-only collect do-anonymous undefined-value - define-hash-cache defun-cached cache-hash-eq)) + required-argument define-hash-cache defun-cached + cache-hash-eq)) (import 'lisp::whitespace-char-p) @@ -31,6 +32,19 @@ (defun undefined-value () '%undefined%) +;;; REQUIRED-ARGUMENT -- Public +;;; +(proclaim '(ftype (function () nil) required-argument)) +(defun required-argument () + "This function can be used as the default value for keyword arguments that + must be always be supplied. Since it is known by the compiler to never + return, it will avoid any compile-time type warnings that would result from a + default value inconsistent with the declared type. When this function is + called, it signals an error indicating that a required keyword argument was + not supplied. This function is also useful for DEFSTRUCT slot defaults + corresponding to required arguments." + (error "A required keyword argument was not supplied.")) + ;;; FILE-COMMENT -- Public ;;;