git.fiddlerwoaroof.com
Browse code

feat(sbcl): add my own version of load-asd

Edward Langley authored on 22/10/2022 21:12:34
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))