diff options
| author | Philipp Stephani | 2017-04-22 18:04:29 +0200 |
|---|---|---|
| committer | Philipp | 2017-05-06 21:29:08 +0200 |
| commit | a3e9694078e24d19db860aa4ff8dec8bc34b59b7 (patch) | |
| tree | 235bf0857ebe0011ffd0b9cbef5f8daa242efbc1 /test/src | |
| parent | 5e47c2e52b9b7616668c5586084e0128b231272a (diff) | |
| download | emacs-a3e9694078e24d19db860aa4ff8dec8bc34b59b7.tar.gz emacs-a3e9694078e24d19db860aa4ff8dec8bc34b59b7.zip | |
Introduce new misc type for module function
This resolves a couple of FIXMEs in emacs-module.c.
* src/lisp.h (MODULE_FUNCTIONP, XMODULE_FUNCTION): New functions.
* src/alloc.c (make_module_function): New function.
(mark_object): GC support.
* src/data.c (Ftype_of, syms_of_data): Handle module function type.
* src/print.c (print_object): Print support for new type.
* src/emacs-module.c (module_make_function, Finternal_module_call):
Use new module function type, remove FIXMEs.
(module_format_fun_env): Adapt and give it external linkage.
* test/src/emacs-module-tests.el (module-function-object): Add unit
test.
Diffstat (limited to 'test/src')
| -rw-r--r-- | test/src/emacs-module-tests.el | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/test/src/emacs-module-tests.el b/test/src/emacs-module-tests.el index 93e85ae22db..7859fc5dce7 100644 --- a/test/src/emacs-module-tests.el +++ b/test/src/emacs-module-tests.el | |||
| @@ -59,6 +59,29 @@ | |||
| 59 | (ert-deftest mod-test-sum-docstring () | 59 | (ert-deftest mod-test-sum-docstring () |
| 60 | (should (string= (documentation 'mod-test-sum) "Return A + B"))) | 60 | (should (string= (documentation 'mod-test-sum) "Return A + B"))) |
| 61 | 61 | ||
| 62 | (ert-deftest module-function-object () | ||
| 63 | "Extract and test the implementation of a module function. | ||
| 64 | This test needs to be changed whenever the implementation | ||
| 65 | changes." | ||
| 66 | (let ((func (symbol-function #'mod-test-sum))) | ||
| 67 | (should (consp func)) | ||
| 68 | (should (equal (length func) 4)) | ||
| 69 | (should (equal (nth 0 func) 'lambda)) | ||
| 70 | (should (equal (nth 1 func) '(&rest args))) | ||
| 71 | (should (equal (nth 2 func) "Return A + B")) | ||
| 72 | (let ((body (nth 3 func))) | ||
| 73 | (should (consp body)) | ||
| 74 | (should (equal (length body) 4)) | ||
| 75 | (should (equal (nth 0 body) #'apply)) | ||
| 76 | (should (equal (nth 1 body) '#'internal--module-call)) | ||
| 77 | (should (equal (nth 3 body) 'args)) | ||
| 78 | (let ((obj (nth 2 body))) | ||
| 79 | (should (equal (type-of obj) 'module-function)) | ||
| 80 | (should (string-match-p | ||
| 81 | (rx "#<module function Fmod_test_sum from " | ||
| 82 | (* nonl) "mod-test" (* nonl) ">") | ||
| 83 | (prin1-to-string obj))))))) | ||
| 84 | |||
| 62 | ;; | 85 | ;; |
| 63 | ;; Non-local exists (throw, signal). | 86 | ;; Non-local exists (throw, signal). |
| 64 | ;; | 87 | ;; |