Update to treelist for the heap
This commit is contained in:
parent
784d27d564
commit
716c16a4c4
1 changed files with 7 additions and 11 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue