From df0602723dcb0dd9a558aba9b29cdde8e7c4f6c9 Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Wed, 10 Sep 2014 15:41:53 +0000 Subject: now release the FunPtr:s that are allocated for each literal callback --- src/runtime/haskell-bind/utils.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/runtime/haskell-bind/utils.c (limited to 'src/runtime/haskell-bind/utils.c') diff --git a/src/runtime/haskell-bind/utils.c b/src/runtime/haskell-bind/utils.c new file mode 100644 index 000000000..8ab1e53e3 --- /dev/null +++ b/src/runtime/haskell-bind/utils.c @@ -0,0 +1,29 @@ +#include +#include + +typedef struct { + PgfLiteralCallback callback; + GuFinalizer fin; +} HSPgfLiteralCallback; + +static void +hspgf_literal_callback_fin(GuFinalizer* self) +{ + HSPgfLiteralCallback* callback = gu_container(self, HSPgfLiteralCallback, fin); + + if (callback->callback.match != NULL) + hs_free_fun_ptr((HsFunPtr) callback->callback.match); + if (callback->callback.predict != NULL) + hs_free_fun_ptr((HsFunPtr) callback->callback.predict); +} + +PgfLiteralCallback* +hspgf_new_literal_callback(PgfConcr* concr) { + GuPool* pool = pgf_concr_get_pool(concr); + HSPgfLiteralCallback* callback = gu_new(HSPgfLiteralCallback, pool); + callback->callback.match = NULL; + callback->callback.predict = NULL; + callback->fin.fn = hspgf_literal_callback_fin; + gu_pool_finally(pool, &callback->fin); + return &callback->callback; +} -- cgit v1.2.3