diff options
author | Pablo Galindo <Pablogsal@gmail.com> | 2018-12-30 09:24:03 (GMT) |
---|---|---|
committer | Raymond Hettinger <rhettinger@users.noreply.github.com> | 2018-12-30 09:24:03 (GMT) |
commit | 3f5fc70c6213008243e7d605f7d8a2d8f94cf919 (patch) | |
tree | 44c396f3a052803c4725eec2e6ccb1ab32529c8f /Modules/clinic | |
parent | b0a6196ffd58ff91462191f426706897dc920eee (diff) | |
download | cpython-3f5fc70c6213008243e7d605f7d8a2d8f94cf919.zip cpython-3f5fc70c6213008243e7d605f7d8a2d8f94cf919.tar.gz cpython-3f5fc70c6213008243e7d605f7d8a2d8f94cf919.tar.bz2 |
bpo-32492: 1.6x speed up in namedtuple attribute access using C fast-path (#10495)
* bpo-32492: 2.5x speed up in namedtuple attribute access using C fast path
* Add News entry
* fixup! bpo-32492: 2.5x speed up in namedtuple attribute access using C fast path
* Check for tuple in the __get__ of the new descriptor and don't cache the descriptor itself
* Don't inherit from property. Implement GC methods to handle __doc__
* Add a test for the docstring substitution in descriptors
* Update NEWS entry to reflect time against 3.7 branch
* Simplify implementation with argument clinic, better error messages, only __new__
* Use positional-only parameters for the __new__
* Use PyTuple_GET_SIZE and PyTuple_GET_ITEM to tighter the implementation of tuplegetterdescr_get
* Implement __set__ to make tuplegetter a data descriptor
* Use Py_INCREF now that we inline PyTuple_GetItem
* Apply the valid_index() function, saving one test
* Move Py_None test out of the critical path.
Diffstat (limited to 'Modules/clinic')
-rw-r--r-- | Modules/clinic/_collectionsmodule.c.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/Modules/clinic/_collectionsmodule.c.h b/Modules/clinic/_collectionsmodule.c.h new file mode 100644 index 0000000..12626c1 --- /dev/null +++ b/Modules/clinic/_collectionsmodule.c.h @@ -0,0 +1,28 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +static PyObject * +tuplegetter_new_impl(PyTypeObject *type, Py_ssize_t index, PyObject *doc); + +static PyObject * +tuplegetter_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) +{ + PyObject *return_value = NULL; + Py_ssize_t index; + PyObject *doc; + + if ((type == &tuplegetter_type) && + !_PyArg_NoKeywords("_tuplegetter", kwargs)) { + goto exit; + } + if (!PyArg_ParseTuple(args, "nO:_tuplegetter", + &index, &doc)) { + goto exit; + } + return_value = tuplegetter_new_impl(type, index, doc); + +exit: + return return_value; +} +/*[clinic end generated code: output=83746071eacc28d3 input=a9049054013a1b77]*/ |