;; -*- Mode: Lisp; -*- ;; --------------------------------------------------------------------------- ;; Title: Use the FASL writer and reader to save and load Lisp objects ;; Created: 2024-01-13 ;; Author: Gilbert Baumann ;; License: MIT style (see below) ;; --------------------------------------------------------------------------- ;; (c) copyright 2024 by Gilbert Baumann ;; Permission is hereby granted, free of charge, to any person obtaining ;; a copy of this software and associated documentation files (the ;; "Software"), to deal in the Software without restriction, including ;; without limitation the rights to use, copy, modify, merge, publish, ;; distribute, sublicense, and/or sell copies of the Software, and to ;; permit persons to whom the Software is furnished to do so, subject to ;; the following conditions: ;; ;; The above copyright notice and this permission notice shall be ;; included in all copies or substantial portions of the Software. ;; ;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ;; IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ;; CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. (in-package :cl-user) (defpackage :fasl-io (:use :cl) (:export #:fasl-write #:fasl-read)) (in-package :fasl-io) (defun fasl-write (object pathname) (with-standard-io-syntax (let ((lisp-pathname (make-pathname :type "lisp" :defaults pathname))) (with-open-file (output lisp-pathname :direction :output :if-exists :supersede) (prin1 `(macrolet ((aux () `(setq * ',*))) (aux)) output)) (let ((* object)) (compile-file lisp-pathname :output-file pathname :print nil :verbose nil))))) (defun fasl-read (pathname) (let ((* nil)) (load pathname :verbose nil :print nil) *))