diff options
| author | aarne <aarne@chalmers.se> | 2009-10-23 12:54:21 +0000 |
|---|---|---|
| committer | aarne <aarne@chalmers.se> | 2009-10-23 12:54:21 +0000 |
| commit | 0e3e2d03f94fb3705bc3d2ba0ea3e76fdb814691 (patch) | |
| tree | 1b8eb84e4e2d8b508d9f2558d8b32183dae4dde7 /contrib/c-bindings/pgf.h | |
| parent | b8df9c92bb71fc4c136dc35ce98e524cc392c7de (diff) | |
C bindings to PGF interpreter
Diffstat (limited to 'contrib/c-bindings/pgf.h')
| -rw-r--r-- | contrib/c-bindings/pgf.h | 68 |
1 files changed, 68 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>. +*/ + +#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); +} |
