Fix casting across Smoke modules.
Thu Feb 18 19:31:47 CET 2010 Tobias Rautenkranz <tobias@rautenkranz.ch>
* 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-13 11:03:24.000000000 +0200
+++ new-smoke/src/clos.lisp 2014-10-13 11:03:24.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-13 11:03:24.000000000 +0200
+++ new-smoke/src/objects/class.lisp 2014-10-13 11:03:24.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))