Changeset 13597
- Timestamp:
- 09/17/11 20:46:45 (12 years ago)
- Location:
- trunk/abcl/src/org/armedbear/lisp
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/compiler-macro.lisp
r11391 r13597 46 46 (defmacro define-compiler-macro (name lambda-list &rest body) 47 47 (let* ((form (gensym)) 48 (env (gensym))) 48 (env (gensym)) 49 (block-name (fdefinition-block-name name))) 49 50 (multiple-value-bind (body decls) 50 (parse-defmacro lambda-list form body name 'defmacro :environment env) 51 (parse-defmacro lambda-list form body name 'defmacro :environment env 52 ;; when we encounter an error 53 ;; parsing the arguments in the call 54 ;; (not in the difinition!), return 55 ;; the arguments unmodified -- ie skip the 56 ;; transform (see also source-transform.lisp) 57 :error-fun `(lambda (&rest ignored) 58 (declare (ignore ignored)) 59 (return-from ,block-name ,form))) 51 60 (let ((expander `(lambda (,form ,env) 52 61 (declare (ignorable ,env)) 53 (block , (fdefinition-block-name name),body))))62 (block ,block-name ,body)))) 54 63 `(progn 55 64 (setf (compiler-macro-function ',name) (function ,expander)) -
trunk/abcl/src/org/armedbear/lisp/source-transform.lisp
r11391 r13597 45 45 (let* ((form (gensym)) 46 46 (env (gensym)) 47 (block-name (if (symbolp name) name (cadr name))) 47 48 (body (parse-defmacro lambda-list form body name 'defmacro 48 :environment env)) 49 :environment env 50 ;; when we encounter an error 51 ;; parsing the arguments in the call 52 ;; (not in the difinition!), return 53 ;; the arguments unmodified -- ie skip the 54 ;; transform (see also compiler-macro.lisp) 55 :error-fun `(lambda (&rest ignored) 56 (declare (ignore ignored)) 57 (return-from ,block-name ,form)))) 49 58 (expander 50 (if (symbolp name) 51 `(lambda (,form) (block ,name ,body)) 52 `(lambda (,form) (block ,(cadr name) ,body))))) 59 `(lambda (,form) (block ,block-name ,body)))) 53 60 `(eval-when (:compile-toplevel :load-toplevel :execute) 54 61 (setf (source-transform ',name) ,expander)
Note: See TracChangeset
for help on using the changeset viewer.