Add tool for quickly defining common PRINT-OBJECT methods

This commit is contained in:
John Lorentzson 2025-06-26 12:44:43 +02:00
parent 2c529c368a
commit 7703c71141
3 changed files with 18 additions and 0 deletions

View file

@ -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))

View 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)))))))

View file

@ -5,6 +5,7 @@
:depends-on (#:closer-mop)
:components
((:file "package")
(:file "toolkit")
(:file "transform")
(:file "reference")
(:file "symbol-table")