1 ;;;; This file is for macroexpander tests which have side effects
3 ;;;; This software is part of the SBCL system. See the README file for
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
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.
14 ;;; From Matthew Swank on cll 2005-10-06
16 (defmacro defglobal* (name &optional value)
17 (let ((internal (gensym)))
19 (defparameter ,internal ,value)
20 (define-symbol-macro ,name ,internal))))
24 (assert (= (let ((glob 4)) glob)))
26 (assert (equal (let ((glob nil)) (setf glob (cons 'foo glob)) glob) '(foo)))
28 (assert (equal (let ((glob nil)) (push 'foo glob) glob) '(foo)))
33 ;;; CLHS 3.1.2.1.1 specifies that symbol macro expansion must also
34 ;;; go through *MACROEXPAND-HOOK*. (2007-09-22, -TCR.)
36 (define-symbol-macro .foo. 'foobar)
38 (let* ((expanded-p nil)
39 (*macroexpand-hook* #'(lambda (fn form env)
40 (when (eq form '.foo.)
42 (funcall fn form env))))
43 (multiple-value-bind (expansion flag) (macroexpand '.foo.)
44 (assert (equal expansion '(quote foobar)))
48 (let ((sb-ext::*evaluator-mode* :interpret))
49 (let* ((expanded-p nil)
50 (*macroexpand-hook* #'(lambda (fn form env)
51 (when (eq form '.foo.)
53 (funcall fn form env))))
57 (let* ((expanded-p nil)
58 (*macroexpand-hook* #'(lambda (fn form env)
59 (when (eq form '/foo/)
61 (funcall fn form env))))
62 (compile nil '(lambda ()
63 (symbol-macrolet ((/foo/ 'foobar))
64 (macrolet ((expand (symbol &environment env)
65 (macroexpand symbol env)))