From da66d4d559953b085c68ecee60fd9476cbe845b4 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 23 Jul 2012 21:40:39 -0500 Subject: [PATCH] adjust `case' expansion to work with Typed Racket Relies on the new ad hoc optimization of `hash-ref' to preserve performance. --- collects/racket/private/case.rkt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/collects/racket/private/case.rkt b/collects/racket/private/case.rkt index 4933870beb..1609e25402 100644 --- a/collects/racket/private/case.rkt +++ b/collects/racket/private/case.rkt @@ -168,17 +168,17 @@ #`[(#,(car x)) #,(cdr x)]) alist) [else #,else-exp]) - #`(let ([tbl #,(make-hashX alist)]) - #,(if (literal-expression? else-exp) - #`(hash-ref tbl #,tmp-stx #,else-exp) - #`(or (hash-ref tbl #,tmp-stx #f) - #,else-exp))))) + (let ([tbl (make-hashX alist)]) + (if (literal-expression? else-exp) + #`(hash-ref #,tbl #,tmp-stx (lambda () #,else-exp)) + #`(or (hash-ref #,tbl #,tmp-stx (lambda () #f)) + #,else-exp))))) (define (dispatch-symbol tmp-stx symbol-alist else-exp) - (dispatch-hashable tmp-stx symbol-alist make-hasheq else-exp)) + (dispatch-hashable tmp-stx symbol-alist make-immutable-hasheq else-exp)) (define (dispatch-other tmp-stx other-alist else-exp) - (dispatch-hashable tmp-stx other-alist make-hasheqv else-exp)) + (dispatch-hashable tmp-stx other-alist make-immutable-hasheqv else-exp)) (define (test-for-symbol tmp-stx alist) (define (contains? pred)