1. 21 Mar, 2019 2 commits
  2. 24 Feb, 2019 1 commit
    • Philipp Stephani's avatar
      Ignore pending_signals when checking for quits. · 72ec233f
      Philipp Stephani authored
      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.
      72ec233f
  3. 01 Jan, 2019 1 commit
  4. 25 Aug, 2018 1 commit
    • Sergey Vinokurov's avatar
      Fix detection of freed emacs_values (Bug#32479) · 54fb383a
      Sergey Vinokurov authored
      * 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.
      54fb383a
  5. 08 Aug, 2018 1 commit
  6. 28 Apr, 2018 1 commit
    • Juri Linkov's avatar
      * lisp/subr.el (dotimes): Deprecate RESULT field. (Bug#16206) · f4eeb0f5
      Juri Linkov authored
      * doc/lispref/control.texi (Iteration):
      * doc/misc/cl.texi (Iteration): Document deprecation of its use.
      * doc/lispintro/emacs-lisp-intro.texi (dotimes):
      * test/src/emacs-module-tests.el (multiply-string):
      * test/lisp/filenotify-tests.el (file-notify-test07-many-events):
      Place RESULT field after the form.
      f4eeb0f5
  7. 22 Mar, 2018 1 commit
    • Paul Eggert's avatar
      Port emacs-module-tests to 32-bit Emacs · 01118627
      Paul Eggert authored
      Fix a portability bug when emacs-module-tests.el is byte-compiled
      with a 32-bit Emacs (where #x20000000 evaluates to a
      floating-point number) and then is run on a 64-bit Emacs (where
      the floating-point number causes a test failure).
      * test/src/emacs-module-tests.el (mod-test-sum-test):
      Don’t assume #x20000000 can be represented as an Emacs integer.
      01118627
  8. 02 Feb, 2018 3 commits
    • Philipp Stephani's avatar
      Properly integrate modules into the loading process (Bug#30164). · 0443411f
      Philipp Stephani authored
      * src/lread.c (Fload): Don't defer to module-load immediately when
      encountering a module, but use the normal loading machinery to
      properly set up load-history, check for recursive loads, print
      messages, etc.
      
      * test/src/emacs-module-tests.el (module/load-history): New test.
      (module/describe-function-1): Adapt test.
      
      * etc/NEWS: Mention fixed behavior.
      0443411f
    • Philipp Stephani's avatar
      Use 'defalias' in test module instead of 'fset'. · 75c663f8
      Philipp Stephani authored
      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.
      75c663f8
    • Philipp Stephani's avatar
      Add support for module functions to C-h f (Bug#30163). · f3d0db7f
      Philipp Stephani authored
      * lisp/help-fns.el (help-fns-function-description-header): Handle
      module functions.
      
      * test/src/emacs-module-tests.el (module/describe-function-1): New
      test.
      f3d0db7f
  9. 28 Jan, 2018 2 commits
  10. 26 Jan, 2018 1 commit
    • Andy Moreton's avatar
      Fix emacs-module-tests to work out of build tree · e08f2416
      Andy Moreton authored
      * test/Makefile.in (test_module_dir): Build the test module library in
      a subdirectory of the build directory (not the source tree).
      (MODULE_CFLAGS): Fix location of emacs-module.h header file.
      (test_module): Move built library out of the source tree.
      * test/src/emacs-module-tests.el (mod-test-file): Locate the test module
      library relative to the running Emacs executable.
      e08f2416
  11. 01 Jan, 2018 1 commit
  12. 20 Dec, 2017 1 commit
  13. 13 Sep, 2017 1 commit
    • Paul Eggert's avatar
      Prefer HTTPS to FTP and HTTP in documentation · bc511a64
      Paul Eggert authored
      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.
      bc511a64
  14. 09 Aug, 2017 1 commit
    • Eli Zaretskii's avatar
      Fix crashing emacs-module tests on MS-Windows · 7fc27ea7
      Eli Zaretskii authored
      * src/w32fns.c (syms_of_w32fns) <w32-disable-abort-dialog>: New
      variable.
      (emacs_abort): If w32-disable-abort-dialog is non-nil, abort right
      away, without displaying the Abort dialog, which waits for the user.
      
      * test/src/emacs-module-tests.el (module--test-assertion): Run the
      inferior Emacs with the w32 abort dialog disabled.  Expect the
      status of the aborted Emacs sub-process to be 3 on MS-Windows and
      2 on MS-DOS.
      7fc27ea7
  15. 09 Jul, 2017 1 commit
    • Glenn Morris's avatar
      Fix failing module tests on GNU/Linux · 273f4bde
      Glenn Morris authored
      * test/src/emacs-module-tests.el
      (module--test-assertions--load-non-live-object)
      (module--test-assertions--call-emacs-from-gc):
      Avoid test failures due to backtraces.
      273f4bde
  16. 08 Jul, 2017 1 commit
    • Philipp Stephani's avatar
      Module assertions: check for garbage collections · b7dab24b
      Philipp Stephani authored
      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.
      b7dab24b
  17. 12 Jun, 2017 4 commits
    • Glenn Morris's avatar
      Give a more informative failure in module assertion test · 73b50a10
      Glenn Morris authored
      * test/src/emacs-module-tests.el (module--test-assertions):
      Rephrase final check to give a more informative failure.
      73b50a10
    • Glenn Morris's avatar
      Clean up after module assertion tests · ab2116c9
      Glenn Morris authored
      * test/src/emacs-module-tests.el (module--test-assertions):
      Use a temporary directory to contain any core dumps.
      ab2116c9
    • Glenn Morris's avatar
      Small improvement for module assertion test · 1612d3dd
      Glenn Morris authored
      * test/src/emacs-module-tests.el (module--test-assertions):
      Don't rely on the precise form of an "Abort" message.
      1612d3dd
    • Philipp Stephani's avatar
      Implement module assertions for users · cf971327
      Philipp Stephani authored
      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.
      cf971327
  18. 04 Jun, 2017 1 commit
    • Philipp Stephani's avatar
      Rework printing of module functions · 3b0080de
      Philipp Stephani authored
      Fix a FIXME in emacs-module.c.  Put the printing into print.c, like
      other types.
      
      * src/print.c (print_vectorlike): Add code to print module functions.
      
      * src/emacs-module.c (funcall_module): Stop calling
      'module_format_fun_env'.  Now that module functions are first-class
      objects, they can be added to signal data directly.
      (module_handle_signal): Remove now-unused function
      'module_format_fun_env'.
      
      * test/src/emacs-module-tests.el (mod-test-sum-test): Adapt unit test.
      
      * src/eval.c (funcall_lambda): Adapt call to changed signature of
      'funcall_module'.
      3b0080de
  19. 20 May, 2017 1 commit
    • Philipp Stephani's avatar
      Reimplement module functions · 31fded03
      Philipp Stephani authored
      Instead of a lambda, create a new type containing all data required to
      call the function, and support it in the evaluator.  Because this type
      now also needs to store the function documentation, it is too big for
      Lisp_Misc; use a pseudovector instead.  That also has the nice benefit
      that we don't have to add special support to the garbage collector.
      
      Since the new type is user-visible, give it a predicate.
      
      Now we can easily support 'help-function-args' and 'func-arity'; add
      unit tests for these.
      
      * src/lisp.h (allocate_module_function, MODULE_FUNCTIONP)
      (XMODULE_FUNCTION): New pseudovector type 'module function'.
      
      * src/eval.c (FUNCTIONP): Also treat module functions as functions.
      (funcall_lambda, Ffuncall, eval_sub): Add support for calling module
      functions.
      (Ffunc_arity): Add support for detecting the arity of module
      functions.
      
      * src/emacs-module.c (module_make_function): Adapt to new structure.
      Return module function object directly instead of wrapping it in a
      lambda; remove FIXME.
      (funcall_module): New function to call module functions.  Replaces
      `internal--module-call' and is called directly from eval.c.
      (syms_of_module): Remove internal helper function, which is no longer
      needed.
      (module_function_arity): New helper function.
      
      * src/data.c (Ftype_of): Adapt to new implementation.
      (Fmodule_function_p, syms_of_data): New user-visible function.  Now
      that module functions are first-class objects, they deserve a
      predicate.  Define it even if not compiled with --enable-modules so
      that Lisp code doesn't have to check for the function's existence.
      
      * src/doc.c (Fdocumentation): Support module functions.
      
      * src/print.c (print_object): Adapt to new implementation.
      
      * src/alloc.c (mark_object): Specialized garbage collector support is
      no longer needed.
      
      * lisp/help.el (help-function-arglist): Support module functions.
      While there, simplify the arity calculation by using `func-arity',
      which does the right thing for all kinds of functions.
      
      * test/data/emacs-module/mod-test.c: Amend docstring so we can test
      the argument list.
      
      * test/src/emacs-module-tests.el (mod-test-sum-docstring): Adapt to
      new docstring.
      (mod-test-non-local-exit-signal-test): Because `internal--module-call'
      is gone, the backtrace has changed and no longer leaks the
      implementation.
      (module--func-arity): New test for `func-arity'.
      (module--help-function-arglist): New test for `help-function-arglist'.
      31fded03
  20. 19 May, 2017 1 commit
    • Philipp Stephani's avatar
      Fix module tests on some systems · 45944e01
      Philipp Stephani authored
      If dladdr(3) isn't available or didn't work, the printed
      representation of a module function will not include the file name,
      but only the address.  Make the tests pass in that case.
      
      * test/src/emacs-module-tests.el (module-function-object): Fix match for
      module function printed representation
      45944e01
  21. 06 May, 2017 3 commits
    • Eli Zaretskii's avatar
      ; Fix last change · b104d764
      Eli Zaretskii authored
      * test/src/emacs-module-tests.el (module-function-object): Fix thinko
      in last change.
      b104d764
    • Eli Zaretskii's avatar
      Fix last change for MS-Windows · 89b5a828
      Eli Zaretskii authored
      * test/src/emacs-module-tests.el (module-function-object): Port to
      MS-Windows.
      89b5a828
    • Philipp Stephani's avatar
      Introduce new misc type for module function · a3e96940
      Philipp Stephani authored
      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.
      a3e96940
  22. 29 Apr, 2017 1 commit
    • Philipp Stephani's avatar
      Integrate module test with normal test suite · bfc0f610
      Philipp Stephani authored
      * test/Makefile.in (ELFILES): Exclude module test if modules aren't
      configured.
      (EMACS_TEST_DIRECTORY): Expand test directory so that it's set
      correctly even if Emacs changes the current directory.
      ($(srcdir)/src/emacs-module-tests.log)
      ($(test_module)): Proper dependency tracking for test module.
      
      * test/data/emacs-module/Makefile (ROOT): Adapt to new location.
      Remove 'check' target and EMACS variable, which are no longer
      necessary.
      (SO): Change to include period.
      
      * test/src/emacs-module-tests.el (mod-test): Use EMACS_TEST_DIRECTORY
      environment variable to reliably find test data.
      
      * configure.ac (HAVE_MODULES, MODULES_SUFFIX): Add necessary
      substitutions.
      bfc0f610
  23. 26 Mar, 2017 1 commit
  24. 01 Jan, 2017 1 commit
  25. 01 Jan, 2016 1 commit
  26. 06 Dec, 2015 2 commits
    • Paul Eggert's avatar
      Port mod-test to 32-bit Emacs --without-wide-int · ace6c253
      Paul Eggert authored
      * modules/mod-test/test.el (mod-test-sum-test):
      Bring back the 2**29 tests, but port them to 32-bit Emacs
      --without-wide-int.
      ace6c253
    • Paul Eggert's avatar
      Port mod-test to x86-64 GNU/Linux running 32-bit · 2b3f5de2
      Paul Eggert authored
      * modules/mod-test/test.el (mod-test-sum-test):
      Don’t attempt to match descriptions to operating systems.
      It didn’t work on Fedora x86-64 running a 32-bit executable,
      and it’s not worth the trouble anyway.
      Port to 32-bit platforms by removing an assumption about
      fixnum widths.
      2b3f5de2
  27. 02 Dec, 2015 1 commit
    • Eli Zaretskii's avatar
      More emacs-module.c fixes for wide ints · 36dbe6fc
      Eli Zaretskii authored
      * src/emacs-module.c (value_to_lisp) [WIDE_EMACS_INT]: Use
      unsigned data types to manipulate pointers, to avoid sign
      extension coming after us with a vengeance.
      
      * modules/mod-test/test.el (mod-test-sum-test): Add tests for
      Emacs with wide ints that verify integer values near the critical
      value that requires us to switch to a cons cell.
      36dbe6fc
  28. 01 Dec, 2015 1 commit
    • Eli Zaretskii's avatar
      Fix emacs-module.c for wide ints · bdebeb77
      Eli Zaretskii authored
      * src/emacs-module.c (lisp_to_value): Compare the produced value
      with the original Lisp object, not with the one potentially
      converted into a Lisp_Cons.  Fixes assertion violations when
      working with integers larger than fit into a 32-bit value.
      
      * modules/mod-test/test.el (mod-test-sum-test): Add tests for
      large integers, to test --with-wide-int.
      bdebeb77
  29. 29 Nov, 2015 1 commit
    • Ken Brown's avatar
      Update mod-test-sum-test · ff21f455
      Ken Brown authored
      * modules/mod-test/test.el (mod-test-sum-test): Update to
      accommodate the lack of dladdr on Cygwin.
      ff21f455
  30. 27 Nov, 2015 1 commit