chore(3p/lisp): import sclf source tarball
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>
This commit is contained in:
parent
70e5783e22
commit
a5dbd0f5d9
12 changed files with 3599 additions and 0 deletions
62
third_party/lisp/sclf/serial.lisp
vendored
Normal file
62
third_party/lisp/sclf/serial.lisp
vendored
Normal file
|
|
@ -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)))
|
||||
Loading…
Add table
Add a link
Reference in a new issue