0.7.7.5:
[sbcl.git] / tests / dump.impure-cload.lisp
1 ;;;; tests related to the way objects are dumped into fasl files
2
3 ;;;; This software is part of the SBCL system. See the README file for
4 ;;;; more information.
5 ;;;;
6 ;;;; While most of SBCL is derived from the CMU CL system, the test
7 ;;;; files (like this one) were written from scratch after the fork
8 ;;;; from CMU CL.
9 ;;;; 
10 ;;;; This software is in the public domain and is provided with
11 ;;;; absolutely no warranty. See the COPYING and CREDITS files for
12 ;;;; more information.
13
14 (cl:in-package :cl-user)
15
16 (declaim (optimize (debug 3) (speed 2) (space 1)))
17
18 ;;; Don Geddis reported this test case 25 December 1999 on a CMU CL
19 ;;; mailing list: dumping circular lists caused the compiler to enter
20 ;;; an infinite loop. Douglas Crosher reported a patch 27 Dec 1999.
21 ;;; The patch was tested on SBCL by Martin Atzmueller 2 Nov 2000, and
22 ;;; merged in sbcl-0.6.8.11.
23 (defun q-dg1999-1 () (dolist (x '#1=("A" "B" . #1#)) x))
24 (defun q-dg1999-2 () (dolist (x '#1=("C" "D" . #1#)) x))
25 (defun q-dg1999-3 () (dolist (x '#1=("E" "F" . #1#)) x))
26 (defun q-dg1999-4 () (dolist (x '#1=("C" "D" . #1#)) x))
27 (defun useful-dg1999 (keys)
28   (declare (type list keys))
29   (loop
30       for c in '#1=("Red" "Blue" . #1#)
31       for key in keys ))
32
33 ;;; sbcl-0.6.11.25 or so had DEF!STRUCT/MAKE-LOAD-FORM/HOST screwed up
34 ;;; so that the compiler couldn't dump pathnames.
35 (format t "Now the compiler can dump pathnames again: ~S ~S~%" #p"" #p"/x/y/z")
36
37 (eval-when (:compile-toplevel :load-toplevel :execute)
38   (defstruct foo x y)
39   (defmethod make-load-form ((foo foo) &optional env)
40     (declare (ignore env))
41     ;; an extremely meaningless MAKE-LOAD-FORM method whose only point
42     ;; is to exercise the mechanism a little bit
43     (values `(make-foo :x (list ',(foo-x foo)))
44             `(setf (foo-y ,foo) ',foo))))
45
46 (defparameter *foo*
47   #.(make-foo :x "X" :y "Y"))
48
49 (assert (equalp (foo-x *foo*) '("X")))
50 (assert (eql (foo-y *foo*) *foo*))
51
52 (sb-ext:quit :unix-status 104) ; success