summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorAndrea Corallo <acorallo@gnu.org>2024-05-05 23:16:20 +0200
committerAndrea Corallo <acorallo@gnu.org>2024-05-05 23:58:31 +0200
commit77f87d4b489fcb332fc3d8d3d4a8080e7e1818fd (patch)
tree6995843ab1e3513ef39a6a4de79cfba4363b3827 /lisp/emacs-lisp
parent44036b32ba398cf284320285b60be35874b6eea5 (diff)
downloademacs-77f87d4b489fcb332fc3d8d3d4a8080e7e1818fd.tar.gz
Fix intra compilation unit function type declaration
* lisp/emacs-lisp/comp.el (comp-func): Add 'slot'. (comp--intern-func-in-ctxt): Update. (comp--get-function-cstr): Update.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/comp.el9
1 files changed, 7 insertions, 2 deletions
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index d7cd6b79c86..b1e4b77ae40 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -194,8 +194,10 @@ Useful to hook into pass checkers.")
(when (symbolp function)
(let ((f (symbol-function function)))
(or (gethash f comp-primitive-func-cstr-h)
- (when-let ((res (function-get function 'function-type)))
- (comp-type-spec-to-cstr (car res)))))))
+ (when-let ((type (or (when-let ((f (comp--symbol-func-to-fun function)))
+ (comp-func-declared-type f))
+ (function-get function 'function-type))))
+ (comp-type-spec-to-cstr type))))))
;; Keep it in sync with the `cl-deftype-satisfies' property set in
;; cl-macs.el. We can't use `cl-deftype-satisfies' directly as the
@@ -523,6 +525,8 @@ CFG is mutated by a pass.")
:documentation "Optimization level (see `native-comp-speed').")
(pure nil :type boolean
:documentation "t if pure nil otherwise.")
+ (declared-type nil :type list
+ :documentation "Declared function type.")
(type nil :type (or null comp-mvar)
:documentation "Mvar holding the derived return type."))
@@ -821,6 +825,7 @@ clashes."
(comp-func-lap func) lap
(comp-func-frame-size func) (comp--byte-frame-size byte-func)
(comp-func-speed func) (comp--spill-speed name)
+ (comp-func-declared-type func) (car (comp--spill-decl-spec name 'function-type))
(comp-func-pure func) (comp--spill-decl-spec name 'pure))
;; Store the c-name to have it retrievable from