Feature or enhancement
Proposal:
Note: PR's for this should tackle a couple modules at a time.
We should avoid code like this in private clinic functions which aren't exported as public:
|
/*[clinic input] |
|
os._path_normpath |
|
|
|
path: object |
|
|
|
Basic path normalization. |
|
[clinic start generated code]*/ |
This causes a lot of overhead with no practical benefit:
|
#define OS__PATH_NORMPATH_METHODDEF \ |
|
{"_path_normpath", _PyCFunction_CAST(os__path_normpath), METH_FASTCALL|METH_KEYWORDS, os__path_normpath__doc__}, |
|
|
|
static PyObject * |
|
os__path_normpath_impl(PyObject *module, PyObject *path); |
|
|
|
static PyObject * |
|
os__path_normpath(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) |
|
{ |
|
PyObject *return_value = NULL; |
|
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
|
|
|
#define NUM_KEYWORDS 1 |
|
static struct { |
|
PyGC_Head _this_is_not_used; |
|
PyObject_VAR_HEAD |
|
PyObject *ob_item[NUM_KEYWORDS]; |
|
} _kwtuple = { |
|
.ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
|
.ob_item = { &_Py_ID(path), }, |
|
}; |
|
#undef NUM_KEYWORDS |
|
#define KWTUPLE (&_kwtuple.ob_base.ob_base) |
|
|
|
#else // !Py_BUILD_CORE |
|
# define KWTUPLE NULL |
|
#endif // !Py_BUILD_CORE |
|
|
|
static const char * const _keywords[] = {"path", NULL}; |
|
static _PyArg_Parser _parser = { |
|
.keywords = _keywords, |
|
.fname = "_path_normpath", |
|
.kwtuple = KWTUPLE, |
|
}; |
|
#undef KWTUPLE |
|
PyObject *argsbuf[1]; |
|
PyObject *path; |
|
|
|
args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); |
|
if (!args) { |
|
goto exit; |
|
} |
|
path = args[0]; |
|
return_value = os__path_normpath_impl(module, path); |
|
|
|
exit: |
|
return return_value; |
|
} |
If we wrote this instead:
/*[clinic input]
os._path_normpath
path: object
/
Basic path normalization.
[clinic start generated code]*/
The overhead is gone:
#define OS__PATH_NORMPATH_METHODDEF \
{"_path_normpath", (PyCFunction)os__path_normpath, METH_O, os__path_normpath__doc__},
No, I didn't forget to include the rest of the code, this is all the code!
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
Linked PRs
Feature or enhancement
Proposal:
Note: PR's for this should tackle a couple modules at a time.
We should avoid code like this in private clinic functions which aren't exported as public:
cpython/Modules/posixmodule.c
Lines 5470 to 5476 in 8fc953f
This causes a lot of overhead with no practical benefit:
cpython/Modules/clinic/posixmodule.c.h
Lines 2257 to 2304 in 8fc953f
If we wrote this instead:
The overhead is gone:
No, I didn't forget to include the rest of the code, this is all the code!
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
Linked PRs
os.path#118035