mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-20 02:09:32 -06:00
69 lines
1.8 KiB
C
69 lines
1.8 KiB
C
#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)
|