From 086a1b75255c0cce0a5d9634e27fee319f3d18d9 Mon Sep 17 00:00:00 2001 From: Jay McCarthy Date: Fri, 9 Aug 2013 09:07:50 -0600 Subject: [PATCH] Update gc2 based on an error found by Robby's student --- pkgs/plai/gc2/mutator.rkt | 13 ++++++------- .../tests/gc2/good-collectors/good-collector.rkt | 2 +- pkgs/plai/tests/gc2/good-mutators/yixi.rkt | 8 ++++++++ 3 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 pkgs/plai/tests/gc2/good-mutators/yixi.rkt diff --git a/pkgs/plai/gc2/mutator.rkt b/pkgs/plai/gc2/mutator.rkt index efae8f0c58..0fc235cc5a 100644 --- a/pkgs/plai/gc2/mutator.rkt +++ b/pkgs/plai/gc2/mutator.rkt @@ -268,14 +268,13 @@ leftovers (cons (make-root 'closure-root (λ () this-loc) - (λ (v) - (set! this-loc v) - (this-setter v) - (for ([root (in-list this-other-roots)]) - (set-root! v)))) + (λ (v) (set! this-loc v) + (this-setter v) + (for ([root (in-list this-other-roots)]) + (set-root! v)))) closure-roots))]))) (parameterize ([active-roots remaining-roots]) - (collector:closure closure closure-roots))) + (collector:closure closure (reverse closure-roots)))) (define-syntax (mutator-app stx) (syntax-case stx () @@ -627,7 +626,7 @@ (apply (closure-code-proc v) (append (for/list ([i (in-range (closure-code-env-count v))]) - (collector:closure-env-ref proc/loc i)) + (collector:closure-env-ref proc/loc i)) args)))] [else (error 'procedure-application "expected procedure, given ~e" v)])) diff --git a/pkgs/plai/tests/gc2/good-collectors/good-collector.rkt b/pkgs/plai/tests/gc2/good-collectors/good-collector.rkt index 87497439e0..a241a0ba88 100644 --- a/pkgs/plai/tests/gc2/good-collectors/good-collector.rkt +++ b/pkgs/plai/tests/gc2/good-collectors/good-collector.rkt @@ -93,7 +93,7 @@ A collector for use in testing the random mutator generator. (define (gc:first pr-ptr) (if (equal? (heap-ref pr-ptr) 'pair) (heap-ref (+ pr-ptr 1)) - (error 'first "non pair"))) + (error 'first "non pair: loc ~e val ~e" pr-ptr (heap-ref pr-ptr)))) (test (with-heap (vector 'free 'flat 3 'pair 0 1) (gc:first 3)) diff --git a/pkgs/plai/tests/gc2/good-mutators/yixi.rkt b/pkgs/plai/tests/gc2/good-mutators/yixi.rkt new file mode 100644 index 0000000000..66b9510dbb --- /dev/null +++ b/pkgs/plai/tests/gc2/good-mutators/yixi.rkt @@ -0,0 +1,8 @@ +#lang plai/gc2/mutator +(allocator-setup "../good-collectors/good-collector.rkt" 255) + +(define (f b) 17) +(define (g l f) + ((lambda (x) (f (first l))) + 1)) +(g '(3) f) \ No newline at end of file