From 69963a1f2c50c902a174af45b96aa21d2d79a6d6 Mon Sep 17 00:00:00 2001 From: Mike Sperber Date: Thu, 6 Jan 2011 13:53:51 +0100 Subject: [PATCH] Fix bug in struct-wrap signature checking. Only check the fields if we know the struct type is right. --- .../deinprogramm/signature/signature-unit.rkt | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/collects/deinprogramm/signature/signature-unit.rkt b/collects/deinprogramm/signature/signature-unit.rkt index fda7d31700..1e20bf2096 100644 --- a/collects/deinprogramm/signature/signature-unit.rkt +++ b/collects/deinprogramm/signature/signature-unit.rkt @@ -484,32 +484,32 @@ (make-signature name (lambda (self thing) - (if (not (predicate thing)) (signature-violation thing self #f #f) - (let ((log (wrap-ref thing))) - (cond - ((not log) - (wrap-set! thing - (make-lazy-wrap-log (list not-checked) '()))) - ((not (let () - (define (<=? sigs1 sigs2) - (andmap signature<=? sigs1 sigs2)) - (define (check wrap-field-signatures) - (ormap (lambda (field-signatures) - (<=? wrap-field-signatures field-signatures)) - field-signatures-list)) - (or (ormap (lambda (wrap-not-checked) - (andmap check - (lazy-log-not-checked-field-signatures-list wrap-not-checked))) - (lazy-wrap-log-not-checked log)) - (ormap check (lazy-wrap-log-checked log))))) - (wrap-set! thing - (make-lazy-wrap-log (cons not-checked (lazy-wrap-log-not-checked log)) - (lazy-wrap-log-checked log))))))) + (begin + (let ((log (wrap-ref thing))) + (cond + ((not log) + (wrap-set! thing + (make-lazy-wrap-log (list not-checked) '()))) + ((not (let () + (define (<=? sigs1 sigs2) + (andmap signature<=? sigs1 sigs2)) + (define (check wrap-field-signatures) + (ormap (lambda (field-signatures) + (<=? wrap-field-signatures field-signatures)) + field-signatures-list)) + (or (ormap (lambda (wrap-not-checked) + (andmap check + (lazy-log-not-checked-field-signatures-list wrap-not-checked))) + (lazy-wrap-log-not-checked log)) + (ormap check (lazy-wrap-log-checked log))))) + (wrap-set! thing + (make-lazy-wrap-log (cons not-checked (lazy-wrap-log-not-checked log)) + (lazy-wrap-log-checked log)))))) - (when eager-checking? - (check-lazy-wraps! type-descriptor thing)) + (when eager-checking? + (check-lazy-wraps! type-descriptor thing)))) thing) (delay syntax)