Fix methods and method-maps bounds.
Fri Jul 3 11:50:05 CEST 2009 Tobias Rautenkranz <tobias@rautenkranz.ch>
* Fix methods and method-maps bounds.
diff -rN -u old-smoke/src/object-map.lisp new-smoke/src/object-map.lisp
--- old-smoke/src/object-map.lisp 2014-10-26 05:47:06.000000000 +0100
+++ new-smoke/src/object-map.lisp 2014-10-26 05:47:06.000000000 +0100
@@ -40,7 +40,7 @@
(eval-on-save ()
(loop for object being the hash-value of *object-map* do
- (warn "life object ~A" (class-of object))
+ (warn "life object ~A" object)
(remove-finalizer object)
(setf (slot-value object 'pointer) (null-pointer)))
(clrhash *object-map*))
diff -rN -u old-smoke/src/objects/method.lisp new-smoke/src/objects/method.lisp
--- old-smoke/src/objects/method.lisp 2014-10-26 05:47:06.000000000 +0100
+++ new-smoke/src/objects/method.lisp 2014-10-26 05:47:06.000000000 +0100
@@ -85,7 +85,7 @@
(optimize (speed 3)))
(let ((method (make-smoke-method :smoke smoke :id 0))
(length (smoke-array-length (smoke-module-methods smoke))))
- (loop for id from 1 to length do
+ (loop for id from 0 below length do ;; exception: methods is < lenght
(setf (smoke-method-id method) id)
(funcall function method))))
diff -rN -u old-smoke/src/overload-resolution.lisp new-smoke/src/overload-resolution.lisp
--- old-smoke/src/overload-resolution.lisp 2014-10-26 05:47:06.000000000 +0100
+++ new-smoke/src/overload-resolution.lisp 2014-10-26 05:47:06.000000000 +0100
@@ -93,7 +93,7 @@
(let* ((start 1) ;; 0 is "no method"
(class-id (id class))
(smoke (smoke class))
- (end (smoke-array-length (smoke-module-method-maps smoke))))
+ (end (1+ (smoke-array-length (smoke-module-method-maps smoke)))))
(declare (type (smoke-index 0) start end))
(loop until (> start end) do
(let* ((index (the smoke-index (floor (+ end start) 2)))