fix HtDP local' to work better with macros that expand to
begin'
In particular, the forms within `begin' need to be partially expanded before checking whether they're allowed.
This commit is contained in:
parent
82116cc3bd
commit
a53f51d92d
|
@ -1636,13 +1636,13 @@
|
|||
;; forms know that it's ok to expand in this internal
|
||||
;; definition context.
|
||||
[int-def-ctx (build-expand-context (make-expanding-for-intermediate-local))])
|
||||
(let* ([partly-expanded-defns
|
||||
(map (lambda (d)
|
||||
(local-expand
|
||||
d
|
||||
int-def-ctx
|
||||
(kernel-form-identifier-list)))
|
||||
defns)]
|
||||
(let* ([partly-expand (lambda (d)
|
||||
(local-expand
|
||||
d
|
||||
int-def-ctx
|
||||
(kernel-form-identifier-list)))]
|
||||
[partly-expanded-defns
|
||||
(map partly-expand defns)]
|
||||
[flattened-defns
|
||||
(let loop ([l partly-expanded-defns][origs defns])
|
||||
(apply
|
||||
|
@ -1653,7 +1653,7 @@
|
|||
;; or `define-syntaxes', because only macros can generate
|
||||
;; them
|
||||
[(begin defn ...)
|
||||
(let ([l (syntax->list (syntax (defn ...)))])
|
||||
(let ([l (map partly-expand (syntax->list (syntax (defn ...))))])
|
||||
(loop l l))]
|
||||
[(define-values . _)
|
||||
(list d)]
|
||||
|
|
|
@ -115,3 +115,15 @@
|
|||
(htdp-err/rt-test (-) (exn-type-and-msg exn:application:arity? "-: expects at least 1 argument, given 0"))
|
||||
(htdp-err/rt-test (/) (exn-type-and-msg exn:application:arity? "/: expects at least 1 argument, given 0"))
|
||||
;(htdp-test 1 (/ 1) exn:application:arity?)
|
||||
|
||||
;; Check that `local' works with macros that expand to `begin':
|
||||
(module my-multi-defn racket/base
|
||||
(provide multi)
|
||||
(define-syntax-rule (multi a b)
|
||||
(begin
|
||||
(define a 1)
|
||||
(define b 2))))
|
||||
(htdp-teachpack my-multi-defn)
|
||||
|
||||
(htdp-test '(2 1) 'local (local [(multi x y)]
|
||||
(list y x)))
|
||||
|
|
Loading…
Reference in New Issue
Block a user