mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-09-29 05:33:38 -06:00
the Haskell marshaller/unmarshaller are now statically allocated
This commit is contained in:
+33
-26
@@ -1,35 +1,42 @@
|
||||
#include <HsFFI.h>
|
||||
#include <pgf/pgf.h>
|
||||
#include <stdlib.h>
|
||||
#include "PGF2/FFI_stub.h"
|
||||
|
||||
void hs_free_marshaller(PgfMarshaller *marshaller)
|
||||
{
|
||||
hs_free_fun_ptr((HsFunPtr) marshaller->vtbl->match_lit);
|
||||
hs_free_fun_ptr((HsFunPtr) marshaller->vtbl->match_expr);
|
||||
hs_free_fun_ptr((HsFunPtr) marshaller->vtbl->match_type);
|
||||
free(marshaller->vtbl);
|
||||
free(marshaller);
|
||||
}
|
||||
static
|
||||
PgfMarshallerVtbl haskell_marshaller_vtbl = {
|
||||
(void*)haskell_match_lit,
|
||||
(void*)haskell_match_expr,
|
||||
(void*)haskell_match_type
|
||||
};
|
||||
|
||||
void hs_free_unmarshaller(PgfUnmarshaller *unmarshaller)
|
||||
{
|
||||
hs_free_fun_ptr((HsFunPtr) unmarshaller->vtbl->eabs);
|
||||
hs_free_fun_ptr((HsFunPtr) unmarshaller->vtbl->eapp);
|
||||
hs_free_fun_ptr((HsFunPtr) unmarshaller->vtbl->elit);
|
||||
hs_free_fun_ptr((HsFunPtr) unmarshaller->vtbl->emeta);
|
||||
hs_free_fun_ptr((HsFunPtr) unmarshaller->vtbl->efun);
|
||||
hs_free_fun_ptr((HsFunPtr) unmarshaller->vtbl->evar);
|
||||
hs_free_fun_ptr((HsFunPtr) unmarshaller->vtbl->etyped);
|
||||
hs_free_fun_ptr((HsFunPtr) unmarshaller->vtbl->eimplarg);
|
||||
hs_free_fun_ptr((HsFunPtr) unmarshaller->vtbl->lint);
|
||||
hs_free_fun_ptr((HsFunPtr) unmarshaller->vtbl->lflt);
|
||||
hs_free_fun_ptr((HsFunPtr) unmarshaller->vtbl->lstr);
|
||||
hs_free_fun_ptr((HsFunPtr) unmarshaller->vtbl->dtyp);
|
||||
free(unmarshaller->vtbl);
|
||||
free(unmarshaller);
|
||||
}
|
||||
PgfMarshaller haskell_marshaller = {
|
||||
&haskell_marshaller_vtbl
|
||||
};
|
||||
|
||||
void hs_free_reference(PgfUnmarshaller *self, uintptr_t ref)
|
||||
static
|
||||
void haskell_free_ref(PgfUnmarshaller *self, uintptr_t ref)
|
||||
{
|
||||
hs_free_stable_ptr((HsStablePtr) ref);
|
||||
}
|
||||
|
||||
static
|
||||
PgfUnmarshallerVtbl haskell_unmarshaller_vtbl = {
|
||||
(void*)haskell_eabs,
|
||||
(void*)haskell_eapp,
|
||||
(void*)haskell_elit,
|
||||
(void*)haskell_emeta,
|
||||
(void*)haskell_efun,
|
||||
(void*)haskell_evar,
|
||||
(void*)haskell_etyped,
|
||||
(void*)haskell_eimplarg,
|
||||
(void*)haskell_lint,
|
||||
(void*)haskell_lflt,
|
||||
(void*)haskell_lstr,
|
||||
(void*)haskell_dtyp,
|
||||
haskell_free_ref
|
||||
};
|
||||
|
||||
PgfUnmarshaller haskell_unmarshaller = {
|
||||
&haskell_unmarshaller_vtbl
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user