about summary refs log tree commit diff
path: root/third_party/lisp/sclf/serial.lisp
diff options
context:
space:
mode:
authorsterni <sternenseemann@systemli.org>2021-08-21T12·58+0200
committersterni <sternenseemann@systemli.org>2021-09-01T22·57+0000
commita5dbd0f5d90f0493c89126fe279400d0e7ad7e5b (patch)
tree4de4bdf876407ed6a62a98471a2480145cba3a79 /third_party/lisp/sclf/serial.lisp
parent70e5783e2297ca7f59ee85f236125addc161fd27 (diff)
chore(3p/lisp): import sclf source tarball r/2810
Used http://wcp.sdf-eu.org/software/sclf-20150207T213551.tbz (sha256
a231aeecdb9e87c72642292a1e083fffb33e69ec1d34e667326c6c35b8bcc794).
There's no upstream repository nor a release since 2015, so importing
seems to make a lot of sense.

Since we can't subtree making any depot-related changes in a separate CL
to make them more discoverable -- this is only the source import.

Change-Id: Ia51a7f4029dba3abd1eee4eeebcf99aca5c5ba4c
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3376
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
Diffstat (limited to 'third_party/lisp/sclf/serial.lisp')
-rw-r--r--third_party/lisp/sclf/serial.lisp62
1 files changed, 62 insertions, 0 deletions
diff --git a/third_party/lisp/sclf/serial.lisp b/third_party/lisp/sclf/serial.lisp
new file mode 100644
index 000000000000..936c61606386
--- /dev/null
+++ b/third_party/lisp/sclf/serial.lisp
@@ -0,0 +1,62 @@
+ ;;; serial.lisp --- serialisation of CLOS objects
+
+ ;;; Copyright (C) 2009 by Walter C. Pelissero
+
+ ;;; Author: Walter C. Pelissero <walter@pelissero.de>
+ ;;; Project: sclf
+
+#+cmu (ext:file-comment "$Module: serial.lisp $")
+
+;;; This library is free software; you can redistribute it and/or
+;;; modify it under the terms of the GNU Lesser General Public License
+;;; as published by the Free Software Foundation; either version 2.1
+;;; of the License, or (at your option) any later version.
+;;; This library is distributed in the hope that it will be useful,
+;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;;; Lesser General Public License for more details.
+;;; You should have received a copy of the GNU Lesser General Public
+;;; License along with this library; if not, write to the Free
+;;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+;;; 02111-1307 USA
+
+(in-package :sclf)
+
+(defclass printable-object-mixin () ())
+
+(defmacro reconstruct-object (class &rest args)
+  `(apply #'make-instance ',class ',args))
+
+(defun print-readable-instance (object &optional stream)
+  (unless stream
+    (setf stream *standard-output*))
+  (be class (class-of object)
+    (pprint-logical-block (stream (copy-list (class-slots class)) :prefix "#.(" :suffix ")")
+      (flet ((spc ()
+	       (write-char #\space stream)))
+	(write 'reconstruct-object :stream stream)
+	(spc)
+	(write (class-name class) :stream stream :escape t :readably t :pretty t)
+	(pprint-exit-if-list-exhausted)
+	(spc)
+	(loop
+	   (be* slot (pprint-pop)
+		slot-name (slot-definition-name slot)
+		initarg (car (slot-definition-initargs slot))
+	     (when (and initarg
+			(slot-boundp object slot-name))
+	       (write initarg :stream stream)
+	       (spc)
+	       (when *print-pretty*
+		 (pprint-newline :miser stream))
+	       (write (slot-value object slot-name)
+		      :stream stream)
+	       (pprint-exit-if-list-exhausted)
+	       (if *print-pretty*
+		   (pprint-newline :linear stream)
+		   (spc)))))))))
+
+(defmethod print-object ((object printable-object-mixin) stream)
+  (if *print-readably*
+      (print-readable-instance object stream)
+      (call-next-method)))