diff options
Diffstat (limited to 'test/data')
| -rw-r--r-- | test/data/emacs-module/mod-test.c | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/test/data/emacs-module/mod-test.c b/test/data/emacs-module/mod-test.c index 8dc9ff144af..1a0a879a1bc 100644 --- a/test/data/emacs-module/mod-test.c +++ b/test/data/emacs-module/mod-test.c | |||
| @@ -373,15 +373,20 @@ Fmod_test_add_nanosecond (emacs_env *env, ptrdiff_t nargs, emacs_value *args, | |||
| 373 | } | 373 | } |
| 374 | 374 | ||
| 375 | static void | 375 | static void |
| 376 | memory_full (emacs_env *env) | 376 | signal_error (emacs_env *env, const char *message) |
| 377 | { | 377 | { |
| 378 | const char *message = "Memory exhausted"; | ||
| 379 | emacs_value data = env->make_string (env, message, strlen (message)); | 378 | emacs_value data = env->make_string (env, message, strlen (message)); |
| 380 | env->non_local_exit_signal (env, env->intern (env, "error"), | 379 | env->non_local_exit_signal (env, env->intern (env, "error"), |
| 381 | env->funcall (env, env->intern (env, "list"), 1, | 380 | env->funcall (env, env->intern (env, "list"), 1, |
| 382 | &data)); | 381 | &data)); |
| 383 | } | 382 | } |
| 384 | 383 | ||
| 384 | static void | ||
| 385 | memory_full (emacs_env *env) | ||
| 386 | { | ||
| 387 | signal_error (env, "Memory exhausted"); | ||
| 388 | } | ||
| 389 | |||
| 385 | enum | 390 | enum |
| 386 | { | 391 | { |
| 387 | max_count = ((SIZE_MAX < PTRDIFF_MAX ? SIZE_MAX : PTRDIFF_MAX) | 392 | max_count = ((SIZE_MAX < PTRDIFF_MAX ? SIZE_MAX : PTRDIFF_MAX) |
| @@ -490,6 +495,42 @@ Fmod_test_double (emacs_env *env, ptrdiff_t nargs, emacs_value *args, | |||
| 490 | return result; | 495 | return result; |
| 491 | } | 496 | } |
| 492 | 497 | ||
| 498 | static int function_data; | ||
| 499 | static int finalizer_calls_with_correct_data; | ||
| 500 | static int finalizer_calls_with_incorrect_data; | ||
| 501 | |||
| 502 | static void | ||
| 503 | finalizer (void *data) | ||
| 504 | { | ||
| 505 | if (data == &function_data) | ||
| 506 | ++finalizer_calls_with_correct_data; | ||
| 507 | else | ||
| 508 | ++finalizer_calls_with_incorrect_data; | ||
| 509 | } | ||
| 510 | |||
| 511 | static emacs_value | ||
| 512 | Fmod_test_make_function_with_finalizer (emacs_env *env, ptrdiff_t nargs, | ||
| 513 | emacs_value *args, void *data) | ||
| 514 | { | ||
| 515 | emacs_value fun | ||
| 516 | = env->make_function (env, 2, 2, Fmod_test_sum, NULL, &function_data); | ||
| 517 | env->set_function_finalizer (env, fun, finalizer); | ||
| 518 | if (env->get_function_finalizer (env, fun) != finalizer) | ||
| 519 | signal_error (env, "Invalid finalizer"); | ||
| 520 | return fun; | ||
| 521 | } | ||
| 522 | |||
| 523 | static emacs_value | ||
| 524 | Fmod_test_function_finalizer_calls (emacs_env *env, ptrdiff_t nargs, | ||
| 525 | emacs_value *args, void *data) | ||
| 526 | { | ||
| 527 | emacs_value Flist = env->intern (env, "list"); | ||
| 528 | emacs_value list_args[] | ||
| 529 | = {env->make_integer (env, finalizer_calls_with_correct_data), | ||
| 530 | env->make_integer (env, finalizer_calls_with_incorrect_data)}; | ||
| 531 | return env->funcall (env, Flist, 2, list_args); | ||
| 532 | } | ||
| 533 | |||
| 493 | /* Lisp utilities for easier readability (simple wrappers). */ | 534 | /* Lisp utilities for easier readability (simple wrappers). */ |
| 494 | 535 | ||
| 495 | /* Provide FEATURE to Emacs. */ | 536 | /* Provide FEATURE to Emacs. */ |
| @@ -566,6 +607,10 @@ emacs_module_init (struct emacs_runtime *ert) | |||
| 566 | DEFUN ("mod-test-add-nanosecond", Fmod_test_add_nanosecond, 1, 1, NULL, NULL); | 607 | DEFUN ("mod-test-add-nanosecond", Fmod_test_add_nanosecond, 1, 1, NULL, NULL); |
| 567 | DEFUN ("mod-test-nanoseconds", Fmod_test_nanoseconds, 1, 1, NULL, NULL); | 608 | DEFUN ("mod-test-nanoseconds", Fmod_test_nanoseconds, 1, 1, NULL, NULL); |
| 568 | DEFUN ("mod-test-double", Fmod_test_double, 1, 1, NULL, NULL); | 609 | DEFUN ("mod-test-double", Fmod_test_double, 1, 1, NULL, NULL); |
| 610 | DEFUN ("mod-test-make-function-with-finalizer", | ||
| 611 | Fmod_test_make_function_with_finalizer, 0, 0, NULL, NULL); | ||
| 612 | DEFUN ("mod-test-function-finalizer-calls", | ||
| 613 | Fmod_test_function_finalizer_calls, 0, 0, NULL, NULL); | ||
| 569 | 614 | ||
| 570 | #undef DEFUN | 615 | #undef DEFUN |
| 571 | 616 | ||