summaryrefslogtreecommitdiff
path: root/module/system/vm/assembler.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2013-11-08 11:41:28 +0100
committerAndy Wingo <wingo@pobox.com>2013-11-08 11:41:28 +0100
commitb0ed216b6f17f9f63fbf1d9542c0722241317837 (patch)
treed71f5f016c5c7acb20901a09b27e5e09554aa2d9 /module/system/vm/assembler.scm
parentf90c0554640c6e0c28ec01ed597a3b78b47bdd29 (diff)
downloadguile-b0ed216b6f17f9f63fbf1d9542c0722241317837.tar.gz
Fix case-lambda* dispatching to agree with manual.
* module/system/vm/assembler.scm (kw-prelude): Emit br-if-npos-gt as appropriate.
Diffstat (limited to 'module/system/vm/assembler.scm')
-rw-r--r--module/system/vm/assembler.scm5
1 files changed, 4 insertions, 1 deletions
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