aboutsummaryrefslogtreecommitdiffstats
path: root/test/data
diff options
context:
space:
mode:
Diffstat (limited to 'test/data')
-rw-r--r--test/data/emacs-module/mod-test.c49
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
375static void 375static void
376memory_full (emacs_env *env) 376signal_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
384static void
385memory_full (emacs_env *env)
386{
387 signal_error (env, "Memory exhausted");
388}
389
385enum 390enum
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
498static int function_data;
499static int finalizer_calls_with_correct_data;
500static int finalizer_calls_with_incorrect_data;
501
502static void
503finalizer (void *data)
504{
505 if (data == &function_data)
506 ++finalizer_calls_with_correct_data;
507 else
508 ++finalizer_calls_with_incorrect_data;
509}
510
511static emacs_value
512Fmod_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
523static emacs_value
524Fmod_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