projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
0.8.15.6:
[sbcl.git]
/
src
/
pcl
/
ctor.lisp
diff --git
a/src/pcl/ctor.lisp
b/src/pcl/ctor.lisp
index
07d6069
..
6ef5386
100644
(file)
--- a/
src/pcl/ctor.lisp
+++ b/
src/pcl/ctor.lisp
@@
-62,6
+62,14
@@
;;; Utilities *******
;;; ******************
;;; Utilities *******
;;; ******************
+(defun quote-plist-keys (plist)
+ (loop for (key . more) on plist by #'cddr
+ if (null more) do
+ (error "Not a property list: ~S" plist)
+ else
+ collect `(quote ,key)
+ and collect (car more)))
+
(defun plist-keys (plist &key test)
(loop for (key . more) on plist by #'cddr
if (null more) do
(defun plist-keys (plist &key test)
(loop for (key . more) on plist by #'cddr
if (null more) do
@@
-406,9
+414,11
@@
(slot-inits (slot-init-forms ctor (or ii-before si-before))))
(values
`(let (,@(when (or ii-before ii-after)
(slot-inits (slot-init-forms ctor (or ii-before si-before))))
(values
`(let (,@(when (or ii-before ii-after)
- `((.ii-args. (list .instance. ,@initargs))))
+ `((.ii-args.
+ (list .instance. ,@(quote-plist-keys initargs)))))
,@(when (or si-before si-after)
,@(when (or si-before si-after)
- `((.si-args. (list .instance. t ,@initargs)))))
+ `((.si-args.
+ (list .instance. t ,@(quote-plist-keys initargs))))))
,@(loop for method in ii-before
collect `(invoke-method ,method .ii-args.))
,@(loop for method in si-before
,@(loop for method in ii-before
collect `(invoke-method ,method .ii-args.))
,@(loop for method in si-before