fix -quic for setter functions (using QSET instead of QFUN) which are not available as EQL functions (unlike in C++)

This commit is contained in:
polos 2020-12-07 23:00:32 +01:00
parent ac63828762
commit 7f3a2145ed

View file

@ -173,6 +173,18 @@
(return-from find-qt-method (prin1-to-string (if name** (cdr name**) name)))))
(setf class (qsuper-class-name class)))))
(defun find-qt-setter (var name)
(let ((class (gethash var *classes*))
(name* (format nil " ~C~A"
(char-downcase (char name 3))
(subseq name #.(length "setX")))))
(loop
(unless class
(return))
(x:when-it (qapropos* name* class)
(return-from find-qt-setter (prin1-to-string (subseq name* 1))))
(setf class (qsuper-class-name class)))))
(defun prepare-args (args)
(remove-if (lambda (x) (search "static_cast<" x))
(cond ((and (string= "QColor" (first args)) (find (length args) '(4 5)))
@ -181,9 +193,14 @@
(let ((args* (copy-list args))
variant variant-type cursor url)
(dotimes (i (length args))
(x:when-it (and (string= "(qfun" (nth i args))
(find-qt-method (nth (1+ i) args) (nth (+ i 2) args)))
(setf (nth (+ i 2) args*) x:it)))
(when (string= "(qfun" (nth i args))
(let ((var (nth (1+ i) args))
(name (nth (+ i 2) args)))
(x:if-it (find-qt-method var name)
(setf (nth (+ i 2) args*) x:it)
(x:when-it* (find-qt-setter var name)
(setf (nth i args*) "(qset"
(nth (+ i 2) args*) x:it*))))))
(mapcar (lambda (arg)
(cond (variant
(setf variant nil)