Fix describe function arglist for native compiled lisp/d (bug#42572)
* lisp/help.el (help-function-arglist): Handle the case of native compiled lisp/d. * src/data.c (syms_of_data): Register new subrs. (Fsubr_native_dyn_p, Fsubr_native_lambda_list): New primitives. * test/src/comp-tests.el (comp-tests-dynamic-help-arglist): New test.
This commit is contained in:
parent
bce9cad421
commit
c6f42387e3
3 changed files with 35 additions and 2 deletions
|
@ -1337,6 +1337,7 @@ the same names as used in the original source code, when possible."
|
|||
((and (byte-code-function-p def) (listp (aref def 0))) (aref def 0))
|
||||
((eq (car-safe def) 'lambda) (nth 1 def))
|
||||
((eq (car-safe def) 'closure) (nth 2 def))
|
||||
((subr-native-dyn-p def) (subr-native-lambda-list def))
|
||||
((or (and (byte-code-function-p def) (integerp (aref def 0)))
|
||||
(subrp def) (module-function-p def))
|
||||
(or (when preserve-names
|
||||
|
|
29
src/data.c
29
src/data.c
|
@ -875,14 +875,37 @@ SUBR must be a built-in function. */)
|
|||
}
|
||||
|
||||
DEFUN ("subr-native-elisp-p", Fsubr_native_elisp_p, Ssubr_native_elisp_p, 1, 1,
|
||||
0, doc: /* Return t if the object is native compiled lisp function,
|
||||
nil otherwise. */)
|
||||
0, doc: /* Return t if the object is native compiled lisp
|
||||
function, nil otherwise. */)
|
||||
(Lisp_Object object)
|
||||
{
|
||||
return SUBR_NATIVE_COMPILEDP (object) ? Qt : Qnil;
|
||||
}
|
||||
|
||||
#ifdef HAVE_NATIVE_COMP
|
||||
|
||||
DEFUN ("subr-native-dyn-p", Fsubr_native_dyn_p,
|
||||
Ssubr_native_dyn_p, 1, 1, 0,
|
||||
doc: /* Return t if the subr is native compiled lisp/d
|
||||
function, nil otherwise. */)
|
||||
(Lisp_Object subr)
|
||||
{
|
||||
return SUBR_NATIVE_COMPILED_DYNP (subr) ? Qt : Qnil;
|
||||
}
|
||||
|
||||
DEFUN ("subr-native-lambda-list", Fsubr_native_lambda_list,
|
||||
Ssubr_native_lambda_list, 1, 1, 0,
|
||||
doc: /* Return the lambda list of native compiled lisp/d
|
||||
function. */)
|
||||
(Lisp_Object subr)
|
||||
{
|
||||
CHECK_SUBR (subr);
|
||||
|
||||
return SUBR_NATIVE_COMPILED_DYNP (subr)
|
||||
? XSUBR (subr)->lambda_list[0]
|
||||
: Qnil;
|
||||
}
|
||||
|
||||
DEFUN ("subr-native-comp-unit", Fsubr_native_comp_unit,
|
||||
Ssubr_native_comp_unit, 1, 1, 0,
|
||||
doc: /* Return the native compilation unit. */)
|
||||
|
@ -4028,6 +4051,8 @@ syms_of_data (void)
|
|||
defsubr (&Ssubr_name);
|
||||
defsubr (&Ssubr_native_elisp_p);
|
||||
#ifdef HAVE_NATIVE_COMP
|
||||
defsubr (&Ssubr_native_dyn_p);
|
||||
defsubr (&Ssubr_native_lambda_list);
|
||||
defsubr (&Ssubr_native_comp_unit);
|
||||
defsubr (&Snative_comp_unit_file);
|
||||
defsubr (&Snative_comp_unit_set_file);
|
||||
|
|
|
@ -582,6 +582,13 @@ https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-03/msg00914.html."
|
|||
(should (equal '(2 . many)
|
||||
(func-arity #'comp-tests-ffuncall-callee-opt-rest-dyn-f))))
|
||||
|
||||
(ert-deftest comp-tests-dynamic-help-arglist ()
|
||||
"Test `help-function-arglist' works on lisp/d (bug#42572)."
|
||||
(should (equal (help-function-arglist
|
||||
(symbol-function #'comp-tests-ffuncall-callee-opt-rest-dyn-f)
|
||||
t)
|
||||
'(a b &optional c &rest d))))
|
||||
|
||||
(ert-deftest comp-tests-cl-macro-exp ()
|
||||
"Verify CL macro expansion (bug#42088)."
|
||||
(should (equal (comp-tests-cl-macro-exp-f) '(a b))))
|
||||
|
|
Loading…
Add table
Reference in a new issue