From 11f84eb9eea14fd4d94091a32665fb8766b9ff96 Mon Sep 17 00:00:00 2001 From: Andrea Corallo Date: Sun, 5 May 2024 23:16:20 +0200 Subject: [PATCH] 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. (cherry picked from commit 77f87d4b489fcb332fc3d8d3d4a8080e7e1818fd) --- lisp/emacs-lisp/comp.el | 9 +++++++-- 1 file 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 -- 2.39.5