#include #include int plugin_is_GPL_compatible; static emacs_value create_loop (emacs_env *env, ptrdiff_t _nargs, emacs_value _args[], void* _data) { for (int i = 0; i < 1000000; i++) env->free_global_ref (env, env->make_global_ref (env, env->make_integer(env, 0))); char msg[] = "1M global references created and freed"; emacs_value message = { env->make_string(env, msg, strlen(msg)) }; env->funcall(env, env->intern(env, "message"), 1, &message); return env->intern(env, "nil"); } int emacs_module_init (struct emacs_runtime *ert) { emacs_env* env = ert->get_environment(ert); emacs_value loopf = env->make_function(env, 0, 0, create_loop, "create and free 1M refs", NULL); emacs_value args[] = { env->intern(env, "create-refs-loop"), loopf }; env->funcall(env, env->intern(env, "fset"), 2, args); emacs_value simple_loop_feature = env->intern(env, "create-global-refs"); env->funcall(env, env->intern(env, "provide"), 1, &simple_loop_feature); return 0; }