summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2001-08-16 13:15:00 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2001-08-16 13:15:00 (GMT)
commite3eb1f2b2320bceb10a763ec8691200b85ec287a (patch)
treedf47f81391869945dc661a08c405b53753fba887 /Python
parentc35422109b36d20f409a3a72f60c0c7e2e0bc824 (diff)
downloadcpython-e3eb1f2b2320bceb10a763ec8691200b85ec287a.zip
cpython-e3eb1f2b2320bceb10a763ec8691200b85ec287a.tar.gz
cpython-e3eb1f2b2320bceb10a763ec8691200b85ec287a.tar.bz2
Patch #427190: Implement and use METH_NOARGS and METH_O.
Diffstat (limited to 'Python')
-rw-r--r--Python/bltinmodule.c159
-rw-r--r--Python/ceval.c73
-rw-r--r--Python/sysmodule.c74
3 files changed, 138 insertions, 168 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index fa68162..12af47f 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -53,12 +53,8 @@ fromlist is not empty.";
static PyObject *
-builtin_abs(PyObject *self, PyObject *args)
+builtin_abs(PyObject *self, PyObject *v)
{
- PyObject *v;
-
- if (!PyArg_ParseTuple(args, "O:abs", &v))
- return NULL;
return PyNumber_Absolute(v);
}
@@ -132,12 +128,8 @@ extend to the end of the target object (or with the specified size).";
static PyObject *
-builtin_callable(PyObject *self, PyObject *args)
+builtin_callable(PyObject *self, PyObject *v)
{
- PyObject *v;
-
- if (!PyArg_ParseTuple(args, "O:callable", &v))
- return NULL;
return PyInt_FromLong((long)PyCallable_Check(v));
}
@@ -667,12 +659,10 @@ exist; without it, an exception is raised in that case.";
static PyObject *
-builtin_globals(PyObject *self, PyObject *args)
+builtin_globals(PyObject *self)
{
PyObject *d;
- if (!PyArg_ParseTuple(args, ":globals"))
- return NULL;
d = PyEval_GetGlobals();
Py_INCREF(d);
return d;
@@ -722,12 +712,8 @@ Return whether the object has an attribute with the given name.\n\
static PyObject *
-builtin_id(PyObject *self, PyObject *args)
+builtin_id(PyObject *self, PyObject *v)
{
- PyObject *v;
-
- if (!PyArg_ParseTuple(args, "O:id", &v))
- return NULL;
return PyLong_FromVoidPtr(v);
}
@@ -949,13 +935,10 @@ Delete a named attribute on an object; delattr(x, 'y') is equivalent to\n\
static PyObject *
-builtin_hash(PyObject *self, PyObject *args)
+builtin_hash(PyObject *self, PyObject *v)
{
- PyObject *v;
long x;
- if (!PyArg_ParseTuple(args, "O:hash", &v))
- return NULL;
x = PyObject_Hash(v);
if (x == -1)
return NULL;
@@ -970,14 +953,10 @@ the same hash value. The reverse is not necessarily true, but likely.";
static PyObject *
-builtin_hex(PyObject *self, PyObject *args)
+builtin_hex(PyObject *self, PyObject *v)
{
- PyObject *v;
PyNumberMethods *nb;
- if (!PyArg_ParseTuple(args, "O:hex", &v))
- return NULL;
-
if ((nb = v->ob_type->tp_as_number) == NULL ||
nb->nb_hex == NULL) {
PyErr_SetString(PyExc_TypeError,
@@ -1075,13 +1054,10 @@ In the second form, the callable is called until it returns the sentinel.";
static PyObject *
-builtin_len(PyObject *self, PyObject *args)
+builtin_len(PyObject *self, PyObject *v)
{
- PyObject *v;
long res;
- if (!PyArg_ParseTuple(args, "O:len", &v))
- return NULL;
res = PyObject_Size(v);
if (res < 0 && PyErr_Occurred())
return NULL;
@@ -1120,12 +1096,10 @@ Create a slice object. This is used for slicing by the Numeric extensions.";
static PyObject *
-builtin_locals(PyObject *self, PyObject *args)
+builtin_locals(PyObject *self)
{
PyObject *d;
- if (!PyArg_ParseTuple(args, ":locals"))
- return NULL;
d = PyEval_GetLocals();
Py_INCREF(d);
return d;
@@ -1217,13 +1191,10 @@ With two or more arguments, return the largest argument.";
static PyObject *
-builtin_oct(PyObject *self, PyObject *args)
+builtin_oct(PyObject *self, PyObject *v)
{
- PyObject *v;
PyNumberMethods *nb;
- if (!PyArg_ParseTuple(args, "O:oct", &v))
- return NULL;
if (v == NULL || (nb = v->ob_type->tp_as_number) == NULL ||
nb->nb_oct == NULL) {
PyErr_SetString(PyExc_TypeError,
@@ -1270,15 +1241,11 @@ buffered, and larger numbers specify the buffer size.";
static PyObject *
-builtin_ord(PyObject *self, PyObject *args)
+builtin_ord(PyObject *self, PyObject* obj)
{
- PyObject *obj;
long ord;
int size;
- if (!PyArg_ParseTuple(args, "O:ord", &obj))
- return NULL;
-
if (PyString_Check(obj)) {
size = PyString_GET_SIZE(obj);
if (size == 1) {
@@ -1611,12 +1578,8 @@ sequence is empty.";
static PyObject *
-builtin_reload(PyObject *self, PyObject *args)
+builtin_reload(PyObject *self, PyObject *v)
{
- PyObject *v;
-
- if (!PyArg_ParseTuple(args, "O:reload", &v))
- return NULL;
return PyImport_ReloadModule(v);
}
@@ -1627,12 +1590,8 @@ Reload the module. The module must have been successfully imported before.";
static PyObject *
-builtin_repr(PyObject *self, PyObject *args)
+builtin_repr(PyObject *self, PyObject *v)
{
- PyObject *v;
-
- if (!PyArg_ParseTuple(args, "O:repr", &v))
- return NULL;
return PyObject_Repr(v);
}
@@ -1841,53 +1800,53 @@ in length to the length of the shortest argument sequence.";
static PyMethodDef builtin_methods[] = {
- {"__import__", builtin___import__, 1, import_doc},
- {"abs", builtin_abs, 1, abs_doc},
- {"apply", builtin_apply, 1, apply_doc},
- {"buffer", builtin_buffer, 1, buffer_doc},
- {"callable", builtin_callable, 1, callable_doc},
- {"chr", builtin_chr, 1, chr_doc},
- {"cmp", builtin_cmp, 1, cmp_doc},
- {"coerce", builtin_coerce, 1, coerce_doc},
- {"compile", builtin_compile, 1, compile_doc},
- {"delattr", builtin_delattr, 1, delattr_doc},
- {"dir", builtin_dir, 1, dir_doc},
- {"divmod", builtin_divmod, 1, divmod_doc},
- {"eval", builtin_eval, 1, eval_doc},
- {"execfile", builtin_execfile, 1, execfile_doc},
- {"filter", builtin_filter, 1, filter_doc},
- {"getattr", builtin_getattr, 1, getattr_doc},
- {"globals", builtin_globals, 1, globals_doc},
- {"hasattr", builtin_hasattr, 1, hasattr_doc},
- {"hash", builtin_hash, 1, hash_doc},
- {"hex", builtin_hex, 1, hex_doc},
- {"id", builtin_id, 1, id_doc},
- {"input", builtin_input, 1, input_doc},
- {"intern", builtin_intern, 1, intern_doc},
- {"isinstance", builtin_isinstance, 1, isinstance_doc},
- {"issubclass", builtin_issubclass, 1, issubclass_doc},
- {"iter", builtin_iter, 1, iter_doc},
- {"len", builtin_len, 1, len_doc},
- {"locals", builtin_locals, 1, locals_doc},
- {"map", builtin_map, 1, map_doc},
- {"max", builtin_max, 1, max_doc},
- {"min", builtin_min, 1, min_doc},
- {"oct", builtin_oct, 1, oct_doc},
- {"open", builtin_open, 1, open_doc},
- {"ord", builtin_ord, 1, ord_doc},
- {"pow", builtin_pow, 1, pow_doc},
- {"range", builtin_range, 1, range_doc},
- {"raw_input", builtin_raw_input, 1, raw_input_doc},
- {"reduce", builtin_reduce, 1, reduce_doc},
- {"reload", builtin_reload, 1, reload_doc},
- {"repr", builtin_repr, 1, repr_doc},
- {"round", builtin_round, 1, round_doc},
- {"setattr", builtin_setattr, 1, setattr_doc},
- {"slice", builtin_slice, 1, slice_doc},
- {"unichr", builtin_unichr, 1, unichr_doc},
- {"vars", builtin_vars, 1, vars_doc},
- {"xrange", builtin_xrange, 1, xrange_doc},
- {"zip", builtin_zip, 1, zip_doc},
+ {"__import__", builtin___import__, METH_VARARGS, import_doc},
+ {"abs", builtin_abs, METH_O, abs_doc},
+ {"apply", builtin_apply, METH_VARARGS, apply_doc},
+ {"buffer", builtin_buffer, METH_VARARGS, buffer_doc},
+ {"callable", builtin_callable, METH_O, callable_doc},
+ {"chr", builtin_chr, METH_VARARGS, chr_doc},
+ {"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
+ {"coerce", builtin_coerce, METH_VARARGS, coerce_doc},
+ {"compile", builtin_compile, METH_VARARGS, compile_doc},
+ {"delattr", builtin_delattr, METH_VARARGS, delattr_doc},
+ {"dir", builtin_dir, METH_VARARGS, dir_doc},
+ {"divmod", builtin_divmod, METH_VARARGS, divmod_doc},
+ {"eval", builtin_eval, METH_VARARGS, eval_doc},
+ {"execfile", builtin_execfile, METH_VARARGS, execfile_doc},
+ {"filter", builtin_filter, METH_VARARGS, filter_doc},
+ {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
+ {"globals", (PyCFunction)builtin_globals, METH_NOARGS, globals_doc},
+ {"hasattr", builtin_hasattr, METH_VARARGS, hasattr_doc},
+ {"hash", builtin_hash, METH_O, hash_doc},
+ {"hex", builtin_hex, METH_O, hex_doc},
+ {"id", builtin_id, METH_O, id_doc},
+ {"input", builtin_input, METH_VARARGS, input_doc},
+ {"intern", builtin_intern, METH_VARARGS, intern_doc},
+ {"isinstance", builtin_isinstance, METH_VARARGS, isinstance_doc},
+ {"issubclass", builtin_issubclass, METH_VARARGS, issubclass_doc},
+ {"iter", builtin_iter, METH_VARARGS, iter_doc},
+ {"len", builtin_len, METH_O, len_doc},
+ {"locals", (PyCFunction)builtin_locals, METH_NOARGS, locals_doc},
+ {"map", builtin_map, METH_VARARGS, map_doc},
+ {"max", builtin_max, METH_VARARGS, max_doc},
+ {"min", builtin_min, METH_VARARGS, min_doc},
+ {"oct", builtin_oct, METH_O, oct_doc},
+ {"open", builtin_open, METH_VARARGS, open_doc},
+ {"ord", builtin_ord, METH_O, ord_doc},
+ {"pow", builtin_pow, METH_VARARGS, pow_doc},
+ {"range", builtin_range, METH_VARARGS, range_doc},
+ {"raw_input", builtin_raw_input, METH_VARARGS, raw_input_doc},
+ {"reduce", builtin_reduce, METH_VARARGS, reduce_doc},
+ {"reload", builtin_reload, METH_O, reload_doc},
+ {"repr", builtin_repr, METH_O, repr_doc},
+ {"round", builtin_round, METH_VARARGS, round_doc},
+ {"setattr", builtin_setattr, METH_VARARGS, setattr_doc},
+ {"slice", builtin_slice, METH_VARARGS, slice_doc},
+ {"unichr", builtin_unichr, METH_VARARGS, unichr_doc},
+ {"vars", builtin_vars, METH_VARARGS, vars_doc},
+ {"xrange", builtin_xrange, METH_VARARGS, xrange_doc},
+ {"zip", builtin_zip, METH_VARARGS, zip_doc},
{NULL, NULL},
};
diff --git a/Python/ceval.c b/Python/ceval.c
index 7e98a25..6ee8ae3 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -166,13 +166,10 @@ gen_iternext(genobject *gen)
}
static PyObject *
-gen_next(genobject *gen, PyObject *args)
+gen_next(genobject *gen)
{
PyObject *result;
- if (!PyArg_ParseTuple(args, ":next"))
- return NULL;
-
result = gen_iternext(gen);
if (result == NULL && !PyErr_Occurred()) {
@@ -191,7 +188,7 @@ gen_getiter(PyObject *gen)
}
static struct PyMethodDef gen_methods[] = {
- {"next", (PyCFunction)gen_next, METH_VARARGS,
+ {"next", (PyCFunction)gen_next, METH_NOARGS,
"next() -- get the next value, or raise StopIteration"},
{NULL, NULL} /* Sentinel */
};
@@ -1938,7 +1935,7 @@ eval_frame(PyFrameObject *f)
*/
if (PyCFunction_Check(func)) {
int flags = PyCFunction_GET_FLAGS(func);
- if (flags > 1 || nk != 0)
+ if (nk != 0 || (flags & METH_KEYWORDS))
x = do_call(func, &stack_pointer,
na, nk);
else if (flags == METH_VARARGS) {
@@ -1946,9 +1943,9 @@ eval_frame(PyFrameObject *f)
callargs = load_args(&stack_pointer, na);
x = PyCFunction_Call(func, callargs, NULL);
Py_XDECREF(callargs);
- } else if (!(flags & METH_KEYWORDS))
- x = fast_cfunction(func,
- &stack_pointer, na);
+ } else
+ x = fast_cfunction(func,
+ &stack_pointer, na);
} else {
if (PyMethod_Check(func)
&& PyMethod_GET_SELF(func) != NULL) {
@@ -3046,20 +3043,50 @@ fast_cfunction(PyObject *func, PyObject ***pp_stack, int na)
{
PyCFunction meth = PyCFunction_GET_FUNCTION(func);
PyObject *self = PyCFunction_GET_SELF(func);
-
- if (na == 0)
- return (*meth)(self, NULL);
- else if (na == 1) {
- PyObject *arg = EXT_POP(*pp_stack);
- PyObject *result = (*meth)(self, arg);
- Py_DECREF(arg);
- return result;
- } else {
- PyObject *args = load_args(pp_stack, na);
- PyObject *result = (*meth)(self, args);
- Py_DECREF(args);
- return result;
- }
+ int flags = PyCFunction_GET_FLAGS(func);
+
+ switch (flags) {
+ case METH_OLDARGS:
+ if (na == 0)
+ return (*meth)(self, NULL);
+ else if (na == 1) {
+ PyObject *arg = EXT_POP(*pp_stack);
+ PyObject *result = (*meth)(self, arg);
+ Py_DECREF(arg);
+ return result;
+ } else {
+ PyObject *args = load_args(pp_stack, na);
+ PyObject *result = (*meth)(self, args);
+ Py_DECREF(args);
+ return result;
+ }
+ break;
+ case METH_NOARGS:
+ if (na == 0)
+ return (*meth)(self, NULL);
+ PyErr_Format(PyExc_TypeError,
+ "%.200s() takes no arguments (%d given)",
+ ((PyCFunctionObject*)func)->m_ml->ml_name, na);
+ return NULL;
+ break;
+ case METH_O:
+ if (na == 1) {
+ PyObject *arg = EXT_POP(*pp_stack);
+ PyObject *result = (*meth)(self, arg);
+ Py_DECREF(arg);
+ return result;
+ }
+ PyErr_Format(PyExc_TypeError,
+ "%.200s() takes exactly one argument (%d given)",
+ ((PyCFunctionObject*)func)->m_ml->ml_name, na);
+ return NULL;
+ break;
+ default:
+ fprintf(stderr, "%.200s() flags = %d\n",
+ ((PyCFunctionObject*)func)->m_ml->ml_name, flags);
+ PyErr_BadInternalCall();
+ return NULL;
+ }
}
static PyObject *
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 4ae207b..2eae03d 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -68,9 +68,9 @@ PySys_SetObject(char *name, PyObject *v)
}
static PyObject *
-sys_displayhook(PyObject *self, PyObject *args)
+sys_displayhook(PyObject *self, PyObject *o)
{
- PyObject *o, *outf;
+ PyObject *outf;
PyInterpreterState *interp = PyThreadState_Get()->interp;
PyObject *modules = interp->modules;
PyObject *builtins = PyDict_GetItemString(modules, "__builtin__");
@@ -80,10 +80,6 @@ sys_displayhook(PyObject *self, PyObject *args)
return NULL;
}
- /* parse arguments */
- if (!PyArg_ParseTuple(args, "O:displayhook", &o))
- return NULL;
-
/* Print value except if None */
/* After printing, also assign to '_' */
/* Before, set '_' to None to avoid recursion */
@@ -133,11 +129,9 @@ static char excepthook_doc[] =
"Handle an exception by displaying it with a traceback on sys.stderr.\n";
static PyObject *
-sys_exc_info(PyObject *self, PyObject *args)
+sys_exc_info(PyObject *self)
{
PyThreadState *tstate;
- if (!PyArg_ParseTuple(args, ":exc_info"))
- return NULL;
tstate = PyThreadState_Get();
return Py_BuildValue(
"(OOO)",
@@ -171,10 +165,8 @@ If it is another kind of object, it will be printed and the system\n\
exit status will be one (i.e., failure).";
static PyObject *
-sys_getdefaultencoding(PyObject *self, PyObject *args)
+sys_getdefaultencoding(PyObject *self)
{
- if (!PyArg_ParseTuple(args, ":getdefaultencoding"))
- return NULL;
return PyString_FromString(PyUnicode_GetDefaultEncoding());
}
@@ -385,10 +377,8 @@ stack and crashing Python. The highest possible limit is platform-\n\
dependent.";
static PyObject *
-sys_getrecursionlimit(PyObject *self, PyObject *args)
+sys_getrecursionlimit(PyObject *self)
{
- if (!PyArg_ParseTuple(args, ":getrecursionlimit"))
- return NULL;
return PyInt_FromLong(Py_GetRecursionLimit());
}
@@ -427,8 +417,6 @@ static PyObject *
sys_getdlopenflags(PyObject *self, PyObject *args)
{
PyThreadState *tstate = PyThreadState_Get();
- if (!PyArg_ParseTuple(args, ":getdlopenflags"))
- return NULL;
if (!tstate)
return NULL;
return PyInt_FromLong(tstate->interp->dlopenflags);
@@ -468,11 +456,9 @@ sys_getrefcount(PyObject *self, PyObject *args)
#ifdef Py_TRACE_REFS
static PyObject *
-sys_gettotalrefcount(PyObject *self, PyObject *args)
+sys_gettotalrefcount(PyObject *self)
{
extern long _Py_RefTotal;
- if (!PyArg_ParseTuple(args, ":gettotalrefcount"))
- return NULL;
return PyInt_FromLong(_Py_RefTotal);
}
@@ -486,12 +472,10 @@ temporary reference in the argument list, so it is at least 2.";
#ifdef COUNT_ALLOCS
static PyObject *
-sys_getcounts(PyObject *self, PyObject *args)
+sys_getcounts(PyObject *self)
{
extern PyObject *get_counts(void);
- if (!PyArg_ParseTuple(args, ":getcounts"))
- return NULL;
return get_counts();
}
#endif
@@ -542,45 +526,45 @@ extern PyObject *_Py_GetDXProfile(PyObject *, PyObject *);
static PyMethodDef sys_methods[] = {
/* Might as well keep this in alphabetic order */
- {"displayhook", sys_displayhook, 1, displayhook_doc},
- {"exc_info", sys_exc_info, 1, exc_info_doc},
- {"excepthook", sys_excepthook, 1, excepthook_doc},
- {"exit", sys_exit, 0, exit_doc},
- {"getdefaultencoding", sys_getdefaultencoding, 1,
+ {"displayhook", sys_displayhook, METH_O, displayhook_doc},
+ {"exc_info", (PyCFunction)sys_exc_info, METH_NOARGS, exc_info_doc},
+ {"excepthook", sys_excepthook, METH_VARARGS, excepthook_doc},
+ {"exit", sys_exit, METH_OLDARGS, exit_doc},
+ {"getdefaultencoding", (PyCFunction)sys_getdefaultencoding, METH_NOARGS,
getdefaultencoding_doc},
#ifdef HAVE_DLOPEN
- {"getdlopenflags", sys_getdlopenflags, 1,
- getdlopenflags_doc},
+ {"getdlopenflags", (PyCFunction)sys_getdlopenflags, METH_NOARGS,
+ getdlopenflags_doc},
#endif
#ifdef COUNT_ALLOCS
- {"getcounts", sys_getcounts, 1},
+ {"getcounts", (PyCFunction)sys_getcounts, METH_NOARGS},
#endif
#ifdef DYNAMIC_EXECUTION_PROFILE
- {"getdxp", _Py_GetDXProfile, 1},
+ {"getdxp", _Py_GetDXProfile, METH_VARARGS},
#endif
#ifdef Py_TRACE_REFS
- {"getobjects", _Py_GetObjects, 1},
- {"gettotalrefcount", sys_gettotalrefcount, 1},
+ {"getobjects", _Py_GetObjects, METH_VARARGS},
+ {"gettotalrefcount", (PyCFunction)sys_gettotalrefcount, METH_NOARGS},
#endif
- {"getrefcount", sys_getrefcount, 1, getrefcount_doc},
- {"getrecursionlimit", sys_getrecursionlimit, 1,
+ {"getrefcount", sys_getrefcount, METH_VARARGS, getrefcount_doc},
+ {"getrecursionlimit", (PyCFunction)sys_getrecursionlimit, METH_NOARGS,
getrecursionlimit_doc},
- {"_getframe", sys_getframe, 1, getframe_doc},
+ {"_getframe", sys_getframe, METH_VARARGS, getframe_doc},
#ifdef USE_MALLOPT
- {"mdebug", sys_mdebug, 1},
+ {"mdebug", sys_mdebug, METH_VARARGS},
#endif
- {"setdefaultencoding", sys_setdefaultencoding, 1,
+ {"setdefaultencoding", sys_setdefaultencoding, METH_VARARGS,
setdefaultencoding_doc},
- {"setcheckinterval", sys_setcheckinterval, 1,
+ {"setcheckinterval", sys_setcheckinterval, METH_VARARGS,
setcheckinterval_doc},
#ifdef HAVE_DLOPEN
- {"setdlopenflags", sys_setdlopenflags, 1,
- setdlopenflags_doc},
+ {"setdlopenflags", sys_setdlopenflags, METH_VARARGS,
+ setdlopenflags_doc},
#endif
- {"setprofile", sys_setprofile, 0, setprofile_doc},
- {"setrecursionlimit", sys_setrecursionlimit, 1,
+ {"setprofile", sys_setprofile, METH_OLDARGS, setprofile_doc},
+ {"setrecursionlimit", sys_setrecursionlimit, METH_VARARGS,
setrecursionlimit_doc},
- {"settrace", sys_settrace, 0, settrace_doc},
+ {"settrace", sys_settrace, METH_OLDARGS, settrace_doc},
{NULL, NULL} /* sentinel */
};