Skip to content

Instantly share code, notes, and snippets.

@matiasinsaurralde
Created July 30, 2018 11:02
Show Gist options
  • Save matiasinsaurralde/4efc7c11c6cd26abeab289602b3dcb91 to your computer and use it in GitHub Desktop.
Save matiasinsaurralde/4efc7c11c6cd26abeab289602b3dcb91 to your computer and use it in GitHub Desktop.
dlpython bindings
package python
/*
#include <dlfcn.h>
#include <stdlib.h>
#include <stdio.h>
void* python_lib;
typedef struct _pyobject {} PyObject;
typedef struct _pythreadstate {} PyThreadState;
typedef struct _pygilstate {} PyGILState_STATE;
typedef PyObject* (*PyObject_GetAttr_f)(PyObject*, PyObject*);
PyObject_GetAttr_f PyObject_GetAttr_ptr;
PyObject* PyObject_GetAttr(PyObject* arg1, PyObject* arg0) { return PyObject_GetAttr_ptr(arg0, arg1); };
typedef char* (*PyBytes_AsString_f)(PyObject*);
PyBytes_AsString_f PyBytes_AsString_ptr;
char* PyBytes_AsString(PyObject* arg0) { return PyBytes_AsString_ptr(arg0); };
typedef PyObject* (*PyUnicode_FromString_f)(char*);
PyUnicode_FromString_f PyUnicode_FromString_ptr;
PyObject* PyUnicode_FromString(char* u) { return PyUnicode_FromString_ptr(u); };
typedef long int (*PyLong_AsLong_f)(PyObject*);
PyLong_AsLong_f PyLong_AsLong_ptr;
long int PyLong_AsLong(PyObject* arg0) { return PyLong_AsLong_ptr(arg0); };
typedef PyObject* (*PyDict_GetItemString_f)(PyObject*, char*);
PyDict_GetItemString_f PyDict_GetItemString_ptr;
PyObject* PyDict_GetItemString(PyObject* dp, char* key) { return PyDict_GetItemString_ptr(dp, key); };
typedef PyObject* (*PyModule_GetDict_f)(PyObject*);
PyModule_GetDict_f PyModule_GetDict_ptr;
PyObject* PyModule_GetDict(PyObject* arg0) { return PyModule_GetDict_ptr(arg0); };
typedef PyGILState_STATE (*PyGILState_Ensure_f)();
PyGILState_Ensure_f PyGILState_Ensure_ptr;
PyGILState_STATE PyGILState_Ensure() { return PyGILState_Ensure_ptr(); };
typedef void (*PyErr_Print_f)();
PyErr_Print_f PyErr_Print_ptr;
void PyErr_Print() { return PyErr_Print_ptr(); };
typedef void (*Py_Initialize_f)();
Py_Initialize_f Py_Initialize_ptr;
void Py_Initialize() { return Py_Initialize_ptr(); };
typedef int (*Py_IsInitialized_f)();
Py_IsInitialized_f Py_IsInitialized_ptr;
int Py_IsInitialized() { return Py_IsInitialized_ptr(); };
typedef PyThreadState* (*PyEval_SaveThread_f)();
PyEval_SaveThread_f PyEval_SaveThread_ptr;
PyThreadState* PyEval_SaveThread() { return PyEval_SaveThread_ptr(); };
typedef void (*PyEval_InitThreads_f)();
PyEval_InitThreads_f PyEval_InitThreads_ptr;
void PyEval_InitThreads() { return PyEval_InitThreads_ptr(); };
typedef PyObject* (*PyImport_Import_f)(PyObject*);
PyImport_Import_f PyImport_Import_ptr;
PyObject* PyImport_Import(PyObject* name) { return PyImport_Import_ptr(name); };
typedef PyObject* (*PyObject_CallObject_f)(PyObject*, PyObject*);
PyObject_CallObject_f PyObject_CallObject_ptr;
PyObject* PyObject_CallObject(PyObject* args, PyObject* callable_object) { return PyObject_CallObject_ptr(callable_object, args); };
*/
import "C"
import "unsafe"
type dummyPtr unsafe.Pointer
func PyObject_GetAttr(arg0 *C.PyObject, arg1 *C.PyObject) *C.PyObject {
return C.PyObject_GetAttr(arg0,arg1)
}
func PyBytes_AsString(arg0 *C.PyObject) *C.char {
return C.PyBytes_AsString(arg0)
}
func PyUnicode_FromString(u *C.char) *C.PyObject {
return C.PyUnicode_FromString(u)
}
func PyLong_AsLong(arg0 *C.PyObject) C.long {
return C.PyLong_AsLong(arg0)
}
func PyDict_GetItemString(dp *C.PyObject, key *C.char) *C.PyObject {
return C.PyDict_GetItemString(dp,key)
}
func PyModule_GetDict(arg0 *C.PyObject) *C.PyObject {
return C.PyModule_GetDict(arg0)
}
func PyGILState_Ensure() C.PyGILState_STATE {
return C.PyGILState_Ensure()
}
func PyErr_Print() {
C.PyErr_Print()
}
func Py_Initialize() {
C.Py_Initialize()
}
func Py_IsInitialized() C.int {
return C.Py_IsInitialized()
}
func PyEval_SaveThread() *C.PyThreadState {
return C.PyEval_SaveThread()
}
func PyEval_InitThreads() {
C.PyEval_InitThreads()
}
func PyImport_Import(name *C.PyObject) *C.PyObject {
return C.PyImport_Import(name)
}
func PyObject_CallObject(callable_object *C.PyObject, args *C.PyObject) *C.PyObject {
return C.PyObject_CallObject(callable_object,args)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment