From fa4a6d4c136ffceec701ffa1fc453c6a81343d4c Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Tue, 19 Apr 2016 14:05:01 -0500 Subject: [PATCH] fix the 'just check existence' part of object/c contracts --- .../racket-test/tests/racket/contract/object.rkt | 16 ++++++++++++++++ racket/collects/racket/private/class-c-old.rkt | 9 +++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/pkgs/racket-test/tests/racket/contract/object.rkt b/pkgs/racket-test/tests/racket/contract/object.rkt index 65707cc979..b5aba9bd82 100644 --- a/pkgs/racket-test/tests/racket/contract/object.rkt +++ b/pkgs/racket-test/tests/racket/contract/object.rkt @@ -283,5 +283,21 @@ (send x3 p))) + (test/spec-passed + 'object/c-just-check-existence + '(contract (object/c m) + (new + (class object% + (super-new) + (define/public (m) 42))) + 'pos 'neg)) + + (test/pos-blame + 'object/c-just-check-existence + '(contract (object/c m) + (new + (class object% (super-new))) + 'pos 'neg)) + ) diff --git a/racket/collects/racket/private/class-c-old.rkt b/racket/collects/racket/private/class-c-old.rkt index 30d6802023..f5037cf5ff 100644 --- a/racket/collects/racket/private/class-c-old.rkt +++ b/racket/collects/racket/private/class-c-old.rkt @@ -1662,10 +1662,11 @@ (for ([m (in-list methods)] [c (in-list method-contracts)]) (when c - (let ([i (hash-ref method-ht m)] - [p ((contract-late-neg-projection c) - (blame-add-context blameĀ (format "the ~a method in" m) - #:important m))]) + (unless (just-check-existence? c) + (define i (hash-ref method-ht m)) + (define p ((contract-late-neg-projection c) + (blame-add-context blameĀ (format "the ~a method in" m) + #:important m))) (vector-set! meths i (make-method (p (vector-ref meths i) neg-party) m)))))) ;; Handle external field contracts