From c7d67f9babc2496aaf295a08264b79750785314b Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Tue, 9 Nov 2010 17:02:29 -0500 Subject: [PATCH] *SL: first and rest should not report errors in terms of car and cdr. --- .../deinprogramm/signature/signature-unit.rkt | 21 +++++++++++++++---- collects/lang/private/teachprims.rkt | 4 ++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/collects/deinprogramm/signature/signature-unit.rkt b/collects/deinprogramm/signature/signature-unit.rkt index df0c92f833..a0f027464c 100644 --- a/collects/deinprogramm/signature/signature-unit.rkt +++ b/collects/deinprogramm/signature/signature-unit.rkt @@ -5,6 +5,7 @@ (require scheme/promise mzlib/struct + (only-in racket/list first rest) (for-syntax scheme/base) (for-syntax stepper/private/shared)) @@ -34,7 +35,7 @@ prop:lazy-wrap lazy-wrap? lazy-wrap-ref make-lazy-wrap-signature check-lazy-wraps! - make-pair-signature checked-car checked-cdr)) + make-pair-signature checked-car checked-cdr checked-first checked-rest)) (define-unit signatures@ (import signature-messages^) @@ -596,8 +597,10 @@ (checked-access (ephemeron-value eph)))) (else (raw-access p))))) -(define checked-raw-car (checked-pair-access checked-pair-car car)) -(define checked-raw-cdr (checked-pair-access checked-pair-cdr cdr)) +(define checked-raw-car (checked-pair-access checked-pair-car car)) +(define checked-raw-cdr (checked-pair-access checked-pair-cdr cdr)) +(define checked-raw-first (checked-pair-access checked-pair-car first)) +(define checked-raw-rest (checked-pair-access checked-pair-cdr rest)) (define (checked-raw-set! checked-set!) (lambda (p new) @@ -665,5 +668,15 @@ (cdr p) (check-lazy-wraps! checked-pair-descriptor p) (checked-raw-cdr p)) - + +(define (checked-first p) + (first p) + (check-lazy-wraps! checked-pair-descriptor p) + (checked-raw-first p)) + +(define (checked-rest p) + (rest p) + (check-lazy-wraps! checked-pair-descriptor p) + (checked-raw-rest p)) + ) diff --git a/collects/lang/private/teachprims.rkt b/collects/lang/private/teachprims.rkt index 2d588519fc..56e999ab60 100644 --- a/collects/lang/private/teachprims.rkt +++ b/collects/lang/private/teachprims.rkt @@ -184,13 +184,13 @@ namespace. (lambda (p) (checked-car p))) (define-teach beginner first - (lambda (p) (checked-car p))) + (lambda (p) (checked-first p))) (define-teach beginner cdr (lambda (p) (checked-cdr p))) (define-teach beginner rest - (lambda (p) (checked-cdr p))) + (lambda (p) (checked-rest p))) (define-teach beginner list* (lambda x