From e2f50af66c56b3cae1faed41d4f91f601dec84eb Mon Sep 17 00:00:00 2001 From: Stevie Strickland Date: Thu, 7 Jan 2010 19:36:08 +0000 Subject: [PATCH] If a contracted import doesn't have a pair value (because we haven't run the corresponding unit body yet), then result in a useful error instead of leaking internal implementation details. svn: r17541 --- collects/mzlib/unit.ss | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/collects/mzlib/unit.ss b/collects/mzlib/unit.ss index 61be0f6786..abcf09eaa5 100644 --- a/collects/mzlib/unit.ss +++ b/collects/mzlib/unit.ss @@ -468,9 +468,12 @@ (with-syntax ([ctc-stx (syntax-property ctc 'inferred-name var)]) (quasisyntax/loc (error-syntax) (quote-syntax (let ([v/c (#,loc)]) - (contract ctc-stx (car v/c) (cdr v/c) - (current-contract-region) - #,(id->contract-src-info var)))))) + (if (pair? v/c) + (contract ctc-stx (car v/c) (cdr v/c) + (current-contract-region) + #,(id->contract-src-info var)) + (error 'unit "contracted import ~a used before definition" + (quote #,(syntax-object->datum var)))))))) (quasisyntax/loc (error-syntax) (quote-syntax (#,loc)))))