Skip to content

Commit

Permalink
Fix conflicts caused by case sensitivity in function arguments (#3)
Browse files Browse the repository at this point in the history
  • Loading branch information
bohonghuang committed Sep 8, 2023
1 parent 2d197cb commit 886e041
Showing 1 changed file with 26 additions and 28 deletions.
54 changes: 26 additions & 28 deletions desc.lisp
Expand Up @@ -38,8 +38,22 @@
(defun underscores->lisp-name (phrase)
(substitute #\- #\_ phrase))

(defun underscores->lisp-symbol (phrase)
(intern (string-upcase (underscores->lisp-name phrase))))
(defun underscores->lisp-symbol (phrase &optional case-sensitive-p)
(intern (funcall (if case-sensitive-p #'identity #'string-upcase) (underscores->lisp-name phrase))))

(defun callable-desc-argument-names (desc)
(let ((argument-name-case-sensitive-p nil))
(flet ((desc-args ()
(mapcar
(lambda (desc)
(let ((name (gir:name-of desc)))
(or (quoted-name-symbol name) (underscores->lisp-symbol name argument-name-case-sensitive-p))))
(gir:arguments-desc-of desc))))
(let ((args (desc-args)))
(unless (= (length (remove-duplicates args)) (length args))
(setf argument-name-case-sensitive-p t
args (desc-args)))
(values args)))))

(defun transform-class-desc (desc &optional (namespace *namespace*) (class *class*))
(catch 'skip
Expand Down Expand Up @@ -97,13 +111,9 @@
(let* ((info (gir::info-of desc))
(name (nstring-upcase (underscores->lisp-name (gir:info-get-name info))))
(symbol (intern name))
(args (mapcar (lambda (desc)
(let ((name (gir:name-of desc)))
(or (quoted-name-symbol name)
(underscores->lisp-symbol name))))
(gir::arguments-desc-of desc)))
(arg-types (mapcar #'gir:type-desc-of (gir::arguments-desc-of desc)))
(ret-types (mapcar #'gir:type-desc-of (gir::returns-desc-of desc)))
(args (callable-desc-argument-names desc))
(arg-types (mapcar #'gir:type-desc-of (gir:arguments-desc-of desc)))
(ret-types (mapcar #'gir:type-desc-of (gir:returns-desc-of desc)))
(class-name (or (quoted-name-symbol class) (camel-case->lisp-symbol class)))
(proc-arg-fn (loop :for (arg-text arg-len) :on args ; (const char* text, int len, ...) -> (text ... &aux (len (length text)))
:for (arg-text-type arg-len-type) :on arg-types
Expand Down Expand Up @@ -146,11 +156,7 @@
(let* ((info (gir::info-of desc))
(name (nstring-upcase (underscores->lisp-name (gir:info-get-name info))))
(symbol (intern name))
(args (mapcar (lambda (desc)
(let ((name (gir:name-of desc)))
(or (quoted-name-symbol name)
(underscores->lisp-symbol name))))
(gir::arguments-desc-of desc)))
(args (callable-desc-argument-names desc))
(class-name (or (quoted-name-symbol class)
(camel-case->lisp-symbol class))))
(let ((body `(gir:invoke (,namespace ,class ',symbol) ,@args)))
Expand Down Expand Up @@ -229,13 +235,9 @@
(let* ((info (gir::info-of desc))
(name (nstring-upcase (underscores->lisp-name (gir:info-get-name info))))
(symbol (intern name))
(args (mapcar (lambda (desc)
(let ((name (gir:name-of desc)))
(or (quoted-name-symbol name)
(underscores->lisp-symbol name))))
(gir::arguments-desc-of desc)))
(arg-types (mapcar #'gir:type-desc-of (gir::arguments-desc-of desc)))
(ret-types (mapcar #'gir:type-desc-of (gir::returns-desc-of desc)))
(args (callable-desc-argument-names desc))
(arg-types (mapcar #'gir:type-desc-of (gir:arguments-desc-of desc)))
(ret-types (mapcar #'gir:type-desc-of (gir:returns-desc-of desc)))
(class-name (or (quoted-name-symbol class)
(camel-case->lisp-symbol class)))
(proc-arg-fn (loop :for (arg-text arg-len) :on args ; (const char* text, int len, ...) -> (text ... &aux (len (length text)))
Expand Down Expand Up @@ -280,13 +282,9 @@
(let* ((info (gir::info-of desc))
(name (nstring-upcase (underscores->lisp-name (gir:info-get-name info))))
(symbol (intern name))
(args (mapcar (lambda (desc)
(let ((name (gir:name-of desc)))
(or (quoted-name-symbol name)
(underscores->lisp-symbol name))))
(gir::arguments-desc-of desc)))
(arg-types (mapcar #'gir:type-desc-of (gir::arguments-desc-of desc)))
(ret-type (gir:type-desc-of (car (gir::returns-desc-of desc)))))
(args (callable-desc-argument-names desc))
(arg-types (mapcar #'gir:type-desc-of (gir:arguments-desc-of desc)))
(ret-type (gir:type-desc-of (car (gir:returns-desc-of desc)))))
(if-let ((name-symbol (quoted-name-symbol (gir:info-get-name info))))
`(defun ,name-symbol ,args
(gir:invoke (,namespace ',symbol) ,@args))
Expand Down

0 comments on commit 886e041

Please sign in to comment.