Sun Jan 10 18:30:48 CET 2010 Tobias Rautenkranz * Auto-recompile when the smoke module has changed. diff -rN -u old-smoke/src/smoke-to-clos.lisp new-smoke/src/smoke-to-clos.lisp --- old-smoke/src/smoke-to-clos.lisp 2014-10-30 08:08:57.000000000 +0100 +++ new-smoke/src/smoke-to-clos.lisp 2014-10-30 08:08:57.000000000 +0100 @@ -87,17 +87,21 @@ (eval smoke))))))) (defmacro check-recompile (smoke) - "Raises an error when the fasl of the DEFINE-METHOS was not compiled against -the current smoke module." - `(eval-when (:load-toplevel :execute) - (unless (sizes= (,smoke) - smoke-module-methods - smoke-module-method-names - smoke-module-method-maps - smoke-module-classes - smoke-module-types) - (error "The smoke module ~A changed, you need to recompile the lisp file." - (smoke-get-module-name (smoke-module-pointer ,smoke)))))) + "Raises an error or tries to recompile when the fasl of the define-classes-and-gfs +was not compiled against the current smoke module." + (with-unique-names (restart) + `(eval-when (:load-toplevel :execute) + (unless (sizes= (,smoke) + smoke-module-methods + smoke-module-method-names + smoke-module-method-maps + smoke-module-classes + smoke-module-types) + (let ((,restart (find-restart 'asdf:try-recompiling))) + (if ,restart + (invoke-restart ,restart) + (error "The smoke module ~A changed, you need to recompile the lisp file." + (smoke-get-module-name (smoke-module-pointer ,smoke))))))))) (defmacro define-classes-and-gfs (package smoke) "Process the C++ methods of the Smoke module SMOKE.