[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Dynamic modules: emacs-module.c and signaling errors
From: |
Eli Zaretskii |
Subject: |
Dynamic modules: emacs-module.c and signaling errors |
Date: |
Tue, 24 Nov 2015 21:41:12 +0200 |
In "emacs -Q", load the modules/mod-test/mod-test module, then try
this:
M-: (mod-test-sum "1" 2) RET
Result: Emacs aborts. This happens because the eassert in
module_extract_integer aborts, when that function is called for the
2nd time:
static intmax_t
module_extract_integer (emacs_env *env, emacs_value n)
{
check_main_thread ();
eassert (module_non_local_exit_check (env) == emacs_funcall_exit_return);
Lisp_Object l = value_to_lisp (n);
if (! INTEGERP (l))
{
module_wrong_type (env, Qintegerp, l);
return 0;
}
The first call to module_extract_integer correctly detects the wrong
type of argument and calls module_wrong_type. But module_wrong_type
just records the problem in the env structure, it doesn't signal any
Lisp error, like an Emacs primitive would. So the actual error goes
undetected, and is masked by the assertion violation (because Emacs is
built with --enable-checking).
Since this obviously works as it was designed, my question is: how
should a module be written so that this kind of errors signal a normal
Lisp error we are accustomed with Emacs primitives?
TIA
- Dynamic modules: emacs-module.c and signaling errors,
Eli Zaretskii <=
- Re: Dynamic modules: emacs-module.c and signaling errors, Eli Zaretskii, 2015/11/24
- Re: Dynamic modules: emacs-module.c and signaling errors, Tom Tromey, 2015/11/24
- Re: Dynamic modules: emacs-module.c and signaling errors, Eli Zaretskii, 2015/11/24
- Re: Dynamic modules: emacs-module.c and signaling errors, Paul Eggert, 2015/11/24
- Re: Dynamic modules: emacs-module.c and signaling errors, Daniel Colascione, 2015/11/24
- Re: Dynamic modules: emacs-module.c and signaling errors, Paul Eggert, 2015/11/25
- Re: Dynamic modules: emacs-module.c and signaling errors, Daniel Colascione, 2015/11/25
- Re: Dynamic modules: emacs-module.c and signaling errors, Paul Eggert, 2015/11/25
- Re: Dynamic modules: emacs-module.c and signaling errors, Daniel Colascione, 2015/11/25
- Re: Dynamic modules: emacs-module.c and signaling errors, Paul Eggert, 2015/11/25