From 6e9ccd3f4398e13b9d9bf9e0581819b673795a36 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 1 Dec 2008 12:54:16 +0000 Subject: [PATCH] better checking of case where a local name is used before it is defined (in an int-def context) svn: r12659 --- collects/scheme/private/class-internal.ss | 14 ++++++++++++++ collects/scheme/private/classidmap.ss | 12 +++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/collects/scheme/private/class-internal.ss b/collects/scheme/private/class-internal.ss index 37006a569d..d98c6625bf 100644 --- a/collects/scheme/private/class-internal.ss +++ b/collects/scheme/private/class-internal.ss @@ -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 ;;-------------------------------------------------------------------- diff --git a/collects/scheme/private/classidmap.ss b/collects/scheme/private/classidmap.ss index f46886cf2f..b88fb8b098 100644 --- a/collects/scheme/private/classidmap.ss +++ b/collects/scheme/private/classidmap.ss @@ -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?)))