From cae5cd110e438af1233b0ccb7736bd5a29ae39d3 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Tue, 16 Jul 2024 16:26:47 -0700 Subject: [PATCH] Sweep arrays in GC --- src/lisp/s-expr.pla | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/lisp/s-expr.pla b/src/lisp/s-expr.pla index 0192a5c..cf7ab08 100644 --- a/src/lisp/s-expr.pla +++ b/src/lisp/s-expr.pla @@ -105,18 +105,23 @@ def sweep_expr(expr)#0 end def sweep_used#0 - var symptr + var symptr, i, memptr, size sweep_expr(assoc_list) sweep_expr(build_list) sweep_expr(eval_last) symptr = sym_list while symptr - if symptr=>lambda - sweep_expr(symptr=>lambda) - fin if symptr=>apval sweep_expr(symptr=>apval) + elsif symptr=>lambda + sweep_expr(symptr=>lambda) + elsif symptr=>array + memptr = symptr=>array=>arraymem + size = symptr=>array=>arraysize -1 + for i = 0 to size + sweep_expr(memptr=>[i]) + next fin symptr = symptr=>link loop @@ -257,7 +262,7 @@ def new_array(dim0, dim1, dim2, dim3) aptr=>offset[1] = ofst1 aptr=>offset[2] = ofst2 aptr=>offset[3] = ofst3 - aptr=>arraysize = size + aptr=>arraysize = size/2 aptr=>arraymem = memptr return aptr end