Change the way boot inits work to accomodate packages with multiple files.
authorChris Hanson <org/chris-hanson/cph>
Wed, 8 Feb 2017 04:34:37 +0000 (20:34 -0800)
committerChris Hanson <org/chris-hanson/cph>
Wed, 8 Feb 2017 04:34:37 +0000 (20:34 -0800)
src/runtime/boot.scm

index 3350632a88f11524baaa2d11ce0eafea6abe2a39..36fcd08e137237a2c4a2853290ff1caed5738f3a 100644 (file)
@@ -156,18 +156,23 @@ USA.
 (define (save-boot-inits! environment)
   (let ((inits (reverse! boot-inits)))
     (set! boot-inits #f)
-    ((ucode-primitive local-assignment) environment saved-boot-inits inits)))
+    (let ((p (assq environment saved-boot-inits)))
+      (if p
+         (set-cdr! p (append! (cdr p) inits))
+         (begin
+           (set! saved-boot-inits
+                 (cons (cons environment inits)
+                       saved-boot-inits))
+           unspecific)))))
 
 (define (get-boot-init-runner environment)
-  (and (not (lexical-unreferenceable? environment saved-boot-inits))
-       (let ((inits
-             ((ucode-primitive lexical-reference)
-              environment
-              saved-boot-inits)))
-        ((ucode-primitive unbind-variable) environment saved-boot-inits)
-        (lambda ()
-          (for-each (lambda (init) (init))
-                    inits)))))
+  (let ((p (assq environment saved-boot-inits)))
+    (and p
+        (let ((inits (cdr p)))
+          (set! saved-boot-inits (delq! p saved-boot-inits))
+          (lambda ()
+            (for-each (lambda (init) (init))
+                      inits))))))
 
 (define boot-inits #f)
-(define saved-boot-inits '|#[saved-boot-inits]|)
\ No newline at end of file
+(define saved-boot-inits '())
\ No newline at end of file