#ifndef Py_PERLMODULE_H
#define Py_PERLMODULE_H
#ifdef __cplusplus
extern
"C"
{
#endif
typedef
struct
{
PyObject_HEAD
PyObject *base;
PyObject *pkg;
PyObject *full;
} PerlPkg_object;
typedef
struct
{
PyObject_HEAD
PyObject *pkg;
SV *obj;
} PerlObj_object;
typedef
struct
{
PyObject_HEAD
PyObject *pkg;
PyObject *sub;
PyObject *full;
SV *ref;
SV *obj;
int
conf;
I32 flgs;
PyObject* (*cfun)(PyObject *self, PyObject *args);
} PerlSub_object;
extern
PyTypeObject PerlPkg_type, PerlObj_type, PerlSub_type;
#ifndef PyVarObject_HEAD_INIT /* Python 2.5 does not define this*/
#define PyVarObject_HEAD_INIT(type, size) \
PyObject_HEAD_INIT(type) size,
#endif
#ifndef Py_TYPE /* Python 2.5 does not define this*/
#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
#endif
#define PerlPkgObject_Check(v) (Py_TYPE(v) == &PerlPkg_type)
#define PerlObjObject_Check(v) (Py_TYPE(v) == &PerlObj_type)
#define PerlSubObject_Check(v) (Py_TYPE(v) == &PerlSub_type)
#if PY_MAJOR_VERSION >= 3
#define PKG_EQ(obj,pkg) (strcmp(PyBytes_AsString((obj)->full), (pkg))==0)
#else
#define PKG_EQ(obj,pkg) (strcmp(PyString_AsString((obj)->full), (pkg))==0)
#endif
#ifndef Py_RETURN_NOTIMPLEMENTED /* Python 3.1 does not define this*/
#define Py_RETURN_NOTIMPLEMENTED \
return
Py_INCREF(Py_NotImplemented), Py_NotImplemented
#endif
extern
PyObject * newPerlPkg_object(PyObject *, PyObject *);
extern
PyObject * newPerlObj_object(SV *, PyObject *);
extern
PyObject * newPerlSub_object(PyObject *, PyObject *, SV *);
extern
PyObject * newPerlMethod_object(PyObject*, PyObject*, SV*);
extern
PyObject * newPerlCfun_object(PyObject* (*)(PyObject *, PyObject *));
#ifdef __cplusplus
}
#endif
#endif