Wed Jun 10 13:55:55 CEST 2009 Tobias Rautenkranz <tobias@rautenkranz.ch>
* Fix ownership transfer for non cxx:class objects.
hunk ./src/clos.lisp 193
+ (assert (virtual-destructor-p superclass)
+ ()
+ "The class ~A has a non virtual destructor." superclass)
+ [_$_]
hunk ./src/clos.lisp 308
- (transfer-ownership-to value object))))))
+ (when (typep value 'smoke-standard-object)
+ (transfer-ownership-to value object)))))))
hunk ./src/clos.lisp 453
- (assert (not (member object (owned-objects new-owner)))
- ()
- "~A has already been called for ~A." #'keep-wrapper object)
+ (when (member object (owned-objects new-owner))
+ (cerror "ignore" "~A has already been called for ~A."
+ #'keep-wrapper object))
hunk ./src/clos.lisp 464
- (if (typep (class-of object) 'cxx:class)
- (progn
- (assert (virtual-destructor-p (class-of object))
- ()
- "The ownership of the object ~A is transfered to C++, but
-it has a nonvirtual destructor." object)
- (keep-wrapper object new-owner))
- (when (and (typep object 'smoke-standard-object)
- (not (virtual-destructor-p (class-of object))))
- (remove-object (pointer object)))))
+ (if (virtual-destructor-p (class-of object))
+ (keep-wrapper object new-owner)
+ (remove-object (pointer object))))
hunk ./src/clos.lisp 468
-