compatibility/collects/racket/private/old-rp.rkt
Matthew Flatt 7b544af2a5 move most of the 'scheme' collection to the 'racket' collection
original commit: c95a39875453e7f057395a7bf626e5d2ed732e7e
2010-04-20 15:24:48 -06:00

64 lines
2.2 KiB
Racket

(module old-rp '#%kernel
(#%require (for-syntax '#%kernel "stx.rkt" "small-scheme.rkt" "stxcase-scheme.rkt"))
(#%provide require require-for-syntax require-for-template require-for-label
provide provide-for-syntax provide-for-label)
(define-values-for-syntax (rebuild-elem)
(lambda (stx elem sub pos loop ids)
;; For sub-forms, we loop and reconstruct:
(for-each (lambda (id)
(unless (identifier? id)
(raise-syntax-error
#f
"expected an identifier"
stx
id)))
(syntax->list ids))
(let rloop ([elem elem][pos pos])
(if (syntax? elem)
(datum->syntax elem
(rloop (syntax-e elem) pos)
elem
elem)
(if (zero? pos)
(cons (loop (car elem))
(cdr elem))
(cons (car elem)
(rloop (cdr elem) (sub1 pos))))))))
(define-syntaxes (require require-for-syntax require-for-template require-for-label)
(let ([mk
(lambda (for-stx)
(lambda (stx)
(syntax-case stx ()
[(_ elem ...)
(if for-stx
(with-syntax ([for for-stx])
(syntax/loc stx
(#%require (for-meta for (just-meta 0 elem ...)))))
(syntax/loc stx
(#%require elem ...)))])))])
(values (mk #f)
(mk #'1)
(mk #'-1)
(mk #'#f))))
(define-syntaxes (provide provide-for-syntax provide-for-label)
(let ([mk
(lambda (for-stx)
(lambda (stx)
(syntax-case stx ()
[(_ elem ...)
(if for-stx
(with-syntax ([for for-stx])
(syntax/loc stx
(#%provide (for elem ...))))
(syntax/loc stx
(#%provide elem ...)))])))])
(values (mk #f)
(mk #'for-syntax)
(mk #'for-label)))))