From b0ed216b6f17f9f63fbf1d9542c0722241317837 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 8 Nov 2013 11:41:28 +0100 Subject: [PATCH] Fix case-lambda* dispatching to agree with manual. * module/system/vm/assembler.scm (kw-prelude): Emit br-if-npos-gt as appropriate. --- module/system/vm/assembler.scm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/module/system/vm/assembler.scm b/module/system/vm/assembler.scm index 7020487fd..58c00ef99 100644 --- a/module/system/vm/assembler.scm +++ b/module/system/vm/assembler.scm @@ -791,7 +791,10 @@ returned instead." (define-macro-assembler (kw-prelude asm nreq nopt rest? kw-indices allow-other-keys? nlocals alternate) (if alternate - (emit-br-if-nargs-lt asm nreq alternate) + (begin + (emit-br-if-nargs-lt asm nreq alternate) + (unless rest? + (emit-br-if-npos-gt asm nreq (+ nreq nopt) alternate))) (emit-assert-nargs-ge asm nreq)) (let ((ntotal (fold (lambda (kw ntotal) (match kw