diff --git a/collects/plai/gc2/mutator.rkt b/collects/plai/gc2/mutator.rkt index dc6b0b5f1f..efae8f0c58 100644 --- a/collects/plai/gc2/mutator.rkt +++ b/collects/plai/gc2/mutator.rkt @@ -206,7 +206,11 @@ (syntax-case stx () [(_ (id ...) body) (let ([env-roots (syntax-parameter-value #'mutator-env-roots)]) - (with-syntax ([(free-id ...) (map syntax-local-introduce (find-referenced-locals env-roots stx))] + (with-syntax ([(free-id ...) (map syntax-local-introduce + (filter + (λ (x) (for/and ([id (in-list (syntax->list #'(id ...)))]) + (not (free-identifier=? id x)))) + (find-referenced-locals env-roots stx)))] [(env-id ...) env-roots] [closure (or (syntax-parameter-value #'mutator-name) (syntax-local-name) diff --git a/collects/tests/plai/gc2/good-mutators/nested-lam.rkt b/collects/tests/plai/gc2/good-mutators/nested-lam.rkt new file mode 100644 index 0000000000..9c167c0ced --- /dev/null +++ b/collects/tests/plai/gc2/good-mutators/nested-lam.rkt @@ -0,0 +1,6 @@ +#lang plai/gc2/mutator +(allocator-setup "../good-collectors/good-collector.rkt" 40) +(let ([x 1]) + ((λ (x) + x) + x))