diff --git a/pkgs/plai/gc2/private/gc-core.rkt b/pkgs/plai/gc2/private/gc-core.rkt index a4c5648050..f3040573f5 100644 --- a/pkgs/plai/gc2/private/gc-core.rkt +++ b/pkgs/plai/gc2/private/gc-core.rkt @@ -98,7 +98,13 @@ (provide/contract [root? (-> any/c boolean?)] [root-name (-> root? any/c)] - [make-root (-> any/c (-> location?) (-> location? void) root?)]) + [make-root (-> any/c (-> location?) (-> location? void) root?)] + [simple-root (-> location? root?)]) + +(define (simple-root n) + (make-root 'simple-root + (λ () n) + (λ (n2) (set! n n2)))) (provide make-env-root) (define-syntax (make-env-root stx) diff --git a/pkgs/plai/scribblings/collector2.scrbl b/pkgs/plai/scribblings/collector2.scrbl index c4a4fdd782..3fce9e821c 100644 --- a/pkgs/plai/scribblings/collector2.scrbl +++ b/pkgs/plai/scribblings/collector2.scrbl @@ -96,6 +96,10 @@ Determines if @racket[v] is a root. Updates @racket[root] to refer to @racket[loc]. } +@defproc[(simple-root [l location?]) root?]{ + Makes a root that is initialized with @racket[l]. +} + @defproc[(make-root [name symbol?] [get (-> location?)] [set (-> location? void?)]) root?]{ Creates a new root. When @racket[read-root] is called, it invokes