--- qq-and-or.ss 2009-02-06 23:49:57.000000000 -0500 +++ /Applications/PLT/collects/scheme/private/qq-and-or.ss 2009-02-06 23:47:16.000000000 -0500 @@ -328,7 +328,32 @@ (list (quote-syntax quote) (prefab-struct-key (syntax-e x))) l2)))) - x)))))))) + ;; hash or hasheq + (if (if (syntax? x) + (hash? (syntax-e x)) + #f) + (letrec-values + (((qq-hash-assocs) + (lambda (x level) + (if (null? x) + (quote-syntax ()) + (let-values + (((pair) (car x))) + (apply-cons + (list (quote-syntax list*) + (list (quote-syntax quote) + (datum->syntax here (car pair))) + (qq (datum->syntax here (cdr pair)) level)) + (qq-hash-assocs (cdr x) level))))))) + (let-values + (((l) (qq-hash-assocs (hash-map (syntax-e x) cons) level))) + (list (if (hash-eq? (syntax-e x)) + (quote-syntax make-immutable-hasheq) + (if (hash-eqv? (syntax-e x)) + (quote-syntax make-immutable-hasheqv) + (quote-syntax make-immutable-hash))) + l))) + x))))))))) (qq form 0)) form) in-form)))))