Various fixes:
src/overload-resolution.lisp
Wed Sep 2 13:49:34 CEST 2009 Tobias Rautenkranz <tobias@rautenkranz.ch>
* Various fixes:
* Allow user conversions for return values
* fix destruction of objects with multiple C++ superclasses
* Fix list to QList conversion dispatch
--- old-smoke/src/overload-resolution.lisp 2014-10-30 08:10:39.000000000 +0100
+++ new-smoke/src/overload-resolution.lisp 2014-10-30 08:10:40.000000000 +0100
@@ -302,8 +302,10 @@
the function CONVERSION-FUNCTION-NAME."
`(progn ,@(loop for type-name in (ensure-list type-names)
collect `(setf (gethash ,type-name *from-lisp-translations*)
- #'(lambda (type)
- (and (subtypep type ',lisp-type)
+ #'(lambda (type type-p)
+ (and (if type-p
+ (subtypep type ',lisp-type)
+ (typep type ',lisp-type))
',conversion-function-name))))))
(define-from-lisp-translation ("void*" "const void*" "void**" "const void**")
@@ -323,7 +325,7 @@
"Test for an exact match."
(case (type-id type)
(0 (when-let (test (gethash (name type) *from-lisp-translations*))
- (funcall test (object.type-of))))
+ (funcall test object (using-typep))))
(1 (object.typep 'boolean))
(2 (object.typep 'standard-char))
(3 (object.typep '(c-integer :unsigned-char)))