summaryrefslogtreecommitdiffstats
path: root/src/if_py_both.h
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2013-06-23 13:00:44 +0200
committerBram Moolenaar <Bram@vim.org>2013-06-23 13:00:44 +0200
commit389a1793f40b149ed8553fb75e7ee40bc684d8c5 (patch)
tree971523c08fe053e9dc314e634bc9b719d855f368 /src/if_py_both.h
parent6c85e7f3be87fa4a669e8f080d527a3982e8e96c (diff)
updated for version 7.3.1227v7.3.1227
Problem: Inconsistent string conversion. Solution: Use 'encoding' instead of utf-8. Use METH_O in place of METH_VARARGS where appropriate. (ZyX)
Diffstat (limited to 'src/if_py_both.h')
-rw-r--r--src/if_py_both.h104
1 files changed, 58 insertions, 46 deletions
diff --git a/src/if_py_both.h b/src/if_py_both.h
index 164e2a42aa..64b7e542f2 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -466,21 +466,20 @@ VimCheckInterrupt(void)
*/
static PyObject *
-VimCommand(PyObject *self UNUSED, PyObject *args)
+VimCommand(PyObject *self UNUSED, PyObject *string)
{
- char *cmd;
- PyObject *result;
+ char_u *cmd;
+ PyObject *result;
+ PyObject *todecref;
- if (!PyArg_ParseTuple(args, "s", &cmd))
+ if (!(cmd = StringToChars(string, &todecref)))
return NULL;
- PyErr_Clear();
-
Py_BEGIN_ALLOW_THREADS
Python_Lock_Vim();
VimTryStart();
- do_cmdline_cmd((char_u *)cmd);
+ do_cmdline_cmd(cmd);
update_screen(VALID);
Python_Release_Vim();
@@ -491,8 +490,8 @@ VimCommand(PyObject *self UNUSED, PyObject *args)
else
result = Py_None;
-
Py_XINCREF(result);
+ Py_XDECREF(todecref);
return result;
}
@@ -641,21 +640,28 @@ VimToPython(typval_T *our_tv, int depth, PyObject *lookup_dict)
static PyObject *
VimEval(PyObject *self UNUSED, PyObject *args)
{
- char *expr;
+ char_u *expr;
typval_T *our_tv;
+ PyObject *string;
+ PyObject *todecref;
PyObject *result;
- PyObject *lookup_dict;
+ PyObject *lookup_dict;
+
+ if (!PyArg_ParseTuple(args, "O", &string))
+ return NULL;
- if (!PyArg_ParseTuple(args, "s", &expr))
+ if (!(expr = StringToChars(string, &todecref)))
return NULL;
Py_BEGIN_ALLOW_THREADS
Python_Lock_Vim();
VimTryStart();
- our_tv = eval_expr((char_u *)expr, NULL);
+ our_tv = eval_expr(expr, NULL);
Python_Release_Vim();
Py_END_ALLOW_THREADS
+ Py_XDECREF(todecref);
+
if (VimTryEnd())
return NULL;
@@ -688,22 +694,25 @@ VimEval(PyObject *self UNUSED, PyObject *args)
static PyObject *ConvertToPyObject(typval_T *);
static PyObject *
-VimEvalPy(PyObject *self UNUSED, PyObject *args)
+VimEvalPy(PyObject *self UNUSED, PyObject *string)
{
- char *expr;
typval_T *our_tv;
PyObject *result;
+ char_u *expr;
+ PyObject *todecref;
- if (!PyArg_ParseTuple(args, "s", &expr))
+ if (!(expr = StringToChars(string, &todecref)))
return NULL;
Py_BEGIN_ALLOW_THREADS
Python_Lock_Vim();
VimTryStart();
- our_tv = eval_expr((char_u *)expr, NULL);
+ our_tv = eval_expr(expr, NULL);
Python_Release_Vim();
Py_END_ALLOW_THREADS
+ Py_XDECREF(todecref);
+
if (VimTryEnd())
return NULL;
@@ -724,20 +733,24 @@ VimEvalPy(PyObject *self UNUSED, PyObject *args)
}
static PyObject *
-VimStrwidth(PyObject *self UNUSED, PyObject *args)
+VimStrwidth(PyObject *self UNUSED, PyObject *string)
{
- char *expr;
+ char_u *str;
+ PyObject *todecref;
+ int result;
- if (!PyArg_ParseTuple(args, "s", &expr))
+ if (!(str = StringToChars(string, &todecref)))
return NULL;
- return PyLong_FromLong(
#ifdef FEAT_MBYTE
- mb_string2cells((char_u *)expr, (int)STRLEN(expr))
+ result = mb_string2cells(str, (int)STRLEN(str));
#else
- STRLEN(expr)
+ result = STRLEN(str);
#endif
- );
+
+ Py_XDECREF(todecref);
+
+ return PyLong_FromLong(result);
}
static PyObject *
@@ -840,13 +853,11 @@ map_rtp_callback(char_u *path, void *_data)
}
static PyObject *
-VimForeachRTP(PyObject *self UNUSED, PyObject *args)
+VimForeachRTP(PyObject *self UNUSED, PyObject *callable)
{
map_rtp_data data;
- if (!PyArg_ParseTuple(args, "O", &data.callable))
- return NULL;
-
+ data.callable = callable;
data.result = NULL;
do_in_runtimepath(NULL, FALSE, &map_rtp_callback, &data);
@@ -1099,13 +1110,13 @@ VimPathHook(PyObject *self UNUSED, PyObject *args)
static struct PyMethodDef VimMethods[] = {
/* name, function, calling, documentation */
- {"command", VimCommand, METH_VARARGS, "Execute a Vim ex-mode command" },
+ {"command", VimCommand, METH_O, "Execute a Vim ex-mode command" },
{"eval", VimEval, METH_VARARGS, "Evaluate an expression using Vim evaluator" },
- {"bindeval", VimEvalPy, METH_VARARGS, "Like eval(), but returns objects attached to vim ones"},
- {"strwidth", VimStrwidth, METH_VARARGS, "Screen string width, counts <Tab> as having width 1"},
+ {"bindeval", VimEvalPy, METH_O, "Like eval(), but returns objects attached to vim ones"},
+ {"strwidth", VimStrwidth, METH_O, "Screen string width, counts <Tab> as having width 1"},
{"chdir", (PyCFunction)VimChdir, METH_VARARGS|METH_KEYWORDS, "Change directory"},
{"fchdir", (PyCFunction)VimFchdir, METH_VARARGS|METH_KEYWORDS, "Change directory"},
- {"foreach_rtp", VimForeachRTP, METH_VARARGS, "Call given callable for each path in &rtp"},
+ {"foreach_rtp", VimForeachRTP, METH_O, "Call given callable for each path in &rtp"},
{"find_module", FinderFindModule, METH_VARARGS, "Internal use only, returns loader object for any input it receives"},
{"path_hook", VimPathHook, METH_VARARGS, "Hook function to install in sys.path_hooks"},
{"_get_paths", (PyCFunction)Vim_GetPaths, METH_NOARGS, "Get &rtp-based additions to sys.path"},
@@ -1733,7 +1744,7 @@ DictionaryUpdate(DictionaryObject *self, PyObject *args, PyObject *kwargs)
{
PyObject *object;
- if (!PyArg_Parse(args, "(O)", &object))
+ if (!PyArg_ParseTuple(args, "O", &object))
return NULL;
if (PyObject_HasAttrString(object, "keys"))
@@ -1877,13 +1888,8 @@ DictionaryPopItem(DictionaryObject *self)
}
static PyObject *
-DictionaryHasKey(DictionaryObject *self, PyObject *args)
+DictionaryHasKey(DictionaryObject *self, PyObject *keyObject)
{
- PyObject *keyObject;
-
- if (!PyArg_ParseTuple(args, "O", &keyObject))
- return NULL;
-
return _DictionaryItem(self, keyObject, DICT_FLAG_RETURN_BOOL);
}
@@ -1914,7 +1920,7 @@ static struct PyMethodDef DictionaryMethods[] = {
{"get", (PyCFunction)DictionaryGet, METH_VARARGS, ""},
{"pop", (PyCFunction)DictionaryPop, METH_VARARGS, ""},
{"popitem", (PyCFunction)DictionaryPopItem, METH_NOARGS, ""},
- {"has_key", (PyCFunction)DictionaryHasKey, METH_VARARGS, ""},
+ {"has_key", (PyCFunction)DictionaryHasKey, METH_O, ""},
{"__dir__", (PyCFunction)DictionaryDir, METH_NOARGS, ""},
{ NULL, NULL, 0, NULL}
};
@@ -2434,11 +2440,13 @@ FunctionConstructor(PyTypeObject *subtype, PyObject *args, PyObject *kwargs)
return NULL;
}
- if (!PyArg_ParseTuple(args, "s", &name))
+ if (!PyArg_ParseTuple(args, "et", "ascii", &name))
return NULL;
self = FunctionNew(subtype, name);
+ PyMem_Free(name);
+
return self;
}
@@ -4383,20 +4391,21 @@ BufferAppend(BufferObject *self, PyObject *args)
}
static PyObject *
-BufferMark(BufferObject *self, PyObject *args)
+BufferMark(BufferObject *self, PyObject *pmarkObject)
{
pos_T *posp;
- char *pmark;
- char mark;
+ char_u *pmark;
+ char_u mark;
buf_T *savebuf;
+ PyObject *todecref;
if (CheckBuffer(self))
return NULL;
- if (!PyArg_ParseTuple(args, "s", &pmark))
+ if (!(pmark = StringToChars(pmarkObject, &todecref)))
return NULL;
- if (STRLEN(pmark) != 1)
+ if (pmark[0] == '\0' || pmark[1] != '\0')
{
PyErr_SetString(PyExc_ValueError,
_("mark name must be a single character"));
@@ -4404,6 +4413,9 @@ BufferMark(BufferObject *self, PyObject *args)
}
mark = *pmark;
+
+ Py_XDECREF(todecref);
+
VimTryStart();
switch_buffer(&savebuf, self->buf);
posp = getmark(mark, FALSE);
@@ -4461,7 +4473,7 @@ BufferRepr(BufferObject *self)
static struct PyMethodDef BufferMethods[] = {
/* name, function, calling, documentation */
{"append", (PyCFunction)BufferAppend, METH_VARARGS, "Append data to Vim buffer" },
- {"mark", (PyCFunction)BufferMark, METH_VARARGS, "Return (row,col) representing position of named mark" },
+ {"mark", (PyCFunction)BufferMark, METH_O, "Return (row,col) representing position of named mark" },
{"range", (PyCFunction)BufferRange, METH_VARARGS, "Return a range object which represents the part of the given buffer between line numbers s and e" },
{"__dir__", (PyCFunction)BufferDir, METH_NOARGS, ""},
{ NULL, NULL, 0, NULL}