Fix bug: wrong number of tags was being stored in cache when variadic
authorChris Hanson <org/chris-hanson/cph>
Sun, 30 Apr 2006 01:43:55 +0000 (01:43 +0000)
committerChris Hanson <org/chris-hanson/cph>
Sun, 30 Apr 2006 01:43:55 +0000 (01:43 +0000)
generic procedure had a method with more than the minimum number of
arguments and was called with that number of arguments.  (Thanks to
Zev Benjamin for finding this.)

v7/src/runtime/generic.scm

index 8d854e38ff208cdd1a642619ba52c2afcbc4d9ab..91514c4591801ef5128ef40f52079e22155bbf0b 100644 (file)
@@ -1,8 +1,8 @@
 #| -*-Scheme-*-
 
-$Id: generic.scm,v 1.13 2005/04/16 04:26:35 cph Exp $
+$Id: generic.scm,v 1.14 2006/04/30 01:43:55 cph Exp $
 
-Copyright 1996,2003,2005 Massachusetts Institute of Technology
+Copyright 1996,2003,2005,2006 Massachusetts Institute of Technology
 
 This file is part of MIT/GNU Scheme.
 
@@ -24,6 +24,7 @@ USA.
 |#
 
 ;;;; Generic Procedures
+;;; package: (runtime generic-procedure)
 
 (declare (usual-integrations)
         (integrate-external "gentag" "gencache"))
@@ -262,8 +263,9 @@ USA.
   (let ((tags
         (let ((p (list 'TAGS)))
           (do ((args args (cdr args))
-               (p p (cdr p)))
-              ((not (pair? args)))
+               (p p (cdr p))
+               (i (generic-record/arity-min record) (fix:- i 1)))
+              ((not (fix:> i 0)))
             (set-cdr! p (list (dispatch-tag (car args)))))
           (cdr p))))
     (let ((procedure