summaryrefslogtreecommitdiff
path: root/contrib/py-bindings/pygf.h
blob: 3a63090ca80e9cf7768d5ab8e02290dbed5053fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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)