diff options
| author | Paul Pogonyshev <pogonyshev@gmail.com> | 2016-03-26 11:19:43 +0300 |
|---|---|---|
| committer | Eli Zaretskii <eliz@gnu.org> | 2016-03-26 11:19:43 +0300 |
| commit | 6f3243db55e61847784178ea812f28ddf003544a (patch) | |
| tree | e2bbb4e4c3a49ab661524135c6b1a610580431b8 /src/bytecode.c | |
| parent | 368b9bb45f125061506d43af4bd4791ab2cfd7b9 (diff) | |
| download | emacs-6f3243db55e61847784178ea812f28ddf003544a.tar.gz | |
Implement 'func-arity'
* src/eval.c (Ffunc_arity, lambda_arity): New functions.
* src/bytecode.c (get_byte_code_arity): New function.
* src/lisp.h (get_byte_code_arity): Add prototype.
* doc/lispref/functions.texi (What Is a Function): Document
'func-arity'.
* etc/NEWS: Mention 'func-arity'.
* test/src/fns-tests.el (fns-tests-func-arity): New test set.
Diffstat (limited to 'src/bytecode.c')
| -rw-r--r-- | src/bytecode.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/bytecode.c b/src/bytecode.c index 9ae2e820d51..4ff15d2912a 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -1987,6 +1987,24 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth, return result; } +/* `args_template' has the same meaning as in exec_byte_code() above. */ +Lisp_Object +get_byte_code_arity (Lisp_Object args_template) +{ + if (INTEGERP (args_template)) + { + ptrdiff_t at = XINT (args_template); + bool rest = (at & 128) != 0; + int mandatory = at & 127; + ptrdiff_t nonrest = at >> 8; + + return Fcons (make_number (mandatory), + rest ? Qmany : make_number (nonrest)); + } + else + error ("Unknown args template!"); +} + void syms_of_bytecode (void) { |
