Andrea Corallo writes: > Eli Zaretskii writes: > >>> From: Andrea Corallo >>> Date: Tue, 23 May 2023 16:44:08 +0000 >>> >>> foo is a native-compiled Lisp function in >>> ‘~/.emacs.d/eln-cache/30.0.50-e29d76eb/test-a526a80f-5481bc95.eln’. >> >> Why does it name the .eln file, not its source .el file? Or is this >> the case when there's no .el file? > > I believe we show the .eln when this is loaded directly like (load > "xxx.eln"), IOW when we have no information on the original source. > >>> Signature: (foo N) >>> >>> Inferred type: (function (t) (or (member to-small too-big) (integer >>> 100 100))) >> >> Can you explain what is this "Inferred type" information about? > > Sure, the native compiler in the attempt of optimizing the code is > propagating value type informations over the code being compiled. > > The inferred type is formed using the arglist of the function (ATM is > not possible to specify types for arguments so they are all of type t) > and the return type. The return type is nothing more than the union of > all types inferred by the compiler at the various return point of the > function. > > At the time I wrote something about this here > . > > Also for more about CL type specifiers > . > >>> ATM I adds as well "Signature: " in front of the signature to >>> differentiate it from the type. But looking at it in restrospective it >>> might be not even necessary. >> >> We should probably preserve the current format of just showing the >> signature without any headings. > > Agreed. Okay I installed ecc1d990d9e into master to implement this, please let me know if the entry in NEWS can be improved or feel free to just do it (I'm terrible at writing). Also I'd like to improve this feature to list also the function types that are known to the compiler (Read `comp-known-type-specifiers'). ATM they lives in comp.el but would be better to move them out. Ideally I think we should have a declare syntax and maybe an extention to the DEFUN macro to cover for primitives as well, in order to have these declaration where each function is defined. But probably for now something like the attached patch is sufficient and considerably less invasive? My main questions are: is subr-x.el the right place to move them in? If not which one? Should be `comp-known-type-specifiers' be renamed into something else or it's okay? Thanks Andrea