cpython-3.1.2.0: hscpython-shim.c
/**
* Copyright (C) 2009 John Millikin <jmillikin@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
**/
#include <hscpython-shim.h>
/* Initialization helpers */
static wchar_t *program_name = NULL;
static wchar_t *python_home = NULL;
static wchar_t *strdupw (wchar_t *s)
{
size_t len = 0;
wchar_t *orig = s, *new, *new0;
if (!s) { return s; }
while (*(s++)) { len++; }
new = new0 = malloc (sizeof (wchar_t) * len);
s = orig;
while (*(new++) = *(s++)) {}
return new0;
}
void hscpython_SetProgramName (wchar_t *name)
{
free (program_name);
program_name = strdupw (name);
}
void hscpython_SetPythonHome (wchar_t *home)
{
free (python_home);
python_home = strdupw (home);
}
/* Object */
void hscpython_Py_INCREF (PyObject *o)
{ Py_INCREF (o); }
void hscpython_Py_DECREF (PyObject *o)
{ Py_DECREF (o); }
int hscpython_PyObject_DelAttr(PyObject *o, PyObject *name)
{ return PyObject_DelAttr (o, name); }
int hscpython_PyObject_TypeCheck (PyObject *o, PyTypeObject *type)
{ return PyObject_TypeCheck (o, type); }
int hscpython_PyIter_Check(PyObject *o)
{ return PyIter_Check(o); }
/* Types */
PyTypeObject *hscpython_PyType_Type ()
{ return &PyType_Type; }
PyTypeObject *hscpython_PyTuple_Type ()
{ return &PyTuple_Type; }
PyTypeObject *hscpython_PyList_Type ()
{ return &PyList_Type; }
PyTypeObject *hscpython_PyDict_Type ()
{ return &PyDict_Type; }
PyTypeObject *hscpython_PyLong_Type ()
{ return &PyLong_Type; }
PyTypeObject *hscpython_PyFloat_Type ()
{ return &PyFloat_Type; }
PyTypeObject *hscpython_PyComplex_Type ()
{ return &PyComplex_Type; }
PyTypeObject *hscpython_PyUnicode_Type ()
{ return &PyUnicode_Type; }
PyTypeObject *hscpython_PyBytes_Type ()
{ return &PyBytes_Type; }
PyTypeObject *hscpython_PyByteArray_Type ()
{ return &PyByteArray_Type; }
PyTypeObject *hscpython_PyCell_Type ()
{ return &PyCell_Type; }
PyTypeObject *hscpython_PyCode_Type ()
{ return &PyCode_Type; }
PyTypeObject *hscpython_PyFunction_Type ()
{ return &PyFunction_Type; }
PyTypeObject *hscpython_PyInstanceMethod_Type ()
{ return &PyInstanceMethod_Type; }
PyTypeObject *hscpython_PyMethod_Type ()
{ return &PyMethod_Type; }
PyTypeObject *hscpython_PySet_Type ()
{ return &PySet_Type; }
PyTypeObject *hscpython_PyFrozenSet_Type ()
{ return &PyFrozenSet_Type; }
PyTypeObject *hscpython_PySeqIter_Type ()
{ return &PySeqIter_Type; }
PyTypeObject *hscpython_PyCallIter_Type ()
{ return &PyCallIter_Type; }
PyTypeObject *hscpython_PySlice_Type ()
{ return &PySlice_Type; }
PyTypeObject *hscpython_PyModule_Type ()
{ return &PyModule_Type; }
PyTypeObject *hscpython_PyCapsule_Type ()
{ return &PyCapsule_Type; }
/* Constants */
PyObject *hscpython_Py_None ()
{ return Py_None; }
PyObject *hscpython_Py_True ()
{ return Py_True; }
PyObject *hscpython_Py_False ()
{ return Py_False; }
/* Unicode */
Py_ssize_t hscpython_PyUnicode_GetSize (PyObject *o)
{ return PyUnicode_GetSize (o); }
Py_UNICODE *hscpython_PyUnicode_AsUnicode (PyObject *o)
{ return PyUnicode_AsUnicode (o); }
PyObject *hscpython_PyUnicode_FromUnicode (Py_UNICODE *u, Py_ssize_t size)
{ return PyUnicode_FromUnicode (u, size); }
PyObject *hscpython_PyUnicode_FromEncodedObject (PyObject *o, const char *enc, const char *err)
{ return PyUnicode_FromEncodedObject (o, enc, err); }
PyObject *hscpython_PyUnicode_AsEncodedString (PyObject *o, const char *enc, const char *err)
{ return PyUnicode_AsEncodedString (o, enc, err); }
PyObject *hscpython_PyUnicode_FromObject (PyObject *o)
{ return PyUnicode_FromObject (o); }
PyObject *hscpython_PyUnicode_Decode (const char *s, Py_ssize_t len, const char *enc, const char *err)
{ return PyUnicode_Decode (s, len, enc, err); }
PyObject *hscpython_PyUnicode_Concat (PyObject *l, PyObject *r)
{ return PyUnicode_Concat (l, r); }
PyObject *hscpython_PyUnicode_Split (PyObject *s, PyObject *sep, Py_ssize_t max)
{ return PyUnicode_Split (s, sep, max); }
PyObject *hscpython_PyUnicode_Splitlines (PyObject *s, int keep)
{ return PyUnicode_Splitlines (s, keep); }
PyObject *hscpython_PyUnicode_Translate (PyObject *str, PyObject *table, const char *err)
{ return PyUnicode_Translate (str, table, err); }
PyObject *hscpython_PyUnicode_Join (PyObject *sep, PyObject *seq)
{ return PyUnicode_Join (sep, seq); }
int hscpython_PyUnicode_Tailmatch (PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int dir)
{ return PyUnicode_Tailmatch (str, substr, start, end, dir); }
Py_ssize_t hscpython_PyUnicode_Find (PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int dir)
{ return PyUnicode_Find (str, substr, start, end, dir); }
Py_ssize_t hscpython_PyUnicode_Count (PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end)
{ return PyUnicode_Count (str, substr, start, end); }
PyObject *hscpython_PyUnicode_Replace (PyObject *str, PyObject *substr, PyObject *replstr, Py_ssize_t max)
{ return PyUnicode_Replace (str, substr, replstr, max); }
PyObject *hscpython_PyUnicode_Format (PyObject *format, PyObject *args)
{ return PyUnicode_Format (format, args); }
int hscpython_PyUnicode_Contains (PyObject *a, PyObject *b)
{ return PyUnicode_Contains (a, b); }
/* Lists */
void hscpython_peek_list (PyObject *list, Py_ssize_t size, PyObject **objs)
{
Py_ssize_t ii;
for (ii = 0; ii < size; ii++)
{
objs[ii] = PyList_GET_ITEM (list, ii);
}
}
PyObject *hscpython_poke_list (size_t count, PyObject **objs)
{
PyObject *list;
size_t ii;
if (!(list = PyList_New (count)))
{ return NULL; }
for (ii = 0; ii < count; ii++)
{
Py_INCREF (objs[ii]);
PyList_SET_ITEM (list, ii, objs[ii]);
}
return list;
}
/* Tuple */
void hscpython_peek_tuple (PyObject *tuple, Py_ssize_t size, PyObject **objs)
{
Py_ssize_t ii;
for (ii = 0; ii < size; ii++)
{
objs[ii] = PyTuple_GET_ITEM (tuple, ii);
}
}
PyObject *hscpython_poke_tuple (size_t count, PyObject **objs)
{
PyObject *tuple;
size_t ii;
if (!(tuple = PyTuple_New (count)))
{ return NULL; }
for (ii = 0; ii < count; ii++)
{
Py_INCREF (objs[ii]);
PyTuple_SET_ITEM (tuple, ii, objs[ii]);
}
return tuple;
}