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>
		
			
				
	
	
		
			62 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Common Lisp
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Common Lisp
		
	
	
	
	
	
|  ;;; 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)))
 |