mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-21 00:52:51 -06:00
New interface to gf based in Storable.
This commit is contained in:
68
contrib/py-bindings/pygf.h
Normal file
68
contrib/py-bindings/pygf.h
Normal file
@@ -0,0 +1,68 @@
|
||||
#include <Python.h>
|
||||
//#include "pgf.h"
|
||||
#include "HsFFI.h"
|
||||
|
||||
#ifdef __GLASGOW_HASKELL__
|
||||
#include "PyGF_stub.h"
|
||||
|
||||
extern void __stginit_PyGF ( void );
|
||||
#endif
|
||||
|
||||
static inline void gf_init(int *argc, char ***argv)
|
||||
{
|
||||
hs_init(argc, argv);
|
||||
#ifdef __GLASGOW_HASKELL__
|
||||
hs_add_root(__stginit_PyGF);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void gf_exit(void)
|
||||
{
|
||||
hs_exit();
|
||||
}
|
||||
|
||||
typedef HsStablePtr GF_PGF;
|
||||
typedef HsStablePtr GF_CId;
|
||||
typedef HsStablePtr GF_Language;
|
||||
typedef HsStablePtr GF_Type;
|
||||
typedef HsStablePtr GF_Tree;
|
||||
typedef HsStablePtr GF_Expr;
|
||||
typedef struct {
|
||||
PyObject_HEAD;
|
||||
HsStablePtr sp;
|
||||
} PyGF;
|
||||
|
||||
#define NEWOBJECT(OBJ, GFTYPE) typedef struct {\
|
||||
PyObject_HEAD \
|
||||
GFTYPE obj; \
|
||||
} OBJ;
|
||||
|
||||
#define NEWTYPE(TYPE,NAME,OBJECT,DOC) static PyTypeObject TYPE = {\
|
||||
PyObject_HEAD_INIT(NULL)\
|
||||
0, /*ob_size*/\
|
||||
NAME, /*tp_name*/\
|
||||
sizeof(OBJECT), /*tp_basicsize*/\
|
||||
0, /*tp_itemsize*/\
|
||||
0, /*tp_dealloc*/\
|
||||
0, /*tp_print*/\
|
||||
0, /*tp_getattr*/\
|
||||
0, /*tp_setattr*/\
|
||||
0, /*tp_compare*/\
|
||||
0, /*tp_repr*/\
|
||||
0, /*tp_as_number*/\
|
||||
0, /*tp_as_sequence*/\
|
||||
0, /*tp_as_mapping*/\
|
||||
0, /*tp_hash */\
|
||||
0, /*tp_call*/\
|
||||
0, /*tp_str*/\
|
||||
0, /*tp_getattro*/\
|
||||
0, /*tp_setattro*/\
|
||||
0, /*tp_as_buffer*/\
|
||||
Py_TPFLAGS_DEFAULT, /*tp_flags*/\
|
||||
DOC, /* tp_doc */\
|
||||
};
|
||||
#define NEWGF(OBJ,GFTYPE,TYPE,NAME,DOC) NEWOBJECT(OBJ,GFTYPE) \
|
||||
NEWTYPE(TYPE,NAME,OBJ,DOC)
|
||||
|
||||
|
||||
NEWOBJECT(CID, GF_CId)
|
||||
Reference in New Issue
Block a user