diff options
author | Andy Wingo <wingo@pobox.com> | 2009-06-06 14:07:29 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2009-06-07 00:53:48 +0200 |
commit | 4bcc952d4500d484cc43df47e2f7d64e5bc14ff3 (patch) | |
tree | a8ba84cda4a39227837a4a42e2a2183679fa1e72 /module/oop/goops | |
parent | 12798872ff39e27dbcf90675c3d3554ae27df750 (diff) | |
download | guile-4bcc952d4500d484cc43df47e2f7d64e5bc14ff3.tar.gz |
fix bug in goops' method cache with rest args
* module/oop/goops/compile.scm (code-table-lookup): Fix a tricky little
bug!
* test-suite/tests/goops.test ("the method cache"): Add a wee test.
Diffstat (limited to 'module/oop/goops')
-rw-r--r-- | module/oop/goops/compile.scm | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/module/oop/goops/compile.scm b/module/oop/goops/compile.scm index e6b13c416..732c1bccd 100644 --- a/module/oop/goops/compile.scm +++ b/module/oop/goops/compile.scm @@ -34,11 +34,12 @@ (define code-table-lookup (letrec ((check-entry (lambda (entry types) - (if (null? types) - (and (not (struct? (car entry))) - entry) - (and (eq? (car entry) (car types)) - (check-entry (cdr entry) (cdr types))))))) + (cond + ((not (pair? entry)) (and (null? types) entry)) + ((null? types) #f) + (else + (and (eq? (car entry) (car types)) + (check-entry (cdr entry) (cdr types)))))))) (lambda (code-table types) (cond ((null? code-table) #f) ((check-entry (car code-table) types)) |