Mercurial > vim
diff src/if_python.c @ 1594:23aeaff96141 v7.1.307
updated for version 7.1-307
author | vimboss |
---|---|
date | Wed, 04 Jun 2008 11:35:26 +0000 |
parents | 1d12208efb37 |
children | 4f1130893a1c |
line wrap: on
line diff
--- a/src/if_python.c +++ b/src/if_python.c @@ -38,6 +38,8 @@ # undef HAVE_STDARG_H /* Python's config.h defines it as well. */ #endif +#define PY_SSIZE_T_CLEAN + #include <Python.h> #if defined(MACOS) && !defined(MACOS_X_UNIX) # include "macglue.h" @@ -55,6 +57,22 @@ struct PyMethodDef { int a; }; # define PySequenceMethods int #endif +#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 +# define PyInt Py_ssize_t +# define PyInquiry lenfunc +# define PyIntArgFunc ssizeargfunc +# define PyIntIntArgFunc ssizessizeargfunc +# define PyIntObjArgProc ssizeobjargproc +# define PyIntIntObjArgProc ssizessizeobjargproc +#else +# define PyInt int +# define PyInquiry inquiry +# define PyIntArgFunc intargfunc +# define PyIntIntArgFunc intintargfunc +# define PyIntObjArgProc intobjargproc +# define PyIntIntObjArgProc intintobjargproc +#endif + /* Parser flags */ #define single_input 256 #define file_input 257 @@ -150,11 +168,11 @@ static void (*dll_PyGILState_Release)(Py static long(*dll_PyInt_AsLong)(PyObject *); static PyObject*(*dll_PyInt_FromLong)(long); static PyTypeObject* dll_PyInt_Type; -static PyObject*(*dll_PyList_GetItem)(PyObject *, int); +static PyObject*(*dll_PyList_GetItem)(PyObject *, PyInt); static PyObject*(*dll_PyList_Append)(PyObject *, PyObject *); -static PyObject*(*dll_PyList_New)(int size); -static int(*dll_PyList_SetItem)(PyObject *, int, PyObject *); -static int(*dll_PyList_Size)(PyObject *); +static PyObject*(*dll_PyList_New)(PyInt size); +static int(*dll_PyList_SetItem)(PyObject *, PyInt, PyObject *); +static PyInt(*dll_PyList_Size)(PyObject *); static PyTypeObject* dll_PyList_Type; static PyObject*(*dll_PyImport_ImportModule)(const char *); static PyObject*(*dll_PyDict_New)(void); @@ -163,8 +181,8 @@ static PyObject*(*dll_PyModule_GetDict)( static int(*dll_PyRun_SimpleString)(char *); static char*(*dll_PyString_AsString)(PyObject *); static PyObject*(*dll_PyString_FromString)(const char *); -static PyObject*(*dll_PyString_FromStringAndSize)(const char *, int); -static int(*dll_PyString_Size)(PyObject *); +static PyObject*(*dll_PyString_FromStringAndSize)(const char *, PyInt); +static PyInt(*dll_PyString_Size)(PyObject *); static PyTypeObject* dll_PyString_Type; static int(*dll_PySys_SetObject)(char *, PyObject *); static int(*dll_PySys_SetArgv)(int, char **); @@ -367,10 +385,10 @@ static int PythonMod_Init(void); * ---------------------------------------------- */ static PyObject *GetBufferLine(buf_T *, int); -static PyObject *GetBufferLineList(buf_T *, int, int); +static PyObject *GetBufferLineList(buf_T *, PyInt, PyInt); static int SetBufferLine(buf_T *, int, PyObject *, int *); -static int SetBufferLineList(buf_T *, int, int, PyObject *, int *); +static int SetBufferLineList(buf_T *, PyInt, PyInt, PyObject *, int *); static int InsertBufferLines(buf_T *, int, PyObject *, int *); static PyObject *LineToString(const char *); @@ -773,8 +791,8 @@ OutputWrite(PyObject *self, PyObject *ar static PyObject * OutputWritelines(PyObject *self, PyObject *args) { - int n; - int i; + PyInt n; + PyInt i; PyObject *list; int error = ((OutputObject *)(self))->error; @@ -986,11 +1004,11 @@ static void BufferDestructor(PyObject *) static PyObject *BufferGetattr(PyObject *, char *); static PyObject *BufferRepr(PyObject *); -static int BufferLength(PyObject *); -static PyObject *BufferItem(PyObject *, int); -static PyObject *BufferSlice(PyObject *, int, int); -static int BufferAssItem(PyObject *, int, PyObject *); -static int BufferAssSlice(PyObject *, int, int, PyObject *); +static PyInt BufferLength(PyObject *); +static PyObject *BufferItem(PyObject *, PyInt); +static PyObject *BufferSlice(PyObject *, PyInt, PyInt); +static PyInt BufferAssItem(PyObject *, PyInt, PyObject *); +static PyInt BufferAssSlice(PyObject *, PyInt, PyInt, PyObject *); static PyObject *BufferAppend(PyObject *, PyObject *); static PyObject *BufferMark(PyObject *, PyObject *); @@ -1017,11 +1035,11 @@ static void RangeDestructor(PyObject *); static PyObject *RangeGetattr(PyObject *, char *); static PyObject *RangeRepr(PyObject *); -static int RangeLength(PyObject *); -static PyObject *RangeItem(PyObject *, int); -static PyObject *RangeSlice(PyObject *, int, int); -static int RangeAssItem(PyObject *, int, PyObject *); -static int RangeAssSlice(PyObject *, int, int, PyObject *); +static PyInt RangeLength(PyObject *); +static PyObject *RangeItem(PyObject *, PyInt); +static PyObject *RangeSlice(PyObject *, PyInt, PyInt); +static PyInt RangeAssItem(PyObject *, PyInt, PyObject *); +static PyInt RangeAssSlice(PyObject *, PyInt, PyInt, PyObject *); static PyObject *RangeAppend(PyObject *, PyObject *); @@ -1029,15 +1047,15 @@ static PyObject *RangeAppend(PyObject *, * ------------------------------------------- */ -static int WinListLength(PyObject *); -static PyObject *WinListItem(PyObject *, int); +static PyInt WinListLength(PyObject *); +static PyObject *WinListItem(PyObject *, PyInt); /* Buffer list type - Implementation functions * ------------------------------------------- */ -static int BufListLength(PyObject *); -static PyObject *BufListItem(PyObject *, int); +static PyInt BufListLength(PyObject *); +static PyObject *BufListItem(PyObject *, PyInt); /* Current objects type - Implementation functions * ----------------------------------------------- @@ -1130,6 +1148,16 @@ VimToPython(typval_T *our_tv, int depth, result = Py_BuildValue("s", buf); PyDict_SetItemString(lookupDict, ptrBuf, result); } +#ifdef FEAT_FLOAT + else if (our_tv->v_type == VAR_FLOAT) + { + char buf[NUMBUFLEN]; + + sprintf(buf, "%f", our_tv->vval.v_float); + result = Py_BuildValue("s", buf); + PyDict_SetItemString(lookupDict, ptrBuf, result); + } +#endif else if (our_tv->v_type == VAR_LIST) { list_T *list = our_tv->vval.v_list; @@ -1245,7 +1273,7 @@ CheckBuffer(BufferObject *this) } static PyObject * -RBItem(BufferObject *self, int n, int start, int end) +RBItem(BufferObject *self, PyInt n, int start, int end) { if (CheckBuffer(self)) return NULL; @@ -1260,9 +1288,9 @@ RBItem(BufferObject *self, int n, int st } static PyObject * -RBSlice(BufferObject *self, int lo, int hi, int start, int end) +RBSlice(BufferObject *self, PyInt lo, PyInt hi, int start, int end) { - int size; + PyInt size; if (CheckBuffer(self)) return NULL; @@ -1283,8 +1311,8 @@ RBSlice(BufferObject *self, int lo, int return GetBufferLineList(self->buf, lo+start, hi+start); } - static int -RBAssItem(BufferObject *self, int n, PyObject *val, int start, int end, int *new_end) + static PyInt +RBAssItem(BufferObject *self, PyInt n, PyObject *val, int start, int end, int *new_end) { int len_change; @@ -1306,8 +1334,8 @@ RBAssItem(BufferObject *self, int n, PyO return 0; } - static int -RBAssSlice(BufferObject *self, int lo, int hi, PyObject *val, int start, int end, int *new_end) + static PyInt +RBAssSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, int start, int end, int *new_end) { int size; int len_change; @@ -1384,13 +1412,13 @@ static struct PyMethodDef BufferMethods[ }; static PySequenceMethods BufferAsSeq = { - (inquiry) BufferLength, /* sq_length, len(x) */ + (PyInquiry) BufferLength, /* sq_length, len(x) */ (binaryfunc) 0, /* BufferConcat, */ /* sq_concat, x+y */ - (intargfunc) 0, /* BufferRepeat, */ /* sq_repeat, x*n */ - (intargfunc) BufferItem, /* sq_item, x[i] */ - (intintargfunc) BufferSlice, /* sq_slice, x[i:j] */ - (intobjargproc) BufferAssItem, /* sq_ass_item, x[i]=v */ - (intintobjargproc) BufferAssSlice, /* sq_ass_slice, x[i:j]=v */ + (PyIntArgFunc) 0, /* BufferRepeat, */ /* sq_repeat, x*n */ + (PyIntArgFunc) BufferItem, /* sq_item, x[i] */ + (PyIntIntArgFunc) BufferSlice, /* sq_slice, x[i:j] */ + (PyIntObjArgProc) BufferAssItem, /* sq_ass_item, x[i]=v */ + (PyIntIntObjArgProc) BufferAssSlice, /* sq_ass_slice, x[i:j]=v */ }; static PyTypeObject BufferType = { @@ -1516,7 +1544,7 @@ BufferRepr(PyObject *self) /******************/ - static int + static PyInt BufferLength(PyObject *self) { /* HOW DO WE SIGNAL AN ERROR FROM THIS FUNCTION? */ @@ -1527,29 +1555,29 @@ BufferLength(PyObject *self) } static PyObject * -BufferItem(PyObject *self, int n) +BufferItem(PyObject *self, PyInt n) { return RBItem((BufferObject *)(self), n, 1, (int)((BufferObject *)(self))->buf->b_ml.ml_line_count); } static PyObject * -BufferSlice(PyObject *self, int lo, int hi) +BufferSlice(PyObject *self, PyInt lo, PyInt hi) { return RBSlice((BufferObject *)(self), lo, hi, 1, (int)((BufferObject *)(self))->buf->b_ml.ml_line_count); } - static int -BufferAssItem(PyObject *self, int n, PyObject *val) + static PyInt +BufferAssItem(PyObject *self, PyInt n, PyObject *val) { return RBAssItem((BufferObject *)(self), n, val, 1, (int)((BufferObject *)(self))->buf->b_ml.ml_line_count, NULL); } - static int -BufferAssSlice(PyObject *self, int lo, int hi, PyObject *val) + static PyInt +BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val) { return RBAssSlice((BufferObject *)(self), lo, hi, val, 1, (int)((BufferObject *)(self))->buf->b_ml.ml_line_count, @@ -1627,13 +1655,13 @@ static struct PyMethodDef RangeMethods[] }; static PySequenceMethods RangeAsSeq = { - (inquiry) RangeLength, /* sq_length, len(x) */ + (PyInquiry) RangeLength, /* sq_length, len(x) */ (binaryfunc) 0, /* RangeConcat, */ /* sq_concat, x+y */ - (intargfunc) 0, /* RangeRepeat, */ /* sq_repeat, x*n */ - (intargfunc) RangeItem, /* sq_item, x[i] */ - (intintargfunc) RangeSlice, /* sq_slice, x[i:j] */ - (intobjargproc) RangeAssItem, /* sq_ass_item, x[i]=v */ - (intintobjargproc) RangeAssSlice, /* sq_ass_slice, x[i:j]=v */ + (PyIntArgFunc) 0, /* RangeRepeat, */ /* sq_repeat, x*n */ + (PyIntArgFunc) RangeItem, /* sq_item, x[i] */ + (PyIntIntArgFunc) RangeSlice, /* sq_slice, x[i:j] */ + (PyIntObjArgProc) RangeAssItem, /* sq_ass_item, x[i]=v */ + (PyIntIntObjArgProc) RangeAssSlice, /* sq_ass_slice, x[i:j]=v */ }; static PyTypeObject RangeType = { @@ -1738,7 +1766,7 @@ RangeRepr(PyObject *self) /****************/ - static int + static PyInt RangeLength(PyObject *self) { /* HOW DO WE SIGNAL AN ERROR FROM THIS FUNCTION? */ @@ -1749,7 +1777,7 @@ RangeLength(PyObject *self) } static PyObject * -RangeItem(PyObject *self, int n) +RangeItem(PyObject *self, PyInt n) { return RBItem(((RangeObject *)(self))->buf, n, ((RangeObject *)(self))->start, @@ -1757,15 +1785,15 @@ RangeItem(PyObject *self, int n) } static PyObject * -RangeSlice(PyObject *self, int lo, int hi) +RangeSlice(PyObject *self, PyInt lo, PyInt hi) { return RBSlice(((RangeObject *)(self))->buf, lo, hi, ((RangeObject *)(self))->start, ((RangeObject *)(self))->end); } - static int -RangeAssItem(PyObject *self, int n, PyObject *val) + static PyInt +RangeAssItem(PyObject *self, PyInt n, PyObject *val) { return RBAssItem(((RangeObject *)(self))->buf, n, val, ((RangeObject *)(self))->start, @@ -1773,8 +1801,8 @@ RangeAssItem(PyObject *self, int n, PyOb &((RangeObject *)(self))->end); } - static int -RangeAssSlice(PyObject *self, int lo, int hi, PyObject *val) + static PyInt +RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val) { return RBAssSlice(((RangeObject *)(self))->buf, lo, hi, val, ((RangeObject *)(self))->start, @@ -1801,13 +1829,13 @@ typedef struct BufListObject; static PySequenceMethods BufListAsSeq = { - (inquiry) BufListLength, /* sq_length, len(x) */ + (PyInquiry) BufListLength, /* sq_length, len(x) */ (binaryfunc) 0, /* sq_concat, x+y */ - (intargfunc) 0, /* sq_repeat, x*n */ - (intargfunc) BufListItem, /* sq_item, x[i] */ - (intintargfunc) 0, /* sq_slice, x[i:j] */ - (intobjargproc) 0, /* sq_ass_item, x[i]=v */ - (intintobjargproc) 0, /* sq_ass_slice, x[i:j]=v */ + (PyIntArgFunc) 0, /* sq_repeat, x*n */ + (PyIntArgFunc) BufListItem, /* sq_item, x[i] */ + (PyIntIntArgFunc) 0, /* sq_slice, x[i:j] */ + (PyIntObjArgProc) 0, /* sq_ass_item, x[i]=v */ + (PyIntIntObjArgProc) 0, /* sq_ass_slice, x[i:j]=v */ }; static PyTypeObject BufListType = { @@ -1837,7 +1865,7 @@ static PyTypeObject BufListType = { */ /*ARGSUSED*/ - static int + static PyInt BufListLength(PyObject *self) { buf_T *b = firstbuf; @@ -1854,7 +1882,7 @@ BufListLength(PyObject *self) /*ARGSUSED*/ static PyObject * -BufListItem(PyObject *self, int n) +BufListItem(PyObject *self, PyInt n) { buf_T *b; @@ -2119,13 +2147,13 @@ typedef struct WinListObject; static PySequenceMethods WinListAsSeq = { - (inquiry) WinListLength, /* sq_length, len(x) */ + (PyInquiry) WinListLength, /* sq_length, len(x) */ (binaryfunc) 0, /* sq_concat, x+y */ - (intargfunc) 0, /* sq_repeat, x*n */ - (intargfunc) WinListItem, /* sq_item, x[i] */ - (intintargfunc) 0, /* sq_slice, x[i:j] */ - (intobjargproc) 0, /* sq_ass_item, x[i]=v */ - (intintobjargproc) 0, /* sq_ass_slice, x[i:j]=v */ + (PyIntArgFunc) 0, /* sq_repeat, x*n */ + (PyIntArgFunc) WinListItem, /* sq_item, x[i] */ + (PyIntIntArgFunc) 0, /* sq_slice, x[i:j] */ + (PyIntObjArgProc) 0, /* sq_ass_item, x[i]=v */ + (PyIntIntObjArgProc) 0, /* sq_ass_slice, x[i:j]=v */ }; static PyTypeObject WinListType = { @@ -2154,7 +2182,7 @@ static PyTypeObject WinListType = { /* Window list object - Implementation */ /*ARGSUSED*/ - static int + static PyInt WinListLength(PyObject *self) { win_T *w = firstwin; @@ -2171,7 +2199,7 @@ WinListLength(PyObject *self) /*ARGSUSED*/ static PyObject * -WinListItem(PyObject *self, int n) +WinListItem(PyObject *self, PyInt n) { win_T *w; @@ -2351,10 +2379,10 @@ GetBufferLine(buf_T *buf, int n) * including, hi. The list is returned as a Python list of string objects. */ static PyObject * -GetBufferLineList(buf_T *buf, int lo, int hi) +GetBufferLineList(buf_T *buf, PyInt lo, PyInt hi) { - int i; - int n = hi - lo; + PyInt i; + PyInt n = hi - lo; PyObject *list = PyList_New(n); if (list == NULL) @@ -2517,7 +2545,7 @@ SetBufferLine(buf_T *buf, int n, PyObjec * is set to the change in the buffer length. */ static int -SetBufferLineList(buf_T *buf, int lo, int hi, PyObject *list, int *len_change) +SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, int *len_change) { /* First of all, we check the thpe of the supplied Python object. * There are three cases: @@ -2527,8 +2555,8 @@ SetBufferLineList(buf_T *buf, int lo, in */ if (list == Py_None || list == NULL) { - int i; - int n = hi - lo; + PyInt i; + PyInt n = hi - lo; buf_T *savebuf = curbuf; PyErr_Clear(); @@ -2564,9 +2592,9 @@ SetBufferLineList(buf_T *buf, int lo, in } else if (PyList_Check(list)) { - int i; - int new_len = PyList_Size(list); - int old_len = hi - lo; + PyInt i; + PyInt new_len = PyList_Size(list); + PyInt old_len = hi - lo; int extra = 0; /* lines added to text, can be negative */ char **array; buf_T *savebuf; @@ -2745,8 +2773,8 @@ InsertBufferLines(buf_T *buf, int n, PyO } else if (PyList_Check(lines)) { - int i; - int size = PyList_Size(lines); + PyInt i; + PyInt size = PyList_Size(lines); char **array; buf_T *savebuf; @@ -2831,7 +2859,7 @@ InsertBufferLines(buf_T *buf, int n, PyO LineToString(const char *str) { PyObject *result; - int len = strlen(str); + PyInt len = strlen(str); char *p; /* Allocate an Python string object, with uninitialised contents. We @@ -2871,8 +2899,8 @@ StringToLine(PyObject *obj) { const char *str; char *save; - int len; - int i; + PyInt len; + PyInt i; char *p; if (obj == NULL || !PyString_Check(obj))