From 0e3e2d03f94fb3705bc3d2ba0ea3e76fdb814691 Mon Sep 17 00:00:00 2001 From: aarne Date: Fri, 23 Oct 2009 12:54:21 +0000 Subject: C bindings to PGF interpreter --- contrib/c-bindings/pgf.h | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 contrib/c-bindings/pgf.h (limited to 'contrib/c-bindings/pgf.h') diff --git a/contrib/c-bindings/pgf.h b/contrib/c-bindings/pgf.h new file mode 100644 index 000000000..744b5c551 --- /dev/null +++ b/contrib/c-bindings/pgf.h @@ -0,0 +1,68 @@ +/* GF C Bindings + Copyright (C) 2008-2009 Kevin Kofler + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, see . +*/ + +#include "HsFFI.h" + +#ifdef __GLASGOW_HASKELL__ +#include "PGFFFI_stub.h" + +extern void __stginit_PGFFFI ( void ); +#endif + +static inline void gf_init(int *argc, char ***argv) +{ + hs_init(argc, argv); +#ifdef __GLASGOW_HASKELL__ + hs_add_root(__stginit_PGFFFI); +#endif +} + +static inline void gf_exit(void) +{ + hs_exit(); +} + +typedef HsStablePtr GF_Language; +typedef HsStablePtr GF_PGF; +typedef HsStablePtr GF_Type; +typedef HsStablePtr GF_CId; +typedef HsStablePtr GF_Tree; +typedef HsStablePtr GF_Expr; + +static inline void gf_freeLanguages(GF_Language *p) +{ + GF_Language *q = p; + while (*q) + gf_freeLanguage(*(q++)); + free(p); +} + +static inline void gf_freeTypes(GF_Type *p) +{ + GF_Type *q = p; + while (*q) + gf_freeType(*(q++)); + free(p); +} + +static inline void gf_freeTrees(GF_Tree *p) +{ + GF_Type *q = p; + while (*q) + gf_freeTree(*(q++)); + free(p); +} -- cgit v1.2.3