From 3bbad3df6d269e8df41f50a0f7fba978a4b7be8f Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 9 Apr 2024 14:49:45 +0200 Subject: [PATCH] Repair latent error of mismatched key types --- syndicate/skeleton.rkt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/syndicate/skeleton.rkt b/syndicate/skeleton.rkt index 4a6b8cf..da4bf99 100644 --- a/syndicate/skeleton.rkt +++ b/syndicate/skeleton.rkt @@ -345,13 +345,15 @@ [(key (in-list path))] (step-term term key))) +(define (index? k) (exact-nonnegative-integer? k)) + (define (step-term term key) (cond [(non-object-struct? term) (define v (struct->vector term)) (define k (+ key 1)) ;; skip the label - (if (>= k (vector-length v)) (void) (vector-ref v k))] + (when (and (index? k) (< k (vector-length v))) (vector-ref v k))] [(list? term) - (if (>= key (length term)) (void) (list-ref term key))] + (when (and (index? key) (< key (length term))) (list-ref term key))] [(hash? term) (hash-ref term key (void))] [else