diff options
| author | Andrea Corallo | 2019-11-17 16:38:07 +0100 |
|---|---|---|
| committer | Andrea Corallo | 2020-01-01 11:38:06 +0100 |
| commit | 065dd0b5c6a7e11e79fe5ec02b153bb53bde0e77 (patch) | |
| tree | 1b3def4419512b6cd7944f68a707724e3db8a87f /src/comp.c | |
| parent | 207b15147366be47d58c40a6f03888243602b11e (diff) | |
| download | emacs-065dd0b5c6a7e11e79fe5ec02b153bb53bde0e77.tar.gz emacs-065dd0b5c6a7e11e79fe5ec02b153bb53bde0e77.zip | |
better error signaling while loading
Diffstat (limited to 'src/comp.c')
| -rw-r--r-- | src/comp.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/comp.c b/src/comp.c index 1de24eaaf98..33c39b53467 100644 --- a/src/comp.c +++ b/src/comp.c | |||
| @@ -70,6 +70,8 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ | |||
| 70 | #endif | 70 | #endif |
| 71 | #define SETJMP_NAME STR (SETJMP) | 71 | #define SETJMP_NAME STR (SETJMP) |
| 72 | 72 | ||
| 73 | /* Raise an internal compiler error if test. | ||
| 74 | msg is evaluated only in that case. */ | ||
| 73 | #define ICE_IF(test, msg) \ | 75 | #define ICE_IF(test, msg) \ |
| 74 | do { \ | 76 | do { \ |
| 75 | if (test) \ | 77 | if (test) \ |
| @@ -3271,7 +3273,9 @@ load_comp_unit (dynlib_handle_ptr handle, char *file_name) | |||
| 3271 | 3273 | ||
| 3272 | return; | 3274 | return; |
| 3273 | exit_error: | 3275 | exit_error: |
| 3274 | error ("Native code load error while loading %s, %s", file_name, err_msg); | 3276 | xsignal1 (Qcomp_unit_load_failed, |
| 3277 | build_string (format_string ("while loading %s, %s", | ||
| 3278 | file_name, err_msg))); | ||
| 3275 | } | 3279 | } |
| 3276 | 3280 | ||
| 3277 | DEFUN ("comp--register-subr", Fcomp__register_subr, | 3281 | DEFUN ("comp--register-subr", Fcomp__register_subr, |
| @@ -3284,7 +3288,9 @@ DEFUN ("comp--register-subr", Fcomp__register_subr, | |||
| 3284 | { | 3288 | { |
| 3285 | dynlib_handle_ptr handle = xmint_pointer (XCAR (load_handle_stack)); | 3289 | dynlib_handle_ptr handle = xmint_pointer (XCAR (load_handle_stack)); |
| 3286 | if (!handle) | 3290 | if (!handle) |
| 3287 | error ("comp--register-subr can only be called during native code load phase."); | 3291 | xsignal1 (Qcomp_unit_load_failed, |
| 3292 | build_string ("comp--register-subr can only be called during " | ||
| 3293 | "native code load phase.")); | ||
| 3288 | 3294 | ||
| 3289 | void *func = dynlib_sym (handle, SSDATA (c_name)); | 3295 | void *func = dynlib_sym (handle, SSDATA (c_name)); |
| 3290 | eassert (func); | 3296 | eassert (func); |
| @@ -3315,7 +3321,7 @@ DEFUN ("native-elisp-load", Fnative_elisp_load, Snative_elisp_load, 1, 1, 0, | |||
| 3315 | dynlib_handle_ptr handle = dynlib_open (SSDATA (file)); | 3321 | dynlib_handle_ptr handle = dynlib_open (SSDATA (file)); |
| 3316 | load_handle_stack = Fcons (make_mint_ptr (handle), load_handle_stack); | 3322 | load_handle_stack = Fcons (make_mint_ptr (handle), load_handle_stack); |
| 3317 | if (!handle) | 3323 | if (!handle) |
| 3318 | xsignal2 (Qcomp_unit_open_failed, file, build_string (dynlib_error ())); | 3324 | xsignal2 (Qcomp_unit_load_failed, file, build_string (dynlib_error ())); |
| 3319 | 3325 | ||
| 3320 | load_comp_unit (handle, SSDATA (file)); | 3326 | load_comp_unit (handle, SSDATA (file)); |
| 3321 | 3327 | ||
| @@ -3374,8 +3380,8 @@ syms_of_comp (void) | |||
| 3374 | DEFSYM (Qnegate, "negate"); | 3380 | DEFSYM (Qnegate, "negate"); |
| 3375 | DEFSYM (Qnumberp, "numberp"); | 3381 | DEFSYM (Qnumberp, "numberp"); |
| 3376 | DEFSYM (Qintegerp, "integerp"); | 3382 | DEFSYM (Qintegerp, "integerp"); |
| 3377 | /* Returned values. */ | 3383 | /* To be signaled. */ |
| 3378 | DEFSYM (Qcomp_unit_open_failed, "comp-unit-open-failed"); | 3384 | DEFSYM (Qcomp_unit_load_failed, "comp-unit-load-failed"); |
| 3379 | /* Others. */ | 3385 | /* Others. */ |
| 3380 | DEFSYM (Qfixnum, "fixnum"); | 3386 | DEFSYM (Qfixnum, "fixnum"); |
| 3381 | 3387 | ||