better checking of case where a local name is used before it is defined (in an int-def context)

svn: r12659
This commit is contained in:
Matthew Flatt 2008-12-01 12:54:16 +00:00
parent df62fbad79
commit 6e9ccd3f43
2 changed files with 21 additions and 5 deletions

View File

@ -173,6 +173,20 @@
[super-instantiate super-instantiate-param]
[super-new super-new-param])
;;--------------------------------------------------------------------
;; local member name lookup
;;--------------------------------------------------------------------
(define-for-syntax (localize orig-id)
(do-localize orig-id #'validate-local-member))
(define (validate-local-member orig s)
(if (symbol? s)
s
(error 'local-member-name
"used before its definition: ~a"
orig)))
;;--------------------------------------------------------------------
;; class macros
;;--------------------------------------------------------------------

View File

@ -293,15 +293,17 @@
(define-struct private-name (orig-id gen-id))
(define (localize orig-id)
(define (do-localize orig-id validate-local-member-stx)
(let loop ([id orig-id])
(let ([v (syntax-local-value id (lambda () #f))])
(cond
[(and v (private-name? v))
(list 'unquote
(binding (private-name-orig-id v)
id
(private-name-gen-id v)))]
(list validate-local-member-stx
(list 'quote orig-id)
(binding (private-name-orig-id v)
id
(private-name-gen-id v))))]
[(and (set!-transformer? v)
(s!t? (set!-transformer-procedure v)))
(s!t-ref (set!-transformer-procedure v) 1)]
@ -353,6 +355,6 @@
make-init-error-map make-init-redirect super-error-map
make-with-method-map
flatten-args make-method-call
make-private-name localize
do-localize make-private-name
generate-super-call generate-inner-call
generate-class-expand-context class-top-level-context?)))