fix define-type for PLAI beginner (but plain old define is still a problem)

svn: r791
This commit is contained in:
Matthew Flatt 2005-09-07 21:23:21 +00:00
parent bc105baff0
commit 3eeac2cf66

View File

@ -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))