gcl.git - GNU Common Lisp

index : gcl.git
GNU Common Lisp
summary refs log tree commit diff
diff options
context:
space:
mode:
authorCamm Maguire <camm@debian.org>2013年10月27日 22:16:45 +0000
committerCamm Maguire <camm@debian.org>2013年10月27日 22:16:45 +0000
commit767820020c1aa106749962b681101bc29dcd0d9a (patch)
treef7bd87b97f36d5f766bb57caee5989bd206d6ee4
parent149da9017e83ba340be696978ea41cc6d8947c5a (diff)
downloadgcl-767820020c1aa106749962b681101bc29dcd0d9a.tar.gz
fix nested eval-when forms
Diffstat
-rwxr-xr-xgcl/cmpnew/gcl_cmpmain.lsp 3
-rwxr-xr-xgcl/cmpnew/gcl_cmptop.lsp 24
2 files changed, 10 insertions, 17 deletions
diff --git a/gcl/cmpnew/gcl_cmpmain.lsp b/gcl/cmpnew/gcl_cmpmain.lsp
index 33cc25e2a..bfc9d3941 100755
--- a/gcl/cmpnew/gcl_cmpmain.lsp
+++ b/gcl/cmpnew/gcl_cmpmain.lsp
@@ -286,8 +286,7 @@ Cannot compile ~a.~%" (namestring (merge-pathnames input-pathname *compiler-defa
(unwind-protect
(do ((form (read *compiler-input* nil eof) (read *compiler-input* nil eof))
- (load-flag (or (eq :defaults *eval-when-defaults*)
- (list-split '(load :load-toplevel) *eval-when-defaults*))))
+ (load-flag (if *eval-when-defaults* (list-split '(load :load-toplevel) *eval-when-defaults*) t)))
(nil)
(unless (eq form eof)
diff --git a/gcl/cmpnew/gcl_cmptop.lsp b/gcl/cmpnew/gcl_cmptop.lsp
index 07e22f87b..8b583dd25 100755
--- a/gcl/cmpnew/gcl_cmptop.lsp
+++ b/gcl/cmpnew/gcl_cmptop.lsp
@@ -407,30 +407,24 @@
;; as I can make it. Valid values of *eval-when-defaults* are
;; a sublist of '(compile eval load)
-(defvar *eval-when-defaults* :defaults)
+(defvar *eval-when-defaults* nil);:defaults
-(defun maybe-eval (default-action form)
- (or default-action (and (symbolp (car form))
- (setq default-action (get (car form) 'eval-at-compile))))
- (cond ((or (and default-action (eq :defaults *eval-when-defaults*))
- (and (consp *eval-when-defaults*)
- (or (member 'compile *eval-when-defaults* )
- (member :compile-toplevel *eval-when-defaults* ))))
- (when form
- (cmp-eval form))
- t)))
+(defun maybe-eval (def form &aux (c (car form)) (def (or def (when (symbolp c) (get c 'eval-at-compile)))))
+ (when (if *eval-when-defaults* (list-split '(compile :compile-toplevel) *eval-when-defaults*) def)
+ (when form
+ (cmp-eval form))
+ t))
(defun t1eval-when (args &aux load-flag compile-flag)
(when (endp args) (too-few-args 'eval-when 1 0))
- (dolist** (situation (car args))
+ (dolist (situation (car args))
(case situation
((load :load-toplevel) (setq load-flag t))
((compile :compile-toplevel) (setq compile-flag t))
((eval :execute))
- (otherwise (cmperr "The EVAL-WHEN situation ~s is illegal."
- situation))))
- (let ((*eval-when-defaults* (car args)))
+ (otherwise (cmperr "The EVAL-WHEN situation ~s is illegal." situation))))
+ (let ((*eval-when-defaults* (or *eval-when-defaults* (car args))))
(cond (load-flag (t1progn (cdr args)))
(compile-flag (cmp-eval (cons 'progn (cdr args)))))))
generated by cgit v1.2.3 (git 2.25.1) at 2025年09月02日 01:42:56 +0000

AltStyle によって変換されたページ (->オリジナル) /