From 716c16a4c409eaa18804c0e9c8f70982c99afb9e Mon Sep 17 00:00:00 2001 From: Yiyun Liu Date: Thu, 5 Jun 2025 22:24:43 -0400 Subject: [PATCH] Update to treelist for the heap --- semantics.rkt | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/semantics.rkt b/semantics.rkt index 4c0c68b..1300666 100644 --- a/semantics.rkt +++ b/semantics.rkt @@ -1,31 +1,27 @@ #lang typed/racket (require "ast.rkt") - +(require racket/treelist) (: prelude CoreProgram) (define prelude '((define (I x) x) (define (K x y) x) (define (K1 x y) y) (define (S f g x) ((f x) (g x))) (define (compose f g x) (f (g x))) (define (twice f) ((compose f) f)))) (struct State ([stack : Stack] [dump : Dump] [heap : Heap] [globals : Globals] [stats : Stats])) -(define-type Addr Symbol) +(define-type Addr Index) (define-type Stack (Listof Addr)) (define-type Dump Null) -(define-type Heap (Immutable-HashTable Addr Node)) +(define-type Heap (TreeListof Node)) (define-type Node (∪ (List Addr Addr) CoreScDefn Integer)) (define-type Globals (Immutable-HashTable Name Addr)) (define-type Stats Nonnegative-Integer) (: empty-heap Heap) (define empty-heap - (make-immutable-hash)) + (treelist)) (: empty-globals Globals) (define empty-globals (make-immutable-hash)) -(: new-addr (-> Addr)) -(define (new-addr) - (gensym)) - (: empty-dump Dump) (define empty-dump '()) @@ -52,11 +48,11 @@ (: allocate-node (-> Heap Node (Values Heap Addr))) (define (allocate-node heap node) - (let ([addr (new-addr)]) - (values (hash-set heap addr node) addr))) + (let ([heap (treelist-add heap node)]) + (values heap (treelist-length heap)))) (: lookup-node (-> Heap Addr Node)) -(define lookup-node hash-ref) +(define lookup-node treelist-ref) (: lookup-globals (-> Globals Name Addr)) (define lookup-globals hash-ref)