From 95be967547cdaad47e2eb1e375d7dda68aa34659 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Tue, 29 Sep 2020 11:29:44 -0400 Subject: array-list: Clear old elements so they can be GC'd. --- chickadee/array-list.scm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/chickadee/array-list.scm b/chickadee/array-list.scm index 54a11e8..3b11ec1 100644 --- a/chickadee/array-list.scm +++ b/chickadee/array-list.scm @@ -93,10 +93,19 @@ (define (array-list-pop! array-list) (let* ((index (1- (array-list-size array-list))) (item (array-list-ref array-list index))) + ;; Remove element reference so it can be GC'd. + (array-list-set! array-list index #f) (set-array-list-size! array-list index) item)) (define (array-list-clear! array-list) + (let ((size (array-list-size array-list)) + (vec (array-list-vector array-list))) + ;; Remove all element references so they can be GC'd. + (let loop ((i 0)) + (when (< i size) + (vector-set! vec i #f) + (loop (1+ i))))) (set-array-list-size! array-list 0) *unspecified*) -- cgit v1.2.3