improve expansion of some unit forms to limit expansion size
Merge to 5.0
This commit is contained in:
parent
d76e361af4
commit
c3fdf47cc7
|
@ -546,6 +546,13 @@
|
||||||
|
|
||||||
;; build-val+macro-defs : sig -> (list syntax-object^3)
|
;; build-val+macro-defs : sig -> (list syntax-object^3)
|
||||||
(define-for-syntax (build-val+macro-defs sig)
|
(define-for-syntax (build-val+macro-defs sig)
|
||||||
|
(if (and (null? (cadr sig))
|
||||||
|
(null? (caddr sig)))
|
||||||
|
;; No renames needed; this shortcut avoids
|
||||||
|
;; an explosion of renamings, especially with chains
|
||||||
|
;; of `open':
|
||||||
|
(list #'(() (values)) #'() #'())
|
||||||
|
;; Renames and macros needes:
|
||||||
(with-syntax ([(((int-ivar . ext-ivar) ...)
|
(with-syntax ([(((int-ivar . ext-ivar) ...)
|
||||||
((((int-vid . ext-vid) ...) . vbody) ...)
|
((((int-vid . ext-vid) ...) . vbody) ...)
|
||||||
((((int-sid . ext-sid) ...) . sbody) ...)
|
((((int-sid . ext-sid) ...) . sbody) ...)
|
||||||
|
@ -556,12 +563,13 @@
|
||||||
sig)])
|
sig)])
|
||||||
(list
|
(list
|
||||||
#'((ext-ivar ... ext-vid ... ... ext-sid ... ...)
|
#'((ext-ivar ... ext-vid ... ... ext-sid ... ...)
|
||||||
(values
|
(make-rename-transformers
|
||||||
(make-rename-transformer (quote-syntax int-ivar)) ...
|
(quote-syntax
|
||||||
(make-rename-transformer (quote-syntax int-vid)) ... ...
|
(int-ivar ...
|
||||||
(make-rename-transformer (quote-syntax int-sid)) ... ...))
|
int-vid ... ...
|
||||||
|
int-sid ... ...))))
|
||||||
#'(((int-sid ...) sbody) ...)
|
#'(((int-sid ...) sbody) ...)
|
||||||
#'(((int-vid ...) vbody) ...))))
|
#'(((int-vid ...) vbody) ...)))))
|
||||||
|
|
||||||
;; build-post-val-defs : sig -> (list syntax-object)
|
;; build-post-val-defs : sig -> (list syntax-object)
|
||||||
(define-for-syntax (build-post-val-defs sig)
|
(define-for-syntax (build-post-val-defs sig)
|
||||||
|
@ -575,12 +583,24 @@
|
||||||
sig)])
|
sig)])
|
||||||
(list
|
(list
|
||||||
#'((ext-ivar ... ext-vid ... ... ext-sid ... ...)
|
#'((ext-ivar ... ext-vid ... ... ext-sid ... ...)
|
||||||
(values
|
(make-rename-transformers
|
||||||
(make-rename-transformer (quote-syntax int-ivar)) ...
|
(quote-syntax
|
||||||
(make-rename-transformer (quote-syntax int-vid)) ... ...
|
(int-ivar ...
|
||||||
(make-rename-transformer (quote-syntax int-sid)) ... ...))
|
int-vid ... ...
|
||||||
|
int-sid ... ...))))
|
||||||
#'(post-rhs ...))))
|
#'(post-rhs ...))))
|
||||||
|
|
||||||
|
;; Using `make-rename-transformers' helps improve sharing in
|
||||||
|
;; a syntax-quoted list of identifiers, although it risks
|
||||||
|
;; losting certificates as the list is broken apart; since the
|
||||||
|
;; identifiers are bound at the same point that the rename
|
||||||
|
;; transformer is introduced, certificate loss should be ok.
|
||||||
|
(define-for-syntax (make-rename-transformers ids)
|
||||||
|
(apply values
|
||||||
|
(map
|
||||||
|
make-rename-transformer
|
||||||
|
(syntax->list ids))))
|
||||||
|
|
||||||
(define-signature-form (open stx)
|
(define-signature-form (open stx)
|
||||||
(define (build-sig-elems sig)
|
(define (build-sig-elems sig)
|
||||||
(map (λ (p c)
|
(map (λ (p c)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user