heap: Fix heap-remove! master
authorDavid Thompson <dthompson2@worcester.edu>
Mon, 13 Apr 2020 01:56:21 +0000 (21:56 -0400)
committerDavid Thompson <dthompson2@worcester.edu>
Mon, 13 Apr 2020 01:56:21 +0000 (21:56 -0400)
It totally trashed the underlying vector before, now it behaves
properly.

chickadee/heap.scm

index db9bea9..3a7d17e 100644 (file)
@@ -96,7 +96,8 @@
   (let ((size (1- (heap-size heap)))
         (< (heap-< heap)))
     (define (finish hole)
-      (heap-set! heap hole (heap-ref heap (heap-size heap)))
+      (heap-set! heap (heap-size heap) #f)
+      (heap-set! heap 0 #f)
       (set-heap-size! heap size)
       *unspecified*)
 
             (if (< (heap-ref heap hole) (heap-ref heap child))
                 (finish hole)
                 (begin
+                  (heap-set! heap 0 (heap-ref heap hole))
                   (heap-set! heap hole (heap-ref heap child))
+                  (heap-set! heap child (heap-ref heap 0))
                   (loop child))))))))
 
 (define (heap-clear! heap)