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))
entries))
(define (entries->items entries on-missing)
(define max-key (apply max -1 (hash-keys entries)))
(for/list [(i (in-range 0 (+ max-key 1)))]
(hash-ref entries i on-missing)))
(define (entries->items entries)
(let/ec return
(define keys (hash-keys entries))
(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 (arr pats) (Pattern-group (GroupType-arr) (items->entries pats)))
@ -57,7 +60,10 @@
(define (literal-pattern->literal p)
(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))
(match p
[(Pattern-discard) (return (void))]