((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
}
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. */)
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);
(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))))