Add tool for quickly defining common PRINT-OBJECT methods
This commit is contained in:
parent
2c529c368a
commit
7703c71141
3 changed files with 18 additions and 0 deletions
|
@ -1,5 +1,10 @@
|
||||||
(cl:in-package #:cl-user)
|
(cl:in-package #:cl-user)
|
||||||
|
|
||||||
|
(defpackage #:user-side-compiler/toolkit
|
||||||
|
(:use #:cl)
|
||||||
|
(:export #:define-simple-print-object))
|
||||||
|
|
||||||
(defpackage #:user-side-compiler
|
(defpackage #:user-side-compiler
|
||||||
(:nicknames #:usc)
|
(:nicknames #:usc)
|
||||||
|
(:local-nicknames (#:tlk #:user-side-compiler/toolkit))
|
||||||
(:use #:cl))
|
(:use #:cl))
|
||||||
|
|
12
wip-duuqnd/user-side-compiler/toolkit.lisp
Normal file
12
wip-duuqnd/user-side-compiler/toolkit.lisp
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
(in-package #:user-side-compiler/toolkit)
|
||||||
|
|
||||||
|
(defmacro define-simple-print-object ((class &rest slot-names)
|
||||||
|
&key (format-string "~A")
|
||||||
|
(type t) (identity t))
|
||||||
|
(when (some #'listp slot-names)
|
||||||
|
(error "SLOT-NAMES must be a list of symbols, they may not be quoted."))
|
||||||
|
`(defmethod print-object ((object ,class) stream)
|
||||||
|
(print-unreadable-object (object stream :type ,type :identity ,identity)
|
||||||
|
(when (and ,@(loop :for s :in slot-names :collect `(slot-boundp object ',s)))
|
||||||
|
(format stream ,format-string ,@(loop :for s :in slot-names
|
||||||
|
:collect `(slot-value object ',s)))))))
|
|
@ -5,6 +5,7 @@
|
||||||
:depends-on (#:closer-mop)
|
:depends-on (#:closer-mop)
|
||||||
:components
|
:components
|
||||||
((:file "package")
|
((:file "package")
|
||||||
|
(:file "toolkit")
|
||||||
(:file "transform")
|
(:file "transform")
|
||||||
(:file "reference")
|
(:file "reference")
|
||||||
(:file "symbol-table")
|
(:file "symbol-table")
|
||||||
|
|
Loading…
Add table
Reference in a new issue