backwards incompatible change in 1.0.48.27)
* bug fix: occasional debugger errors in when a type-error occured in a
function with dynamic-extent &rest list.
+ * bug fix: &optional and &key supplied-p arguments in DEFSTRUCT
+ boa-construtors can be used to initialized structure slots.
changes in sbcl-1.0.49 relative to sbcl-1.0.48:
* minor incompatible change: WITH-LOCKED-HASH-TABLE no longer disables
arg
(arglist `(,name ,def ,@(if supplied-test-p `(,supplied-test) nil)))
(vars name)
- (arg-type (get-slot name))))
+ (arg-type (get-slot name))
+ (when supplied-test-p
+ (vars supplied-test))))
(t
(do-default arg)))))
(arglist `(,wot ,(if def-p def slot-def)
,@(if supplied-test-p `(,supplied-test) nil)))
(vars name)
- (arg-type type key name))))
+ (arg-type type key name)
+ (when supplied-test-p
+ (vars supplied-test)))))
(do-default key t))))
(when allowp
;; So's empty.
(eval '(defstruct (typed-struct2 (:type list) (:predicate))
(a 42 :type fixnum))))
+
+(with-test (:name (:boa-supplied-p &optional))
+ (handler-bind ((warning #'error))
+ (eval `(defstruct (boa-supplied-p.1 (:constructor make-boa-supplied-p.1
+ (&optional (bar t barp))))
+ bar
+ barp)))
+ (let ((b1 (make-boa-supplied-p.1))
+ (b2 (make-boa-supplied-p.1 t)))
+ (assert (eq t (boa-supplied-p.1-bar b1)))
+ (assert (eq t (boa-supplied-p.1-bar b2)))
+ (assert (eq nil (boa-supplied-p.1-barp b1)))
+ (assert (eq t (boa-supplied-p.1-barp b2)))))
+
+(with-test (:name (:boa-supplied-p &key))
+ (handler-bind ((warning #'error))
+ (eval `(defstruct (boa-supplied-p.2 (:constructor make-boa-supplied-p.2
+ (&key (bar t barp))))
+ bar
+ barp)))
+ (let ((b1 (make-boa-supplied-p.2))
+ (b2 (make-boa-supplied-p.2 :bar t)))
+ (assert (eq t (boa-supplied-p.2-bar b1)))
+ (assert (eq t (boa-supplied-p.2-bar b2)))
+ (assert (eq nil (boa-supplied-p.2-barp b1)))
+ (assert (eq t (boa-supplied-p.2-barp b2)))))