Further checks

This commit is contained in:
Tony Garnock-Jones 2024-04-09 14:57:46 +02:00
parent 3bbad3df6d
commit 2a88896e09
1 changed files with 11 additions and 5 deletions

View File

@ -32,10 +32,13 @@
(hash-set entries (- npats 1) (Pattern-discard)) (hash-set entries (- npats 1) (Pattern-discard))
entries)) entries))
(define (entries->items entries on-missing) (define (entries->items entries)
(define max-key (apply max -1 (hash-keys entries))) (let/ec return
(for/list [(i (in-range 0 (+ max-key 1)))] (define keys (hash-keys entries))
(hash-ref entries i on-missing))) (for [(k (in-list keys))] (unless (exact-nonnegative-integer? k) (return (void))))
(define max-key (apply max -1 keys))
(for/list [(i (in-range 0 (+ max-key 1)))]
(hash-ref entries i (lambda () (return void))))))
(define (rec label pats) (Pattern-group (GroupType-rec label) (items->entries pats))) (define (rec label pats) (Pattern-group (GroupType-rec label) (items->entries pats)))
(define (arr pats) (Pattern-group (GroupType-arr) (items->entries pats))) (define (arr pats) (Pattern-group (GroupType-arr) (items->entries pats)))
@ -57,7 +60,10 @@
(define (literal-pattern->literal p) (define (literal-pattern->literal p)
(let/ec return (let/ec return
(define (e->i e) (entries->items e (lambda () (return (void))))) (define (e->i e)
(match (entries->items e)
[(? void?) (return (void))]
[items items]))
(let walk ((p p)) (let walk ((p p))
(match p (match p
[(Pattern-discard) (return (void))] [(Pattern-discard) (return (void))]