From 3eeac2cf662806355985ae5fe39a39cd7b15dfce Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 7 Sep 2005 21:23:21 +0000 Subject: [PATCH] fix define-type for PLAI beginner (but plain old define is still a problem) svn: r791 --- collects/plai/plai-beginner.ss | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/collects/plai/plai-beginner.ss b/collects/plai/plai-beginner.ss index b95f543fe1..cf2f48d221 100644 --- a/collects/plai/plai-beginner.ss +++ b/collects/plai/plai-beginner.ss @@ -30,7 +30,7 @@ ;; For beginner, `define-type' requires predicates for ;; contracts, and it doesn't define contracts (define-syntax (beginner-define-type stx) - (syntax-case stx (represented-as) + (syntax-case stx () [(_ name (variant (field predicate) ...) ...) (let ([name #'name]) (unless (identifier? name) @@ -64,8 +64,12 @@ (syntax-case stx () [(_ (id ...) expr) (with-syntax ([(alt-id ...) (generate-temporaries #'(id ...))]) - #'(begin - (define-values (alt-id ...) expr) - (define-primitive id alt-id) ...))])) + (with-syntax ([top-level-hack (if (eq? 'top-level (syntax-local-context)) + #'(define-syntaxes (alt-id ...) (values)) + #'(begin))]) + #'(begin + top-level-hack + (define-primitive id alt-id) ... + (define-values (alt-id ...) expr))))])) (define-type-case beginner-type-case plai-else))