Hi Lispers!
I research sources ASDF Library. I am not understand: Why repeat the compilation of a file (below code and details)?
(defmethod perform-with-restarts ((o compile-op) (c cl-source-file))
(loop :with state = :initial
:until (or (eq state :success)
(eq state :failure)) :do
(case state
(:recompiled
(setf state :failure)
(call-next-method)
(setf state :success))
(:failed-compile
(setf state :recompiled)
(perform-with-restarts o c))
(t
(with-simple-restart
(try-recompiling "Try recompiling ~a"
(component-name c))
(setf state :failed-compile)
(call-next-method)
(setf state :success))))))
This is bad for me: my code evaluated twice (eval-when (:compile-toplevel) ...) in a file that i am recompiled throghout select try-recompiling restart.
Details.
1. (setf state :failed-compiled)
2. error compilation.
3. select try-recompiling restart.
4. next iteration.
5. (setf state :recompiled)
6. recursive call: (perform-with-restarts o c)
(in recusive-call)
6.1 (setf state :failed-compile)
6.2 (call-next-method) = success compile
6.3 (setf state :success)
6.4 next iteration and exit call.
7. next iteration
8. (setf state :failure)
9. (call-next-method) - second compilation! ???
I understand that (call-next-method) conceptual feature. But the file should not compile twice!
Suggestions?