1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-24 06:20:43 -08:00

Make use of Lisp function declarations

* lisp/emacs-lisp/comp.el (comp-primitive-func-cstr-h): Rename.
(comp--get-function-cstr): Define new function.
(comp--add-call-cstr, comp--fwprop-call): Update.
* lisp/emacs-lisp/comp-common.el (comp-function-type-spec): Update.
* lisp/help-fns.el (help-fns--signature): Mention when a type is
declared.
* lisp/emacs-lisp/comp.el (comp-primitive-func-cstr-h): Rename.
This commit is contained in:
Andrea Corallo 2024-02-23 15:56:47 +01:00
parent 1c7b809983
commit d8c941df7d
3 changed files with 31 additions and 18 deletions

View file

@ -532,22 +532,27 @@ Account for `native-comp-eln-load-path' and `comp-native-version-dir'."
(defun comp-function-type-spec (function)
"Return the type specifier of FUNCTION.
This function returns a cons cell whose car is the function
specifier, and cdr is a symbol, either `inferred' or `know'.
If the symbol is `inferred', the type specifier is automatically
inferred from the code itself by the native compiler; if it is
`know', the type specifier comes from `comp-known-type-specifiers'."
(let ((kind 'know)
type-spec )
This function returns a cons cell whose car is the function specifier,
and cdr is a symbol, either `inferred' or `declared'. If the symbol is
`inferred', the type specifier is automatically inferred from the code
itself by the native compiler; if it is `declared', the type specifier
comes from `comp-known-type-specifiers' or the function type declaration
itself."
(let ((kind 'declared)
type-spec)
(when-let ((res (assoc function comp-known-type-specifiers)))
;; Declared primitive
(setf type-spec (cadr res)))
(let ((f (and (symbolp function)
(symbol-function function))))
(when (and f
(null type-spec)
(subr-native-elisp-p f))
(setf kind 'inferred
type-spec (subr-type f))))
(when (and f (null type-spec))
(if-let ((delc-type (function-get function 'declared-type)))
;; Declared Lisp function
(setf type-spec (car delc-type))
(when (subr-native-elisp-p f)
;; Native compiled inferred
(setf kind 'inferred
type-spec (subr-type f))))))
(when type-spec
(cons type-spec kind))))