Use strcmp, fix constructor & destrucor calling for classes witn namespace (phonon::MediaPlayer) and add :arg0 to :arg2 initargs
Thu Jul 23 00:26:05 CEST 2009 Tobias Rautenkranz <tobias@rautenkranz.ch>
* Use strcmp, fix constructor & destrucor calling for classes witn namespace (phonon::MediaPlayer) and add :arg0 to :arg2 initargs
hunk ./TODO 1
-Methods:
- * C++ overload resolution & argument promotion
- => no more writing (make-instance 'qt:byte-array :args ("foo"))
- * Test for null pointer in this and for references
- * default arguments
- * fetch name of arguments
-
-* const correctness
-
-* keyword arguments for make-instance
-
-* QApplication and KCmdLineArgs.init call exit() on e.g. "--help"
-
-Testsuite:
- * Fix segfaults when lots of qt:applictions are created & deleted
- * Test condition & restarts
-
-finalization:
- * get rid of owned-p
- * use QObject::deleteLater ?
-
-* Exceptions
rmfile ./TODO
hunk ./src/clos.lisp 22
- ;; At least on sbcl 1.0.25.debian CONCATENATE is faster
- ;; than VECTOR-PUSH-EXTEND
+ ;; At least on sbcl 1.0.25.debian CONCATENATE is faster than
+ ;; VECTOR-PUSH-EXTEND.
hunk ./src/clos.lisp 124
- T)
+ t)
hunk ./src/clos.lisp 127
- T)
+ t)
hunk ./src/clos.lisp 248
- ((object-pointer :pointer))
+ ((object-pointer :pointer))
hunk ./src/clos.lisp 270
- 'smoke-stack-item)
- arg)
+ 'smoke-stack-item)
+ arg)
hunk ./src/clos.lisp 289
+ ;;
hunk ./src/clos.lisp 291
- ;; passed on the stack. E.g. converted-value can be something like
- ;; (cxx:operator-variant value).
+ ;; passed on the stack. E.g. converted-value can be something
+ ;; like (cxx:operator-variant value).
hunk ./src/clos.lisp 318
- ;; Do not allow overwriting methods of classes the users has not derived from (like in C++),
- ;; to reduce overhead.
+ ;; Do not allow overwriting methods of classes the users has
+ ;; not derived from (like in C++), to reduce overhead.
hunk ./src/clos.lisp 321
- :smoke (gethash (pointer-address (smoke-get-smoke binding))
+ :smoke (gethash (pointer-address
+ (smoke-get-smoke binding))
hunk ./src/clos.lisp 414
+(defun constructor-name (class)
+ (let ((name-start (search "::" (name class) :from-end t)))
+ (if name-start
+ (subseq (name class) (+ name-start 2))
+ (name class))))
+
hunk ./src/clos.lisp 423
- (name (class-of object)))))
+ (constructor-name (class-of object)))))
+ (assert (valid-p method)
+ (method)
+ "No constructor for ~A." object)
hunk ./src/clos.lisp 429
- (find-best-viable-function (name (class-of object))
+ (find-best-viable-function (constructor-name (class-of object))
hunk ./src/clos.lisp 433
- (error "No constructor ~A for ~S"
- object arguments))
+ (error "No constructor for object ~A with
+the arguments ~S." object arguments))
hunk ./src/clos.lisp 441
- &key args &allow-other-keys)
+ &key args
+ (arg0 nil arg0p)
+ (arg1 nil arg1p)
+ (arg2 nil arg2p)
+ &allow-other-keys)
hunk ./src/clos.lisp 455
- (setf (slot-value object 'pointer) (call-constructor object args))
+ (if arg0p
+ (setf (slot-value object 'pointer) [_$_]
+ (call-constructor object [_$_]
+ (cond
+ (arg2p (list arg0 arg1 arg2))
+ (arg1p (list arg0 arg1))
+ (t (list arg0)))))
+ (setf (slot-value object 'pointer) (call-constructor object args)))
hunk ./src/object-map.lisp 67
- (assert (has-pointer-p pointer)
- (pointer)
- "No object to remove for pointer ~A." pointer)
- (remhash (pointer-address pointer) *object-map*))
+ (unless (remhash (pointer-address pointer) *object-map*)
+ (cerror "ignore" "No object to remove for pointer ~A." pointer)))
hunk ./src/object-map.lisp 103
+
+(defun debug-finalize ()
+ (eval '(defmethod make-finalize :around (object)
+ (let ((pointer (pointer object))
+ (class (class-of object))
+ (next (call-next-method)))
+ #'(lambda ()
+ (format *debug-io* "cl-smoke: finalizing: ~A..."
+ (make-instance class :pointer pointer))
+ (funcall next)
+ (format *debug-io* "done~%"))))))
hunk ./src/objects/class.lisp 122
- (assert (<= class-index
- (smoke-array-length
- (smoke-module-classes (smoke class)))))
+ (assert (<= class-index (smoke-array-length
+ (smoke-module-classes (smoke class)))))
hunk ./src/objects/class.lisp 126
- (smoke-add-superclass class (append classes
- (list
- (make-smoke-class-from-id (smoke class)
- class-index)))
- (1+ index)))))
+ (smoke-add-superclass
+ class (append classes
+ (list
+ (make-smoke-class-from-id (smoke class)
+ class-index)))
+ (1+ index)))))
hunk ./src/objects/method.lisp 50
+(declaim (inline smoke-method-name))
+(defun smoke-method-name (method)
+ (mem-aref (smoke-array-pointer (smoke-module-method-names [_$_]
+ (smoke-method-smoke method)))
+ :pointer
+ (the (smoke-index 0)
+ (method-slot-value method 'name))))
+
hunk ./src/objects/stack.lisp 11
- (/ [_$_]
- (- (pointer-address (call-stack-top stack))
- (pointer-address (call-stack-pointer stack)))
- (foreign-type-size 'smoke-stack-item)))
+ (/ (- (pointer-address (call-stack-top stack))
+ (pointer-address (call-stack-pointer stack)))
+ (foreign-type-size 'smoke-stack-item)))
hunk ./src/overload-resolution.lisp 6
-(defun cstring= (string1 string2)
- "Returns T when the C strings STRING1 and STRING2 are equal
- and NIL otherwise."
- (declare (optimize (speed 3) (safety 0)))
- (dotimes (i array-total-size-limit)
- (let ((char1 (mem-aref string1 :char i))
- (char2 (mem-aref string2 :char i)))
- (when (/= char1 char2)
- (return-from cstring= nil))
- (when (or (= 0 char1)
- (= 0 char2))
- (return-from cstring= (= char1 char2))))))
-
hunk ./src/overload-resolution.lisp 8
- "Returns -1 if a < b; 0 if a = b and 1 if a > b"
- (declare (values (integer -1 1)))
- (if (< a b)
- -1
- (if (> a b)
- 1
- 0)))
+ (- a b))
hunk ./src/overload-resolution.lisp 10
-(declaim (inline cstring-cmp))
-(defun cstring-cmp (string1 string2)
- "Compares the C strings STRING1 and STRING2."
- (declare (foreign-pointer string1 string2)
- (values (integer -1 1))
- (optimize (speed 3)))
- (dotimes (i array-total-size-limit (error "omg"))
- (let ((char1 (mem-aref string1 :char i))
- (char2 (mem-aref string2 :char i)))
- (when (/= char1 char2)
- (return-from cstring-cmp (if (< char1 char2) -1 1)))
- (when (= 0 char1) ;; <=> (= 0 char2)
- (return-from cstring-cmp 0)))))
+(declaim (inline strcmp))
+(defcfun strcmp :int (s1 :pointer) (s2 :pointer))
hunk ./src/overload-resolution.lisp 13
+(declaim (inline cstring/=))
hunk ./src/overload-resolution.lisp 17
- (declare (optimize (speed 3)))
- (dotimes (i array-total-size-limit)
- (let ((char1 (mem-aref string1 :char i))
- (char2 (mem-aref string2 :char i)))
- (when (/= char1 char2)
- (return-from cstring/= i))
- (when (= 0 char1)
- (return-from cstring/= nil)))))
-
-(declaim (inline smoke-method-name))
-(defun smoke-method-name (method)
- (mem-aref (smoke-array-pointer (smoke-module-method-names [_$_]
- (smoke-method-smoke method)))
- :pointer
- (the (smoke-index 0)
- (method-slot-value method 'name))))
+ (not (zerop (strcmp string1 string2))))
hunk ./src/overload-resolution.lisp 24
- (values (integer -1 1))
hunk ./src/overload-resolution.lisp 27
- (declare (type (integer -1 1) id-cmp)
- (dynamic-extent id-cmp))
+ (declare (type smoke-index id-cmp))
hunk ./src/overload-resolution.lisp 30
- (cstring-cmp (smoke-method-name method)
+ (strcmp (smoke-method-name method)
hunk ./src/overload-resolution.lisp 33
-;;; INLINE OPTIMIZE
hunk ./src/overload-resolution.lisp 68
- (cmp (the (integer -1 1) (method-cmp method class-id name))))
- (declare (type (integer -1 1) cmp)
+ (cmp (the smoke-index (method-cmp method class-id name))))
+ (declare (type smoke-index cmp)
hunk ./src/overload-resolution.lisp 71
- (ecase cmp
- (-1 (setf start (1+ index)))
- (0 (return-from find-method-for-class index))
- (1 (setf end (1- index)))))))
+ (if (< cmp 0)
+ (setf start (1+ index))
+ (if (> cmp 0)
+ (setf end (1- index))
+ (return-from find-method-for-class index))))))
hunk ./src/overload-resolution.lisp 85
- ,index))
+ (the smoke-index ,index)))
hunk ./src/overload-resolution.lisp 126
+ ;;
hunk ./src/overload-resolution.lisp 131
- (let ((methods)
- (smoke (smoke class)))
+ (let ((methods))
hunk ./src/overload-resolution.lisp 133
- (let ((start-index (find-method-for-class name class)))
- (declare (type smoke-index start-index))
- (loop for index from start-index downto 1
- while (push-candidate-method index name argument-count class
- methods))
- (loop for index from (1+ start-index)
- to (the smoke-index (smoke-array-length
- (smoke-module-method-maps smoke)))
- while (push-candidate-method index name argument-count class
- methods))))
+ (let ((smoke (smoke class)))
+ (let ((start-index (find-method-for-class name class)))
+ (declare (type smoke-index start-index))
+ (when (>= start-index 0)
+ (loop for index from start-index downto 1
+ while (push-candidate-method index name argument-count class
+ methods))
+ (loop for index from (1+ start-index)
+ to (the smoke-index (smoke-array-length
+ (smoke-module-method-maps smoke)))
+ while (push-candidate-method index name argument-count class
+ methods))))))
hunk ./src/overload-resolution.lisp 147
-(eval-when (:compile-toplevel :load-toplevel :execute)
-(defconstant +exact-match+ 0)
-(defconstant +promotion+ 1)
-(defconstant +conversion+ 2))
-
hunk ./src/overload-resolution.lisp 154
-(defstruct (exact-match (:include conversion (rank +exact-match+))))
+(defstruct (exact-match (:include conversion (rank 0))))
hunk ./src/overload-resolution.lisp 156
-(defstruct (promotion (:include conversion (rank +promotion+))))
+(defstruct (promotion (:include conversion (rank 1))))
hunk ./src/overload-resolution.lisp 158
-(defstruct (number-conversion (:include conversion (rank +conversion+))))
+(defstruct (number-conversion (:include conversion (rank 2))))
hunk ./src/overload-resolution.lisp 160
-(defstruct (pointer-conversion (:include conversion (rank (1+ +conversion+))))
+(defstruct (pointer-conversion (:include conversion (rank 3)))
hunk ./src/overload-resolution.lisp 164
-(defstruct (boolean-conversion (:include conversion (rank (+ 2 +conversion+)))))
+(defstruct (boolean-conversion (:include conversion (rank 4))))
hunk ./src/overload-resolution.lisp 166
-(defstruct (user-conversion (:include conversion (rank (+ 3 +conversion+)))))
+(defstruct (user-conversion (:include conversion (rank 5))))
hunk ./src/overload-resolution.lisp 199
- t)
- (:method ((conversion1 pointer-conversion) (conversion2 pointer-conversion))
- (and (not (conversion< conversion1 conversion2))
- (not (conversion< conversion2 conversion1)))))
+ t))
hunk ./src/overload-resolution.lisp 326
+ (8 (object.typep '(c-integer :long)))
+ (9 (object.typep '(c-integer :unsigned-long)))
hunk ./src/overload-resolution.lisp 397
- ;; Not using pointer-p to allow passing a raw pointer for
- ;; objects on the stack and references
+ ;; Not using pointer-p to allow passing a raw pointer for objects on
+ ;; the stack and references.
hunk ./src/overload-resolution.lisp 401
- ;; FIXME this breaks passing pointers to references
- ;; e.g.: calling the function foo(QByteArray& foo)
- ;; with (foo pointer) assumes pointer to point to a QByteArray,
- ;; but actually the conversion sequence QByteArray(pointer) should be used.
- ;; When pointer is a null pointer it fails horribly!.
+ ;; FIXME this breaks passing pointers to references.
+ ;; [_$_]
+ ;; e.g.: calling the function foo(QByteArray& foo) with
+ ;; (foo pointer) assumes pointer to point to a QByteArray, but
+ ;; actually the conversion sequence QByteArray(pointer) should be
+ ;; used. When pointer is a null pointer it fails horribly!.
hunk ./src/overload-resolution.lisp 451
- (format nil "~A" (name (get-class type)))
+ (constructor-name (get-class type))
hunk ./src/package.lisp 34
+ #:make-auto-pointer
hunk ./src/smoke.lisp 83
- (let ((method-name (concatenate 'string "~" (name class))))
+ (let ((method-name (concatenate 'string "~" (constructor-name class))))
hunk ./src/smoke.lisp 86
- pointer))
- (setf pointer (null-pointer)))
+ pointer)))
hunk ./src/smoke.lisp 146
-;; No eql T since all-methods is to slow to be used in conjunction with
-;; mb:document
-(defmethod documentation ((gf smoke-gf) (doc-type (eql 'cxx-function)))
+(defmethod documentation ((gf smoke-gf) (doc-type (eql 't)))
hunk ./src/smoke.lisp 153
+
+(declaim (inline cstring=))
+(defun cstring= (string1 string2)
+ "Returns T when the C strings STRING1 and STRING2 are equal
+ and NIL otherwise."
+ (zerop (strcmp string1 string2)))
+
hunk ./src/smoke.lisp 163
- (declare (string name)
- (optimize (speed 3)))
+ (declare (optimize (speed 3)))
+ (with-foreign-string (name name)
hunk ./src/smoke.lisp 167
- #'(lambda (address value)
- (declare (ignore value))
- (let ((smoke (make-pointer address)))
- (map-methods #'(lambda (method)
- (when (and (string= name (name method))
- (not (enum-p method)))
- (push (make-instance 'smoke-method
- :id (smoke-method-id method)
- :smoke (smoke method))
- methods)))
- smoke)))
- *smoke-id-class-map*)
- methods))
+ #'(lambda (address module)
+ (declare (ignore address))
+ (map-methods #'(lambda (method)
+ (when (and (cstring= name (smoke-method-name method))
+ (not (enum-p method)))
+ (push (make-smoke-method
+ :id (smoke-method-id method)
+ :smoke (smoke-method-smoke method))
+ methods)))
+ module))
+ *smoke-modules*)
+ methods)))
hunk ./src/smoke.lisp 193
- (eval-when (:compile-toplevel :load-toplevel :execute)
- (define-foreign-library ,library
- (:unix ,(format nil "~(~A~).so.2" library))
- (t (:default ,(format nil "~(~A~)" library)))))
+ (eval-when (:compile-toplevel :load-toplevel :execute)
+ (define-foreign-library ,library
+ (:unix ,(format nil "~(~A~).so.2" library))
+ (t (:default ,(format nil "~(~A~)" library)))))
hunk ./src/smoke.lisp 198
- (load-foreign-library ',library))
+ (load-foreign-library ',library))
hunk ./src/smoke.lisp 200
-; (eval-when (:compile-toplevel :load-toplevel :execute)
-; (define-foreign-library ,library
-; (:unix ,(format nil "~(~A~).so.2" library))
-; (t (:default ,(format nil "~(~A~)" library))))
-; (load-foreign-library ',library))