From e4f9481bc1736c2c3fca6defff5f8e8e89893374 Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Tue, 27 Sep 2011 11:07:35 -0400 Subject: [PATCH] catching tail-calling bug. Appears the siuation is: if the tail call is a values, but there's some let bindings that we need to wipe out, we haven't done the proper cleanup. --- tests/more-tests/isolating-bug.expected | 3 +++ tests/more-tests/isolating-bug.rkt | 29 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 tests/more-tests/isolating-bug.expected create mode 100644 tests/more-tests/isolating-bug.rkt diff --git a/tests/more-tests/isolating-bug.expected b/tests/more-tests/isolating-bug.expected new file mode 100644 index 0000000..0eee34b --- /dev/null +++ b/tests/more-tests/isolating-bug.expected @@ -0,0 +1,3 @@ +# +# +# diff --git a/tests/more-tests/isolating-bug.rkt b/tests/more-tests/isolating-bug.rkt new file mode 100644 index 0000000..7971bc5 --- /dev/null +++ b/tests/more-tests/isolating-bug.rkt @@ -0,0 +1,29 @@ +#lang planet dyoo/whalesong/base +(require (for-syntax racket/base + syntax/struct)) + + +(define-syntax (my-define-struct stx) + (syntax-case stx () + [(_ name (fields ...) kw ...) + (with-syntax ([(names ...) + (build-struct-names #'name + (syntax->list #'(fields ...)) + #f + #f)]) + (with-syntax ([cnstr (syntax-case #'(names ...) () + [(struct:name-id constructor misc ...) + #'constructor])]) + #'(begin + (define-values (names ...) + (let () + (begin + (define-struct name (fields ...) kw ...) + (let ([cnstr (lambda args + (apply cnstr args))]) + (values names ...))))))))])) + +(my-define-struct swf (f) #:mutable) +make-swf +swf? +swf-f