1 ;;;;------------------------------------------------------------------
3 ;;;; Copyright (C) 20012000, 2004,
4 ;;;; Department of Computer Science, University of Tromso, Norway
6 ;;;; Filename: assembly-syntax.lisp
8 ;;;; Author: Frode Vatvedt Fjeld <frodef@acm.org>
9 ;;;; Created at: Thu Nov 9 17:34:37 2000
10 ;;;; Distribution: See the accompanying file COPYING.
12 ;;;; $Id: assembly-syntax.lisp,v 1.4 2004/09/06 10:07:03 ffjeld Exp $
14 ;;;;------------------------------------------------------------------
18 (defstruct assembly-macro-environment
19 (expanders (make-hash-table :test
#'eq
)))
21 (defun assembly-macro-expander (symbol amenv
)
22 (gethash symbol
(assembly-macro-environment-expanders amenv
)))
24 (defun (setf assembly-macro-expander
) (expander symbol amenv
)
25 (setf (gethash symbol
(assembly-macro-environment-expanders amenv
))
28 (defun assembly-macroexpand (prg amenv
)
29 #+cmu
(declare (optimize (safety 0))) ; Circumvent CMUCL bug in loop for-as-on-list.
30 (loop for
(p . tail
) on prg
31 as expander
= (and (consp p
)
33 (assembly-macro-expander (car p
) amenv
))
35 append
(funcall expander p
) into result
37 append
(list (assembly-macroexpand p amenv
)) into result
38 else append
(list p
) into result
39 when
(not (listp tail
))
40 do
(setf (cdr (last result
)) tail
)
42 finally
(return result
)))