mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-03-09 06:30:32 -07:00
compiler.d: fix order of evaluation bug for nested eval-when forms
This commit is contained in:
parent
5053532ee1
commit
fcddd9c175
2 changed files with 25 additions and 0 deletions
|
|
@ -1649,10 +1649,12 @@ c_eval_when(cl_env_ptr env, cl_object args, int flags) {
|
|||
args = ECL_NIL;
|
||||
} else if (when_load_p(situation)) {
|
||||
if (when_compile_p(situation)) {
|
||||
int result = compile_toplevel_body(env, args, flags);
|
||||
int current_mode = c_env->mode;
|
||||
c_env->mode = FLAG_EXECUTE;
|
||||
execute_each_form(env, args);
|
||||
c_env->mode = current_mode;
|
||||
return result;
|
||||
}
|
||||
} else if (when_compile_p(situation)) {
|
||||
int current_mode = c_env->mode;
|
||||
|
|
|
|||
|
|
@ -2678,3 +2678,26 @@
|
|||
(is (typep (first +c.0113.3+) 'base-string))
|
||||
(is (string= (first +c.0113.4+) "bb"))
|
||||
(is (and (typep (first +c.0113.4+) 'string) (not (typep (first +c.0113.4+) 'base-string))))))
|
||||
|
||||
;;; Date 2026-03-05
|
||||
;;; Description
|
||||
;;;
|
||||
;;; Wrong order of evaluation for nested eval-when forms in the
|
||||
;;; bytecompiler.
|
||||
;;;
|
||||
(test cmp.0114.nested-eval-when
|
||||
(eval '(defparameter *nested-eval-when-0114* ""))
|
||||
(let* ((part-1 "So the last will be first, ")
|
||||
(part-2 "and the first will be last.")
|
||||
(ofile
|
||||
(with-compiler ("nested-eval-when-0114.lsp")
|
||||
`(eval-when (:load-toplevel :compile-toplevel :execute)
|
||||
(eval-when (:compile-toplevel)
|
||||
(setf *nested-eval-when-0114*
|
||||
(concatenate 'string *nested-eval-when-0114* ,part-1)))
|
||||
(setf *nested-eval-when-0114*
|
||||
(concatenate 'string *nested-eval-when-0114* ,part-2))))))
|
||||
(delete-file "nested-eval-when-0114.lsp")
|
||||
(delete-file ofile)
|
||||
(is (equal (concatenate 'string part-1 part-2)
|
||||
*nested-eval-when-0114*))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue