Unfluidize (runtime boot-definitions) internal boot-inits.
authorMatt Birkholz <puck@birchwood-abbey.net>
Thu, 13 Nov 2014 22:25:29 +0000 (15:25 -0700)
committerMatt Birkholz <puck@birchwood-abbey.net>
Fri, 14 Nov 2014 00:53:31 +0000 (17:53 -0700)
Replace the fluid-let with its expansion into a dynamic-wind, which
works only if the bootstrap proceeds in one thread and thus
thread-local values for boot-inits are not needed.

src/runtime/boot.scm

index ccec68b82a6fdb856df3ea96591dbc31935bbe9e..0dcfb41ea8a39a408f469d321007745069127c42 100644 (file)
@@ -145,9 +145,16 @@ USA.
 
 (define (load-with-boot-inits! . arguments)
   (receive (value inits)
-      (fluid-let ((boot-inits '()))
-       (let ((value (apply load arguments)))
-         (values value (reverse! boot-inits))))
+      (let ((inner '()))
+       (define (swap!)
+         (set! boot-inits (set! inner (set! boot-inits)))
+         unspecific)
+       (dynamic-wind
+           swap!
+           (lambda ()
+             (let ((value (apply load arguments)))
+               (values value (reverse! boot-inits))))
+           swap!))
     (for-each (lambda (init) (init))
              inits)
     value))