]> git.eshelyaron.com Git - emacs.git/commitdiff
* Have `comp-cstr-to-type-spec' handle comp-cstr-f as well
authorAndrea Corallo <akrl@sdf.org>
Sun, 4 Jun 2023 09:26:22 +0000 (11:26 +0200)
committerAndrea Corallo <akrl@sdf.org>
Sun, 4 Jun 2023 10:53:38 +0000 (12:53 +0200)
* lisp/emacs-lisp/comp-cstr.el (comp--simple-cstr-to-type-spec): New
function.
(comp-cstr-to-type-spec): Make use of.

lisp/emacs-lisp/comp-cstr.el

index 416ca7f11b0788377357bbf86ade9419a7994a7d..c5b96a6b62950bed7ad3cdd28c80b459e19b60da 100644 (file)
@@ -1181,8 +1181,8 @@ FN non-nil indicates we are parsing a function lambda list."
       :ret (comp-type-spec-to-cstr ret)))
     (_ (error "Invalid type specifier"))))
 
-(defun comp-cstr-to-type-spec (cstr)
-  "Given CSTR return its type specifier."
+(defun comp--simple-cstr-to-type-spec (cstr)
+  "Given a non comp-cstr-f CSTR return its type specifier."
   (let ((valset (comp-cstr-valset cstr))
         (typeset (comp-cstr-typeset cstr))
         (range (comp-cstr-range cstr))
@@ -1236,6 +1236,20 @@ FN non-nil indicates we are parsing a function lambda list."
           `(not ,final)
         final))))
 
+(defun comp-cstr-to-type-spec (cstr)
+  "Given CSTR return its type specifier."
+  (cl-etypecase cstr
+    (comp-cstr-f
+     `(function
+       ,(mapcar (lambda (x)
+                  (cl-etypecase x
+                    (comp-cstr (comp-cstr-to-type-spec x))
+                    (symbol x)))
+                (comp-cstr-f-args cstr))
+       ,(comp--simple-cstr-to-type-spec (comp-cstr-f-ret cstr))))
+    (comp-cstr
+     (comp--simple-cstr-to-type-spec cstr))))
+
 (provide 'comp-cstr)
 
 ;;; comp-cstr.el ends here