Smoke::t_class is now also used for classes not wrapped by Smoke & remove global-space part from enum symbols.
src/overload-resolution.lisp
Wed Sep 9 15:22:32 CEST 2009 Tobias Rautenkranz <tobias@rautenkranz.ch>
* Smoke::t_class is now also used for classes not wrapped by Smoke & remove global-space part from enum symbols.
--- old-smoke/src/overload-resolution.lisp 2014-10-30 08:10:28.000000000 +0100
+++ new-smoke/src/overload-resolution.lisp 2014-10-30 08:10:28.000000000 +0100
@@ -338,8 +338,11 @@
(10 (object.typep 'single-float))
(11 (object.typep 'double-float))
(12 (object.typep 'enum)) ;; FIXME enum-type
- (13 (and (object.typep 'smoke-standard-object)
- (smoke-type= (get-class type) (object.type-of))))))
+ (13 (if (class-p type)
+ (and (object.typep 'smoke-standard-object)
+ (smoke-type= (get-class type) (object.type-of)))
+ (when-let (test (gethash (name type) *from-lisp-translations*))
+ (funcall test object (using-typep)))))))
(defun make-cleanup-pointer (pointer cleanup-function)
@@ -504,7 +507,9 @@
(defun call-using-args (object-or-class name arguments)
"Calls the method NAME of OBJECT-OR-CLASS with ARGUMENTS."
- (declare (optimize (speed 3)))
+ (declare (optimize (speed 3))
+ (type (or smoke-standard-class smoke-standard-object)
+ object-or-class))
(multiple-value-bind (method sequence)
(find-best-viable-function name
arguments