fix and export in-dict sequence syntax

closes PR 13772

Also add syntax for in-dict-{keys,values}.
This commit is contained in:
Ryan Culpepper 2013-05-24 13:33:02 -04:00
parent eb82c717ba
commit 64666b2689

View File

@ -302,11 +302,46 @@
[((key-id val-id) (_ dict-expr))
#'[(key-id val-id)
(:do-in ([(d) dict-expr])
(void)
(unless (d:dict? d)
(raise-argument-error 'in-dict "dict?" d))
([i (d:dict-iterate-first d)])
i
([key-id (d:dict-iterate-key d i)]
[val-id (d:dict-iterate-value d i)])
([(key-id) (d:dict-iterate-key d i)]
[(val-id) (d:dict-iterate-value d i)])
#t
#t
((d:dict-iterate-next d i)))]]
[_ #f])))
(define-sequence-syntax :in-dict-keys
(lambda () #'in-dict-keys)
(lambda (stx)
(syntax-case stx ()
[((key-id) (_ dict-expr))
#'[(key-id)
(:do-in ([(d) dict-expr])
(unless (d:dict? d)
(raise-argument-error 'in-dict-keys "dict?" d))
([i (d:dict-iterate-first d)])
i
([(key-id) (d:dict-iterate-key d i)])
#t
#t
((d:dict-iterate-next d i)))]]
[_ #f])))
(define-sequence-syntax :in-dict-values
(lambda () #'in-dict-values)
(lambda (stx)
(syntax-case stx ()
[((val-id) (_ dict-expr))
#'[(key-id val-id)
(:do-in ([(d) dict-expr])
(unless (d:dict? d)
(raise-argument-error 'in-dict-values "dict?" d))
([i (d:dict-iterate-first d)])
i
([(val-id) (d:dict-iterate-value d i)])
#t
#t
((d:dict-iterate-next d i)))]]
@ -355,19 +390,19 @@
val+pos-true))))
(define (dict-map d f)
(for/list ([(k v) (in-dict d)])
(for/list ([(k v) (:in-dict d)])
(f k v)))
(define (dict-for-each d f)
(for ([(k v) (in-dict d)])
(for ([(k v) (:in-dict d)])
(f k v)))
(define (dict-keys d)
(for/list ([k (in-dict-keys d)])
(for/list ([k (:in-dict-keys d)])
k))
(define (dict-values d)
(for/list ([v (in-dict-values d)])
(for/list ([v (:in-dict-values d)])
v))
(define (dict->list d)
@ -540,8 +575,8 @@
[create-immutable-custom-hash make-immutable-custom-hash])
make-weak-custom-hash
in-dict
in-dict-keys
in-dict-values
(rename-out [:in-dict in-dict]
[:in-dict-keys in-dict-keys]
[:in-dict-values in-dict-values])
in-dict-pairs)