Thu Feb 18 19:31:47 CET 2010 Tobias Rautenkranz * Fix casting across Smoke modules. diff -rN -u old-smoke/src/clos.lisp new-smoke/src/clos.lisp --- old-smoke/src/clos.lisp 2014-10-19 03:40:44.000000000 +0200 +++ new-smoke/src/clos.lisp 2014-10-19 03:40:44.000000000 +0200 @@ -431,7 +431,9 @@ "Can not cast object ~A of class ~A to class ~A." object (name (class-of object)) (name class)) (smoke-cast (smoke-module-pointer (smoke (class-of object))) (pointer object) - (id (class-of object)) (id class))) + (id (class-of object)) + (smoke-class-id (smoke-module-pointer (smoke (class-of object))) + (name-pointer class)))) (:method ((object smoke-multi-superclass-mixin) class) (if (derived-p (class-of object) class) (call-next-method) diff -rN -u old-smoke/src/objects/class.lisp new-smoke/src/objects/class.lisp --- old-smoke/src/objects/class.lisp 2014-10-19 03:40:44.000000000 +0200 +++ new-smoke/src/objects/class.lisp 2014-10-19 03:40:44.000000000 +0200 @@ -30,6 +30,11 @@ (defmethod name ((class smoke-class)) (class-slot-value class 'name)) +(defun name-pointer (class) + (mem-ref (foreign-slot-pointer (smoke-class-pointer class) + 'smoke-class 'name) + :pointer)) + (defun class-size (smoke-class) (class-slot-value smoke-class 'size))