Browse code
feat(sbcl): add my own version of load-asd
Showing 1 changed files
... | ... |
@@ -193,41 +193,38 @@ |
193 | 193 |
(namestring target)))) |
194 | 194 |
|
195 | 195 |
|
196 |
-(uiop:with-upgradability () |
|
197 |
- (defclass fw-define-op (asdf:define-op) |
|
198 |
- ((%systems-before :initarg :systems-before :reader systems-before) |
|
199 |
- (%new-systems :initarg :new-systems :accessor new-systems))) |
|
200 |
- (defmethod asdf:operate :before ((o fw-define-op) (c asdf:system) &key) |
|
201 |
- (setf (slot-value o '%systems-before) (asdf:registered-systems))) |
|
202 |
- (defmethod asdf:operate :after ((o fw-define-op) (c asdf:system) &key) |
|
203 |
- (setf (new-systems o) (set-difference (asdf:registered-systems) |
|
204 |
- (slot-value o '%systems-before) |
|
205 |
- :test 'equal))) |
|
206 |
- (defun load-asd (pathname &key name) |
|
207 |
- "Load system definitions from PATHNAME. |
|
196 |
+(defclass fw-define-op (asdf:define-op) |
|
197 |
+ ((%systems-before :reader systems-before :initform (asdf:registered-systems)) |
|
198 |
+ (%new-systems :initarg :new-systems :accessor new-systems))) |
|
199 |
+(defmethod asdf:operate :after ((o fw-define-op) (c asdf:system) &key) |
|
200 |
+ (setf (new-systems o) (set-difference (asdf:registered-systems) |
|
201 |
+ (slot-value o '%systems-before) |
|
202 |
+ :test 'equal))) |
|
203 |
+(defun load-asd (pathname &key name) |
|
204 |
+ "Load system definitions from PATHNAME. |
|
208 | 205 |
NAME if supplied is the name of a system expected to be defined in that file. |
209 | 206 |
|
210 | 207 |
Do NOT try to load a .asd file directly with CL:LOAD. Always use ASDF:LOAD-ASD." |
211 |
- (asdf/session:with-asdf-session () |
|
212 |
- ;; TODO: use OPERATE, so we consult the cache and only load once per session. |
|
213 |
- (flet ((do-it (o c) (asdf:operate o c))) |
|
214 |
- (let ((primary-name (asdf:primary-system-name (or name (pathname-name pathname)))) |
|
215 |
- (operation (asdf:make-operation 'fw-define-op))) |
|
216 |
- (uiop:if-let (system (asdf:registered-system primary-name)) |
|
217 |
- (progn |
|
218 |
- ;; We already determine this to be obsolete --- |
|
219 |
- ;; or should we move some tests from find-system to check for up-to-date-ness here? |
|
220 |
- (setf (asdf/action:component-operation-time operation system) t |
|
221 |
- (asdf/system:definition-dependency-list system) nil |
|
222 |
- (asdf/system:definition-dependency-set system) |
|
223 |
- (uiop:list-to-hash-set nil)) |
|
224 |
- (do-it operation system)) |
|
225 |
- (let ((system (make-instance 'asdf/system:undefined-system |
|
226 |
- :name primary-name :source-file pathname))) |
|
227 |
- (asdf/system-registry:register-system system) |
|
228 |
- (unwind-protect (do-it operation system) |
|
229 |
- (when (typep system 'asdf/system:undefined-system) |
|
230 |
- (asdf:clear-system system)))))))))) |
|
208 |
+ (asdf/session:with-asdf-session () |
|
209 |
+ ;; TODO: use OPERATE, so we consult the cache and only load once per session. |
|
210 |
+ (flet ((do-it (o c) (asdf:operate o c))) |
|
211 |
+ (let ((primary-name (asdf:primary-system-name (or name (pathname-name pathname)))) |
|
212 |
+ (operation (asdf:make-operation 'fw-define-op))) |
|
213 |
+ (uiop:if-let (system (asdf:registered-system primary-name)) |
|
214 |
+ (progn |
|
215 |
+ ;; We already determine this to be obsolete --- |
|
216 |
+ ;; or should we move some tests from find-system to check for up-to-date-ness here? |
|
217 |
+ (setf (asdf/action:component-operation-time operation system) t |
|
218 |
+ (asdf/system:definition-dependency-list system) nil |
|
219 |
+ (asdf/system:definition-dependency-set system) |
|
220 |
+ (uiop:list-to-hash-set nil)) |
|
221 |
+ (do-it operation system)) |
|
222 |
+ (let ((system (make-instance 'asdf/system:undefined-system |
|
223 |
+ :name primary-name :source-file pathname))) |
|
224 |
+ (asdf/system-registry:register-system system) |
|
225 |
+ (unwind-protect (do-it operation system) |
|
226 |
+ (when (typep system 'asdf/system:undefined-system) |
|
227 |
+ (asdf:clear-system system))))))))) |
|
231 | 228 |
|
232 | 229 |
(export |
233 | 230 |
(defmacro vj ((op &rest args)) |