aboutsummaryrefslogtreecommitdiffstats
path: root/test/data (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Also print function data when printing module functions.Philipp Stephani2020-01-051-1/+4
| | | | | | | | | | | | | | | | | | | This is especially useful in cases where modules only use a single entry point and use the data to dispatch to the actual function. Such a design is common for languages such as Go and C++. * src/emacs-module.c (module_function_data): New function. * src/print.c (print_vectorlike): Use it to print module function data if not NULL. (print_object): Adapt size of buffer. * test/data/emacs-module/mod-test.c (emacs_module_init): Pass some non-NULL data to ‘mod-test-sum’. (Fmod_test_sum): Check that correct data is passed through. * test/src/emacs-module-tests.el (mod-test-sum-test) (module-function-object): Adapt unit tests.
* Implement finalizers for module functions (Bug#30373)Philipp Stephani2020-01-031-2/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/module-env-28.h: Add new module environment functions to module environment for Emacs 28. * src/emacs-module.h.in: Document that 'emacs_finalizer' also works for function finalizers. * src/emacs-module.c (CHECK_MODULE_FUNCTION): New function. (struct Lisp_Module_Function): Add finalizer data member. (module_make_function): Initialize finalizer. (module_get_function_finalizer) (module_set_function_finalizer): New module environment functions. (module_finalize_function): New function. (initialize_environment): Initialize new environment functions. * src/alloc.c (cleanup_vector): Call potential module function finalizer during garbage collection. * test/data/emacs-module/mod-test.c (signal_error): New helper function. (memory_full): Use it. (finalizer): New example function finalizer. (Fmod_test_make_function_with_finalizer) (Fmod_test_function_finalizer_calls): New test module functions. (emacs_module_init): Define them. * test/src/emacs-module-tests.el (module/function-finalizer): New unit test. * doc/lispref/internals.texi (Module Functions): Document new functionality. (Module Misc): Move description of 'emacs_finalizer' type to 'Module Functions' node, and add a reference to it. * etc/NEWS: Mention new functionality.
* Update copyright year to 2020Paul Eggert2020-01-013-3/+3
| | | | Run "TZ=UTC0 admin/update-copyright $(git ls-files)".
* Rename faces used in faces-tests.elDmitry Gutov2019-12-102-5/+5
| | | | | | | | * test/data/themes/faces-test-light-theme.el: * test/data/themes/faces-test-dark-theme.el: Update accordingly. * test/lisp/faces-tests.el (faces--test-extend-with-themes): Don't use the diff-mode faces. Rename the definitions.
* Make ':extend' inherited from default spec unless overriddenDmitry Gutov2019-12-102-0/+65
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/faces.el (face-spec-recalc): Handle the :extend attribute specially and always inherit it from the default spec unless overwritten in a theme (bug#37774). * test/lisp/faces-tests.el (faces--test-data-dir): New variable. (faces--test-extend-with-themes): Use test themes instead of ones from etc/themes. Update expected values. * test/data/themes/faces-test-dark-theme.el: New file. * test/data/themes/faces-test-light-theme.el: New file. * doc/lispref/display.texi (Face Attributes): Update the description of ':extend'. * etc/NEWS: Update the entry for ':extend'. * etc/themes/adwaita-theme.el: * etc/themes/deeper-blue-theme.el: * etc/themes/dichromacy-theme.el: * etc/themes/leuven-theme.el: * etc/themes/light-blue-theme.el: * etc/themes/manoj-dark-theme.el: * etc/themes/misterioso-theme.el: * etc/themes/tango-dark-theme.el: * etc/themes/tango-theme.el: * etc/themes/tsdh-dark-theme.el: * etc/themes/tsdh-light-theme.el: * etc/themes/wheatgrass-theme.el: * etc/themes/wombat-theme.el: Remove the now-redundant ':extend' attribute in all the themes.
* Fix recent modifications in emacs-module-testsEli Zaretskii2019-12-051-1/+1
| | | | | | | | | | | | * test/data/emacs-module/mod-test.c (extract_big_integer): Fix calculation of size of 'magnitude' when 'emacs_limb_t' is wider than 'unsigned long'. * test/src/emacs-module-tests.el (module--test-assertions--load-non-live-object) (module--test-assertions--call-emacs-from-gc): On MS-Windows, check also mod-test-emacs with ".exe" appended, before skipping the tests.
* Change module interface to no longer use GMP objects directly.Philipp Stephani2019-12-041-14/+97
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As described in the new comment added to emacs-module.c, using GMP directly in the module interface has significant downsides: it couples the module interface directly to the implementation and requires module authors to link their module against the same GMP library as Emacs itself, which is often difficult and an unnecessary burden. By picking a representation for the magnitude that often matches the one used by GMP, we can avoid overhead when converting from and to GMP in most cases. Loading the test module in test/data/emacs-module and evaluating (dotimes (_ 10000) (mod-test-double (* 2 most-negative-fixnum))) under Callgrind shows that on my (GNU/Linux) machine Emacs only spends 10% of the CPU time of mod-test-double in mpz_import and mpz_export combined, even though that function does little else. (By contrast, 30% is spent in allocate_pseudovector.) * src/emacs-module.h.in: Don't check EMACS_MODULE_GMP. Don't include gmp.h. Remove emacs_mpz structure. Instead, define type alias emacs_limb_t and macro EMACS_LIMB_MAX. * src/module-env-27.h: Change interface of extract_big_integer and make_big_integer to take a sign-magnitude representation instead of mpz_t. * src/emacs-module.c: Don't check EMACS_MODULE_GMP or EMACS_MODULE_HAVE_MPZ_T. Add a comment about the chosen implementation. (module_extract_big_integer, module_make_big_integer): Reimplement without using mpz_t in the interface. * doc/lispref/internals.texi (Module Values): Adapt function documentation and example. Stop mentioning GMP and EMACS_MODULE_GMP. * test/data/emacs-module/mod-test.c: Don't define EMACS_MODULE_GMP or EMACS_MODULE_HAVE_MPZ_T. (memory_full, extract_big_integer, make_big_integer): New helper functions, identical to example in the Info documentation. (Fmod_test_nanoseconds, Fmod_test_double): Adapt to new interface.
* * test/lisp/minibuffer-tests.el (completion-table-test-quoting): New testStefan Monnier2019-11-261-0/+0
| | | | * test/data/minibuffer-test-cttq$tion: New file-name test data.
* Add an Exif parsing libraryLars Ingebrigtsen2019-09-211-0/+0
| | | | | | * lisp/image/exif.el: New file (bug#23070). * test/lisp/image/exif-tests.el: Add some basic tests.
* Port mod-test to --enable-gcc-warningsPaul Eggert2019-05-051-0/+2
| | | | | | * test/data/emacs-module/mod-test.c (NDEBUG): Undef, to prevent GCC from complaining “error: unused variable ‘dummy’” and failing to build the test, if --enable-gcc-warnings.
* Fix compilation of mod-test.c on MinGWEli Zaretskii2019-05-051-0/+4
| | | | | | * test/data/emacs-module/mod-test.c (Fmod_test_nanoseconds) [__MINGW32__]: Use _Static_assert, not static_assert, as the latter is not available in mingw.org's MinGW's assert.h.
* Use extract_time in test module.Philipp Stephani2019-05-051-17/+1
| | | | | | | | | * test/data/emacs-module/mod-test.c (Fmod_test_sleep_until): Use extract_time for time argument. (signal_wrong_type_argument): Remove unused function. * test/src/emacs-module-tests.el (mod-test-sleep-until): Remove unnecessary ‘float-time’.
* Export major version of latest Emacs supported by emacs-module.h.Philipp Stephani2019-04-281-0/+5
| | | | | | | | | | | | | | | This is useful if module authors want to support multiple versions of emacs-module.h. * configure.ac (emacs_major_version): Define substitution. * src/emacs-module.h.in (EMACS_MAJOR_VERSION): Define macro. * doc/lispref/internals.texi (Module Initialization): Document EMACS_MAJOR_VERSION preprocessor macro. * test/data/emacs-module/mod-test.c (emacs_module_init): Verify behavior of EMACS_MAJOR_VERSION.
* Unbreak build when building without GMP support.Philipp Stephani2019-04-241-2/+7
| | | | | | | | | | | | | | | | | | | | | Add support for a new preprocessor macro EMACS_MODULE_HAVE_MPZ_T to emacs-module.h. If this macro is defined, assume that mpz_t is already defined and don’t include gmp.h. Don’t document the new macro for now, as it’s unclear whether we want to support this in modules outside the Emacs tree. * src/emacs-module.h.in: Allow user to prevent inclusion of gmp.h. * src/emacs-module.c: Use mini-gmp if GMP is unavailable. Don’t include gmp.h. * src/lisp.h: Don’t require gmp.h. It’s not needed for lisp.h. * test/Makefile.in (GMP_LIB, GMP_OBJ): New variables. ($(test_module)): Use them. * test/data/emacs-module/mod-test.c: Use mini-gmp if GMP is unavailable.
* Clarify rounding mode when converting to struct timespec.Philipp Stephani2019-04-241-0/+17
| | | | | | | | | | | * doc/lispref/internals.texi (Module Values): Clarify that the truncation is towards negative infinity. * test/data/emacs-module/mod-test.c (Fmod_test_nanoseconds): Add test function. (emacs_module_init): Define it. * test/src/emacs-module-tests.el (mod-test-nanoseconds): New unit test.
* Add module functions to convert from and to big integers.Philipp Stephani2019-04-241-0/+19
| | | | | | | | | | | | | | | | | | | * src/module-env-27.h: Add new module functions to convert big integers. * src/emacs-module.h.in (emacs_mpz): Define if GMP is available. * src/emacs-module.c (module_extract_big_integer) (module_make_big_integer): New functions. (initialize_environment): Use them. * test/data/emacs-module/mod-test.c (Fmod_test_double): New test function. (emacs_module_init): Define it. * test/src/emacs-module-tests.el (mod-test-double): New unit test. * doc/lispref/internals.texi (Module Values): Document new functions.
* Add conversions to and from struct timespec to module interface.Philipp Stephani2019-04-241-0/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Time values are a fundamental data type, and such conversions are hard to implement within modules because of the various forms of time values in Emacs Lisp. Adding dedicated conversion functions can significantly simplify module code dealing with times. This approach uses nanosecond precision. While Emacs in theory has support for higher-precision time values, in practice most languages and standards, such as POSIX, C, Java, and Go, have settled on nanosecond-precision integers to represent time. * src/emacs-module.h.in: Add header for struct timespec. * src/module-env-27.h: Add module functions for time conversion. * src/emacs-module.c (module_extract_time, module_make_time): New functions. (initialize_environment): Use them. * test/data/emacs-module/mod-test.c (Fmod_test_add_nanosecond): New test function. (emacs_module_init): Define it. * test/src/emacs-module-tests.el (mod-test-add-nanosecond/valid) (mod-test-add-nanosecond/nil, mod-test-add-nanosecond/invalid): New unit tests. * doc/lispref/internals.texi (Module Values): Document time conversion functions.
* Revert "Revert "Revert "Rely on conservative stack scanning to find ↵Eli Zaretskii2019-03-221-3/+3
| | | | | | | | "emacs_value"s""" This reverts commit 093d3e78d21d3d6c718997368ef4b31f9884401c, which reverted ee7ad83f20903208404a84b58b7a478b62924570, which reverted 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a.
* Revert "Revert "Rely on conservative stack scanning to find "emacs_value"s""Eli Zaretskii2019-03-211-3/+3
| | | | | | | | This reverts commit ee7ad83f20903208404a84b58b7a478b62924570. There was no consensus on reverting 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a, so doing that will have to wait until the discussion ends.
* Revert "Rely on conservative stack scanning to find "emacs_value"s"Philipp Stephani2019-03-211-3/+3
| | | | | | | | This reverts commit 3eb93c07f7a60ac9ce8a16f10c3afd5a3a31243a. There was no consensus for that commit, see https://lists.gnu.org/archive/html/emacs-devel/2016-01/msg00150.html. Also, reverting this commit should fix Bug#31238.
* Ignore pending_signals when checking for quits.Philipp Stephani2019-02-241-1/+68
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | pending_signals is often set if no quit is pending. This results in bugs in module code if the module returns but no quit is actually pending. As a better alternative, add a new process_input environment function for Emacs 27. That function processes signals (like maybe_quit). * configure.ac: Add module snippet for Emacs 27. * src/module-env-27.h: New file. * src/emacs-module.h.in: Add process_input function to environment interface. * src/emacs-module.c (module_should_quit): Use QUITP macro to check whether the caller should quit. (module_process_input): New function. (initialize_environment): Use it. * src/eval.c: Remove obsolete comment. * test/data/emacs-module/mod-test.c (signal_wrong_type_argument) (signal_errno): New helper functions. (Fmod_test_sleep_until): New test module function. * test/src/emacs-module-tests.el (mod-test-sleep-until): New unit test. * doc/lispref/internals.texi (Module Misc): Document process_input.
* Handle HTML 'ol' start attribute in shr.elNicholas Drozd2019-02-222-0/+48
| | | | | | | | | | * lisp/net/shr.el (shr-tag-ol): Don't automatically assume 1-indexing for all ordered lists, use <ol> if given. * etc/NEWS: Announce change in shr behavior. * test/data/shr/ol.html: * test/data/shr/ol.txt: New test data files.
* * lisp/tar-mode.el (tar-extract): Call tar--try-jka-compr (bug#34251)Juri Linkov2019-02-032-0/+0
| | | | | | | | | | | | | | | | | | * lisp/tar-mode.el (tar--try-jka-compr): New function copied from archive-try-jka-compr. * lisp/arc-mode.el (archive-try-jka-compr): Set buffer-multibyte to t instead of let-binding coding-system-for-read to 'no-conversion. * test/data/decompress/tg.tar.gz: * test/data/decompress/zg.zip: New fixtures. * test/lisp/arc-mode-tests.el (arc-mode-test-zip-extract-gz): * test/lisp/tar-mode-tests.el (tar-mode-test-tar-extract-gz): New tests. * test/lisp/vc/diff-mode-tests.el (diff-mode-test-font-lock) (diff-mode-test-font-lock-syntax-one-line): Skip unless shell and diff executables are found.
* * test/lisp/vc/diff-mode-tests.el (diff-mode-test-font-lock): New test.Juri Linkov2019-02-024-0/+14
| | | | | | | | | | | | | (diff-mode-test-font-lock-syntax-one-line): New test for one line. * test/data/vc/diff-mode/hello_world.c: * test/data/vc/diff-mode/hello_world_1.c: * test/data/vc/diff-mode/hello_emacs.c: * test/data/vc/diff-mode/hello_emacs_1.c: New fixtures. * lisp/vc/diff-mode.el (diff-syntax-fontify): Move remove-overlays from diff-syntax-fontify-hunk. (Bug#33567) (diff-syntax-fontify-hunk): Remove VISIT arg from insert-file-contents.
* Merge from origin/emacs-26Paul Eggert2018-12-311-1/+1
|\ | | | | | | | | | | 2fcf2df Fix copyright years by hand 26bed8b Update copyright year to 2019 2814292 Fix value of default frame height. (Bug#33921)
| * Update copyright year to 2019Paul Eggert2019-01-011-1/+1
| | | | | | | | Run 'TZ=UTC0 admin/update-copyright $(git ls-files)'.
* | Merge from origin/emacs-26Glenn Morris2018-08-261-0/+19
|\ \ | |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 54fb383 (origin/emacs-26) Fix detection of freed emacs_values (Bug#32... 769d0cd ; Fix out-of-tree build for mod-test.so 9a1329e Avoid crashes with very wide TTY frames on MS-Windows 9a613d3 Prevent `modify-file-local-variable-prop-line' from adding ex... 624e7dc Update GNOME bugtracker URLs 51ef6d5 Clarify in the Emacs manual that ChangeLog files are not used 6e08019 Recognize codepage 65001 as a valid encoding 1a350d7 ; * etc/NEWS: Fix format of first lines of some entries. 22d1f53 Avoid compilation warning in nt/addpm.c 7bc9ce7 Fix duplicate custom group names in bibtex.el a9cf938 Fix outdated text in the Calc manual Conflicts: etc/NEWS etc/PROBLEMS src/emacs-module.c src/gtkutil.c src/image.c src/xterm.c test/Makefile.in
| * Fix detection of freed emacs_values (Bug#32479)Sergey Vinokurov2018-08-251-0/+19
| | | | | | | | | | | | | | | | | | | | | | * src/emacs-module.c (module_free_global_ref): Compare a value to be freed with all entries of the list. * test/data/emacs-module/mod-test.c (Fmod_test_globref_free): New function. (emacs_module_init): Make it accessible from Lisp. * test/src/emacs-module-tests.el (mod-test-globref-free-test): New test which uses it.
* | Use 'defalias' in test module instead of 'fset'.Philipp Stephani2018-02-021-2/+2
| | | | | | | | | | | | | | | | | | | | This puts functions defined in the module into the 'load-history'. * test/data/emacs-module/mod-test.c (bind_function): Use 'defalias' instead of 'fset'. * test/src/emacs-module-tests.el (module/describe-function-1): Adapt unit test.
* | Merge from origin/emacs-26Glenn Morris2018-01-201-6/+31
|\ \ | |/ | | | | | | | | | | | | | | | | | | | | | | | | cfc94fd (origin/emacs-26) Don't mention 'vc-stay-local' in the user m... 8ce430b Fix a typo in calendar.texi bb748b3 Minor improvement in wording of the Emacs manual b603aff Revert "Fix tempfile creation when byte compiling" 4fd446e Fix tempfile creation when byte compiling 7f48a11 Improve the Emacs manual as suggested in emacs-manual-bugs 728ded0 * lisp/emacs-lisp/bytecomp.el: Tweak last change c6c05e2 Unbreak building Emacs on FreeBSD a41ad3d Don't unnecessarily use non-ASCII characters in C sources c28d4b6 Portability fixes in emacs-module-tests 1d50c18 Add tests for term.el
| * Portability fixes in emacs-module-testsEli Zaretskii2018-01-191-6/+31
| | | | | | | | | | | | | | | | | | | | * test/Makefile.in (abs_top_srcdir): Add variable, needed by CPPFLAGS. * test/data/emacs-module/mod-test.c: Include <limits.h>. (pT, pZ, T_TYPE, Z_TYPE): Compatibility macros, for systems that don't support %td and %zu format specs. (emacs_module_init): Use compatibility macros to make the error messages print meaningful values (and avoid compiler warnings).
* | Merge from origin/emacs-26Paul Eggert2018-01-011-1/+1
|\ \ | |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 63b04c11d5 Fix copyright years by hand 5c7dd8a783 Update copyright year to 2018 220a9ecba1 Merge from Gnulib 312c565566 Don't add empty keyboard macro to macro ring (Bug#24992) 39ca289a7a Allow customization of decoding of "man" command f8240815ea * etc/NEWS: Add security consideration note on passphrase ... 0c78822c70 Fix subtle problem with scroll-down when scroll-margin is ... acd289c5a4 Fix problems with indexing in User manual b240c7846b * lisp/help.el (describe-key): Only (copy-sequence elt) wh... e879a5444a * src/buffer.c (Frestore_buffer_modified_p): Fix bug#29846 81b1028b63 Improve documentation of 'inhibit-modification-hooks' and ... 7175496d7a Fix doc string of 'enable-recursive-minibuffers' 5b38406491 Fix documentation of delsel and of killing text # Conflicts: # etc/NEWS # etc/refcards/ru-refcard.tex
| * Update copyright year to 2018Paul Eggert2018-01-011-1/+1
| | | | | | | | Run admin/update-copyright.
* | Add MIME apps spec utilitiesMark Oteiza2017-09-262-0/+13
|/ | | | | | | | | | | | Facilitates finding associations between MIME types and desktop files that report an association with that type. Combined with mailcap.el's MIME facilities, it should be easy to use desktop files. * lisp/xdg.el (xdg-mime-table): New variable. (xdg-mime-apps-files, xdg-mime-collect-associations, xdg-mime-apps): New functions. * test/data/xdg/mimeapps.list: New file. * test/data/xdg/mimeinfo.cache: New file. * test/lisp/xdg-tests.el (xdg-mime-associations): New test.
* Prefer HTTPS to FTP and HTTP in documentationPaul Eggert2017-09-131-1/+1
| | | | | | | | | | | | | Most of this change is to boilerplate commentary such as license URLs. This change was prompted by ftp://ftp.gnu.org's going-away party, planned for November. Change these FTP URLs to https://ftp.gnu.org instead. Make similar changes for URLs to other organizations moving away from FTP. Also, change HTTP to HTTPS for URLs to gnu.org and fsf.org when this works, as this will further help defend against man-in-the-middle attacks (for this part I omitted the MS-DOS and MS-Windows sources and the test tarballs to keep the workload down). HTTPS is not fully working to lists.gnu.org so I left those URLs alone for now.
* Avoid looking at localized stringsMark Oteiza2017-09-091-0/+5
| | | | | | | * lisp/xdg.el (xdg-desktop-read-group): Add condition to catch localized strings. * test/lisp/xdg-tests.el (xdg-desktop-parsing): Add test to ensure parsing l10n strings doesn't error but is essentially a no-op.
* Add function to read all entries in a groupMark Oteiza2017-09-092-0/+6
| | | | | | | | | | | | Use that to extend xdg-desktop-read-file. Also fix a bug where all entries in all groups were read and returned by xdg-desktop-read-file. * lisp/xdg.el (xdg-desktop-read-group): New function. (xdg-desktop-read-file): Use it. * test/data/xdg/malformed.desktop: New file. * test/data/xdg/test.desktop: Add another section. * test/lisp/xdg-tests.el (xdg-desktop-parsing): Test presence of a key in another group. Test reading a prescribed group. Test detecting a malformed key=value.
* Add XDG desktop file parsing and testsMark Oteiza2017-09-062-0/+5
| | | | | | | | | | | * lisp/xdg.el: Add support for Desktop Entry Specification. (xdg--user-dirs-parse-line): Check if file is readable. (xdg-desktop-group-regexp, xdg-desktop-entry-regexp): New variables. (xdg--desktop-parse-line, xdg-desktop-read-file, xdg-desktop-strings): New functions. * test/lisp/xdg-tests.el: * test/data/xdg/test.desktop: * test/data/xdg/wrong.desktop: New files.
* Add tests for mailcap.elMark Oteiza2017-09-051-0/+5
| | | | | * test/data/mailcap/mime.types: New file. * test/lisp/net/mailcap-tests.el: New file.
* Module assertions: check for garbage collectionsPhilipp Stephani2017-07-081-0/+23
| | | | | | | | | | | | | | | | | | | | It's technically possible to write a user pointer finalizer that calls into Emacs module functions. This would be disastrous because it would allow arbitrary Lisp code to run during garbage collection. Therefore extend the module assertions to check for this case. * src/emacs-module.c (module_assert_thread): Also check whether a garbage collection is in progress. * test/data/emacs-module/mod-test.c (invalid_finalizer) (Fmod_test_invalid_finalizer): New test module functions. (emacs_module_init): Register new test function. * test/src/emacs-module-tests.el (module--test-assertion) (module--with-temp-directory): New helper macros. (module--test-assertions--load-non-live-object): Rename existing unit test, use helper macros. (module--test-assertions--call-emacs-from-gc): New unit test.
* Inline test module Makefile into main test MakefilePhilipp Stephani2017-06-131-59/+0
| | | | | | | | | | | The test/data/emacs-module/Makefile only built a single target, and inlining it into test/Makefile simplifies dependency tracking and reduces code duplication. * configure.ac: Don't build test/data/emacs-module/Makefile. * Makefile.in ($(test_module)): Inline compilation. (clean): Also clean test module outputs.
* Print module structure sizes when initializing test modulePhilipp Stephani2017-06-121-2/+12
| | | | | * test/data/emacs-module/mod-test.c (emacs_module_init): Print compile-time and runtime sizes of module structures to ease debugging
* Fix off-by-one errorPhilipp Stephani2017-06-121-1/+1
| | | | | * test/data/emacs-module/mod-test.c (emacs_module_init): Fix off-by-one error.
* Improve previous test/data/emacs-module/Makefile changeGlenn Morris2017-06-121-1/+2
| | | | | * test/data/emacs-module/Makefile.in (clean): Avoid doing unpleasant things if run in a build without modules.
* Small improvements for test/data/emacs-module/MakefileGlenn Morris2017-06-121-2/+8
| | | | | | | * test/data/emacs-module/Makefile.in (%.o): Fix emacs-module dependency. (SECONDARY): Stop make automatically deleting *.o. (clean): New rule.
* Test module: add necessary version checksPhilipp Stephani2017-06-121-0/+6
| | | | | * test/data/emacs-module/mod-test.c (emacs_module_init): Add necessary version checks.
* Use additional CFLAGS from configurePhilipp Stephani2017-06-121-1/+7
|
* Use Autoconf to generate the test module MakefilePhilipp Stephani2017-06-121-10/+15
| | | | | | | | | | | | | This makes it easier to pass compilation flags around. * configure.ac: Also build test module Makefile. * test/data/emacs-module/Makefile.in: New makefile template. * test/Makefile.in ($(test_module)): No longer necessary to pass @MODULES_SUFFIX@ around. * .gitignore: Test module Makefile can now be ignored.
* Also compile test module as C11Philipp Stephani2017-06-121-2/+2
| | | | * test/data/emacs-module/Makefile (CFLAGS): Compile test module as C11
* Implement module assertions for usersPhilipp Stephani2017-06-121-0/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a new command-line option '-module-assertions' that users can enable developing or debugging a module. If this option is present, Emacs performs additional checks to verify that modules fulfill their requirements. These checks are expensive and crash Emacs if modules are invalid, so disable them by default. This is a command-line option instead of an ordinary variable because changing it while Emacs is running would cause data structure imbalances. * src/emacs.c (main): New command line option '-module-assertions'. * src/emacs-module.c (module_assert_main_thread) (module_assert_runtime, module_assert_env, module_assert_value): New functions to assert module requirements. (syms_of_module): New uninterned variable 'module-runtimes'. (init_module_assertions, in_main_thread, module_abort): New helper functions. (initialize_environment): Initialize value list. If assertions are enabled, use a heap-allocated environment object. (finalize_environment): Add assertion that environment list is never empty. (finalize_runtime_unwind): Pop module runtime object stack. (value_to_lisp): Assert that the value is valid. (lisp_to_value): Record new value if assertions are enabled. (mark_modules): Mark allocated object list. (MODULE_FUNCTION_BEGIN_NO_CATCH) (module_non_local_exit_check, module_non_local_exit_clear) (module_non_local_exit_get, module_non_local_exit_signal) (module_non_local_exit_throw): Assert thread and environment. (module_get_environment): Assert thread and runtime. (module_make_function, module_funcall, module_intern) (module_funcall, module_make_integer, module_make_float) (module_make_string, module_make_user_ptr, module_vec_get) (funcall_module, Fmodule_load): Adapt callers. (module_make_global_ref): If assertions are enabled, use the global environment to store global values. (module_free_global_ref): Remove value from global value list. * test/Makefile.in (EMACSOPT): Enable module assertions when testing modules. * test/data/emacs-module/mod-test.c (Fmod_test_invalid_store) (Fmod_test_invalid_load): New functions to test module assertions. (emacs_module_init): Bind the new functions. * test/src/emacs-module-tests.el (mod-test-emacs): New constant for the Emacs binary file. (mod-test-file): New constant for the test module file name. (module--test-assertions): New unit test.