diff --git a/module/ice-9/psyntax.scm b/module/ice-9/psyntax.scm index bd4bd6723..054d21795 100644 --- a/module/ice-9/psyntax.scm +++ b/module/ice-9/psyntax.scm @@ -744,18 +744,19 @@ (search-list-rib sym subst marks symnames fst mod)))))))) (define search-list-rib (lambda (sym subst marks symnames ribcage mod) - (let f ((symnames symnames) (i 0)) + (let f ((symnames symnames) + (rlabels (ribcage-labels ribcage)) + (rmarks (ribcage-marks ribcage))) (cond ((null? symnames) (search sym (cdr subst) marks mod)) - ((and (eq? (car symnames) sym) - (same-marks? marks (list-ref (ribcage-marks ribcage) i))) - (let ((n (list-ref (ribcage-labels ribcage) i))) + ((and (eq? (car symnames) sym) (same-marks? marks (car rmarks))) + (let ((n (car rlabels))) (if (pair? n) (if (equal? mod (car n)) (values (cdr n) marks) - (f (cdr symnames) (fx+ i 1))) + (f (cdr symnames) (cdr rlabels) (cdr rmarks))) (values n marks)))) - (else (f (cdr symnames) (fx+ i 1))))))) + (else (f (cdr symnames) (cdr rlabels) (cdr rmarks))))))) (define search-vector-rib (lambda (sym subst marks symnames ribcage mod) (let ((n (vector-length symnames)))