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)
|
||||
|
||||
(defpackage #:user-side-compiler/toolkit
|
||||
(:use #:cl)
|
||||
(:export #:define-simple-print-object))
|
||||
|
||||
(defpackage #:user-side-compiler
|
||||
(:nicknames #:usc)
|
||||
(:local-nicknames (#:tlk #:user-side-compiler/toolkit))
|
||||
(: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)
|
||||
:components
|
||||
((:file "package")
|
||||
(:file "toolkit")
|
||||
(:file "transform")
|
||||
(:file "reference")
|
||||
(:file "symbol-table")
|
||||
|
|
Loading…
Add table
Reference in a new issue