fix problem with binding of *SL struct-type name and application

This commit is contained in:
Matthew Flatt 2010-08-19 07:09:34 -06:00
parent 716949f499
commit a7bc964c69

View File

@ -771,7 +771,7 @@
(let-values ([(struct: constructor-name predicate-name getter-names setter-names) (let-values ([(struct: constructor-name predicate-name getter-names setter-names)
(make-struct-names name fields stx)] (make-struct-names name fields stx)]
[(field-count) (length fields)] [(field-count) (length fields)]
[(signature-name) (gensym (syntax->datum name))] [(signature-name) (car (generate-temporaries (list name)))]
[(parametric-signature-name) [(parametric-signature-name)
(datum->syntax name (datum->syntax name
(string->symbol (string->symbol
@ -907,9 +907,18 @@
#:super struct:struct-info #:super struct:struct-info
;; support `signature' ;; support `signature'
#:property #:property
prop:procedure prop:procedure
(lambda (_ stx) (lambda (_ stx)
#'#,signature-name)) (syntax-case stx ()
[(self . args)
(raise-syntax-error
#f
(string-append
"cannot use a signature name after an"
" open parenthesis for a function call")
stx
#'self)]
[_ #'#,signature-name])))
;; support `shared' ;; support `shared'
(make-info (lambda () compile-info)))) (make-info (lambda () compile-info))))
'stepper-skip-completely 'stepper-skip-completely