Commit Graph

6083 Commits

Author SHA1 Message Date
Victor Stinner 7399a05965 Issue #29306: Fix usage of Py_EnterRecursiveCall()
* *PyCFunction_*Call*() functions now call Py_EnterRecursiveCall().
* PyObject_Call() now calls directly _PyFunction_FastCallDict() and
  PyCFunction_Call() to avoid calling Py_EnterRecursiveCall() twice per
  function call
2017-02-08 12:06:00 +01:00
Serhiy Storchaka 68a001dd59 Issue #29460: _PyArg_NoKeywords(), _PyArg_NoStackKeywords() and
_PyArg_NoPositional() now are macros.
2017-02-06 10:41:46 +02:00
Raymond Hettinger 5cd87a8d61 Reduce load factor (from 66% to 60%) to improve effectiveness of linear probing.
Decreased density gives better collision statistics (average of 2.5 probes in a
full table versus 3.0 previously) and fewer occurences of starting a second
possibly overlapping sequence of 10 linear probes.  Makes resizes a little more
frequent but each with less work (fewer insertions and fewer collisions).
2017-02-04 02:43:42 -08:00
Serhiy Storchaka 19d2597ed5 Issue #29311: Regenerate Argument Clinic. 2017-02-04 08:05:07 +02:00
INADA Naoki 5566bbb8d5 Issue #29263: LOAD_METHOD support for C methods
Calling builtin method is at most 10% faster.
2017-02-03 07:43:03 +09:00
Raymond Hettinger e1af6964b4 Remove unnecessary variables.
* so->used never gets changed during a resize
* so->filled only changes when dummies are present and being eliminated
2017-02-02 08:24:48 -08:00
Serhiy Storchaka 196a7bc1ea Issue #29421: Make int.to_bytes() and int.from_bytes() slightly faster
(10-20% for small integers).
2017-02-02 16:54:45 +02:00
Serhiy Storchaka 495e8808d7 Issue #20185: Converted the int class to Argument Clinic.
Based on patch by Vajrasky Kok.
2017-02-01 23:12:20 +02:00
INADA Naoki 35a96a25ee Issue #29383: reduce temporary interned unicode
add_methods(), add_members(), and add_getset() used PyDict_SetItemString()
to register descriptor to the type's dict.
So descr_new() and PyDict_SetItemString() creates interned unicode from same
C string.

This patch takes interned unicode from descriptor, and use PyDict_SetItem()
instead of PyDict_SetItemString().

python_startup_no_site:
  default: Median +- std dev: 12.7 ms +- 0.1 ms
  patched: Median +- std dev: 12.5 ms +- 0.1 ms
2017-01-28 16:35:44 +09:00
Victor Stinner bda5a2be37 Issue #29358: Add postcondition checks on types 2017-01-25 23:33:27 +01:00
Serhiy Storchaka 6e08baf12d Issue #27867: Function PySlice_GetIndicesEx() is deprecated and replaced with
a macro if Py_LIMITED_API is not set or set to the value between 0x03050400
and 0x03060000 (not including) or 0x03060100 or higher.  Added functions
PySlice_Unpack() and PySlice_AdjustIndices().
2017-01-25 13:27:44 +02:00
Serhiy Storchaka 512c57cb72 Issue #27867: Function PySlice_GetIndicesEx() is replaced with a macro if
Py_LIMITED_API is not set or set to the value between 0x03050400
and 0x03060000 (not including) or 0x03060100 or higher.
2017-01-25 13:25:52 +02:00
Serhiy Storchaka b2a5be0763 Issue #27867: Function PySlice_GetIndicesEx() is replaced with a macro if
Py_LIMITED_API is not set or set to the value between 0x03050400
and 0x03060000 (not including) or 0x03060100 or higher.
2017-01-25 13:23:05 +02:00
Serhiy Storchaka 78d9e58f20 Issues #29311, #29289: Fixed and improved docstrings for dict and OrderedDict
methods.
2017-01-25 00:30:04 +02:00
Serhiy Storchaka 067cbd02bf Issue #29337: Fixed possible BytesWarning when compare the code objects.
Warnings could be emitted at compile time.
2017-01-24 20:54:07 +02:00
Serhiy Storchaka 4102d25b7e Issue #29337: Fixed possible BytesWarning when compare the code objects.
Warnings could be emitted at compile time.
2017-01-24 20:52:43 +02:00
Serhiy Storchaka 713640c4c9 Issue #29337: Fixed possible BytesWarning when compare the code objects.
Warnings could be emitted at compile time.
2017-01-24 20:49:26 +02:00
Victor Stinner c3858bd7c6 Issue #29360: _PyStack_AsDict() doesn't check kwnames
Remove two assertions which can fail on legit code. Keyword arguments are
checked later with better tests and raise a regular (TypeError) exception.
2017-01-24 15:05:30 +01:00
Martin Panter 91a8866dc1 Fix grammar in doc string, RST markup 2017-01-24 00:30:06 +00:00
Serhiy Storchaka d1302c0154 Issue #28999: Use Py_RETURN_NONE, Py_RETURN_TRUE and Py_RETURN_FALSE wherever
possible but Coccinelle couldn't find opportunity.
2017-01-23 10:23:58 +02:00
Serhiy Storchaka 228b12edcc Issue #28999: Use Py_RETURN_NONE, Py_RETURN_TRUE and Py_RETURN_FALSE wherever
possible.  Patch is writen with Coccinelle.
2017-01-23 09:47:21 +02:00
Serhiy Storchaka 2a404b63d4 Issue #28769: The result of PyUnicode_AsUTF8AndSize() and PyUnicode_AsUTF8()
is now of type "const char *" rather of "char *".
2017-01-22 23:07:07 +02:00
Serhiy Storchaka 7cf8bebb07 Issue #29331: Simplified argument parsing in sorted() and list.sort(). 2017-01-21 23:05:00 +02:00
Serhiy Storchaka a70eaf21e3 Issue #29289: Argument Clinic generates reasonable name for the parameter "default". 2017-01-19 19:38:13 +02:00
Serhiy Storchaka 48088ee9ba Issue #29311: Argument Clinic generates reasonable name for the parameter "default". 2017-01-19 19:00:30 +02:00
Serhiy Storchaka 41baebd8b9 Issue #20186: Converted builtins enumerate() and reversed() to Argument Clinic.
Patch by Tal Einat.
2017-01-19 18:48:17 +02:00
Victor Stinner 91f0d4aa2f Add a note explaining why dict_update() doesn't use METH_FASTCALL
Issue #29312.
2017-01-19 12:45:06 +01:00
Victor Stinner 7dc6a5f50a dict.get() and dict.setdefault() now use AC
Issue #29311: dict.get() and dict.setdefault() methods now use Argument Clinic
to parse arguments. Their calling convention changes from METH_VARARGS to
METH_FASTCALL which avoids the creation of a temporary tuple.

The signature of docstrings is also enhanced. For example,
    get(...)
becomes:
    get(self, key, default=None, /)
2017-01-19 12:37:13 +01:00
Victor Stinner 06d34393c2 _PyStack_AsDict() now checks kwnames != NULL
Issue #29259.
2017-01-18 18:06:32 +01:00
Victor Stinner 0a2e46835d Cleanup _PyMethodDef_RawFastCallDict()
Issue #29259: use a different case for METH_VARARGS and
METH_VARARGS|METH_KEYWORDS to avoid testing again flags to decide if keywords
should be checked or not.
2017-01-18 14:16:57 +01:00
Victor Stinner a8cb515a29 Rephrase !PyErr_Occurred() comment: may=>can
Issue #29259.
2017-01-18 14:12:51 +01:00
Victor Stinner 98ccba8344 _PyObject_FastCallKeywords() now checks !PyErr_Occurred()
Issue #29259. All other functions calling functions start with the similar
assertion.
2017-01-18 14:06:38 +01:00
Victor Stinner c89ef828cf PyCFunction_Call() now calls _PyCFunction_FastCallDict()
Issue #29259. We had 3 versions of similar code:

* PyCFunction_Call()
* _PyCFunction_FastCallDict()
* _PyCFunction_FastCallKeywords()

PyCFunction_Call() now calls _PyCFunction_FastCallDict() to factorize the code.
2017-01-18 14:04:37 +01:00
Victor Stinner 250e4b0063 Fix _PyMethodDef_RawFastCallDict() argument parsing
Issue #29259:

* Move also the !PyErr_Occurred() assertion to the top, similar to
  other functions.
* Fix also comment/error messages: the function was renamed to
  _PyMethodDef_RawFastCallDict()
2017-01-18 14:01:12 +01:00
Victor Stinner 2a1b676d1f _PyObject_FastCallKeywords() now checks the result
Issue ##27830, Issue #29259.
2017-01-18 11:27:22 +01:00
Victor Stinner c52572319c Optimize methoddescr_call(): avoid temporary PyCFunction
Issue #29259, #29263. methoddescr_call() creates a PyCFunction object, call it
and the destroy it. Add a new _PyMethodDef_RawFastCallDict() method to avoid
the temporary PyCFunction object.
2017-01-18 10:38:09 +01:00
Victor Stinner 35ecebe165 Remove unused func parameter of _PyStack_UnpackDict()
Issue #29259.
2017-01-18 10:31:46 +01:00
Victor Stinner b05cbac052 Convert some OrderedDict methods to Argument Clinic
Issue #29289. Convert methods:

* fromkeys() class method
* setdefault()
* popitem()
* move_to_end()
2017-01-17 03:46:13 +01:00
Victor Stinner 0c4a828cad Run Argument Clinic: METH_VARARGS=>METH_FASTCALL
Issue #29286. Run Argument Clinic to get the new faster METH_FASTCALL calling
convention for functions using "boring" positional arguments.

Manually fix _elementtree: _elementtree_XMLParser_doctype() must remain
consistent with the clinic code.
2017-01-17 02:21:47 +01:00
Victor Stinner 259f0e4437 Run Argument Clinic: METH_VARARGS=>METH_FASTCALL
Issue #29286. Run Argument Clinic to get the new faster METH_FASTCALL calling
convention for functions using only positional arguments.
2017-01-17 01:35:17 +01:00
Victor Stinner 998c20962c _PyStack_UnpackDict() now returns -1 on error
Issue #29286. Change _PyStack_UnpackDict() prototype to be able to notify of
failure when args is NULL.
2017-01-17 01:57:29 +01:00
Victor Stinner 3e1fad6913 Rename _PyArg_ParseStack to _PyArg_ParseStackAndKeywords
Issue #29286.
2017-01-17 01:29:01 +01:00
Victor Stinner d526cfe546 type_prepare() now uses fast call (METH_FASTCALL) 2017-01-16 23:52:00 +01:00
Victor Stinner 69de71b255 Add _PyStack_AsTupleSlice() helper 2017-01-16 23:50:53 +01:00
Victor Stinner 7fc252adfb Optimize _PyCFunction_FastCallKeywords()
Issue #29259: Write fast path in _PyCFunction_FastCallKeywords() for
METH_FASTCALL, avoid the creation of a temporary dictionary for keyword
arguments.

Cleanup also _PyCFunction_FastCallDict():

* Don't dereference func before checking that it's not NULL
* Move code to raise the "no keyword argument" exception into a new
  no_keyword_error label.

Update python-gdb.py for the change.
2017-01-16 17:18:53 +01:00
INADA Naoki 15f94596b6 Issue #20180: forgot to update AC output. 2017-01-16 21:49:13 +09:00
INADA Naoki 3ae2056512 Issue #20180: convert unicode methods to AC. 2017-01-16 20:41:20 +09:00
Martin Panter 446a498a63 Merge doc fixes from 3.6 2017-01-14 09:56:00 +00:00
Martin Panter 4659ddc433 Merge doc fixes from 3.5 2017-01-14 09:54:57 +00:00
Martin Panter 536d70ed33 Fix grammar, typos and markup in documentation and code comments
* Indent versionchanged at method level, not class level
* Mark up ``--help`` to avoid generating an en dash
* Use forward slash in Unix command line with a dollar sign ($) prompt
2017-01-14 08:23:08 +00:00
Martin Panter 94b39ceb73 Issue #1621: Overflow should not be possible in listextend() 2017-01-14 06:30:37 +00:00
Serhiy Storchaka 617c7753ce Issue #28969: Fixed race condition in C implementation of functools.lru_cache.
KeyError could be raised when cached function with full cache was
simultaneously called from differen threads with the same uncached arguments.
2017-01-12 19:42:20 +02:00
Serhiy Storchaka 42e1ea9a10 Issue #28969: Fixed race condition in C implementation of functools.lru_cache.
KeyError could be raised when cached function with full cache was
simultaneously called from differen threads with the same uncached arguments.
2017-01-12 19:12:21 +02:00
Serhiy Storchaka 67796521dd Issue #28969: Fixed race condition in C implementation of functools.lru_cache.
KeyError could be raised when cached function with full cache was
simultaneously called from differen threads with the same uncached arguments.
2017-01-12 18:34:33 +02:00
Victor Stinner b915bc354e Disable _PyStack_AsTuple() inlining
Issue #29234: Inlining _PyStack_AsTuple() into callers increases their stack
consumption, Disable inlining to optimize the stack consumption.

Add _Py_NO_INLINE: use __attribute__((noinline)) of GCC and Clang.

It reduces the stack consumption, bytes per call, before => after:

test_python_call: 1040 => 976 (-64 B)
test_python_getitem: 976 => 912 (-64 B)
test_python_iterator: 1120 => 1056 (-64 B)

=> total: 3136 => 2944 (- 192 B)
2017-01-11 01:07:03 +01:00
Victor Stinner 434723f94c call_method() now uses _PyObject_FastCall()
Issue #29233: Replace the inefficient _PyObject_VaCallFunctionObjArgs() with
_PyObject_FastCall() in call_method() and call_maybe().

Only a few functions call call_method() and call it with a fixed number of
arguments. Avoid the complex and expensive _PyObject_VaCallFunctionObjArgs()
function, replace it with an array allocated on the stack with the exact number
of argumlents.

It reduces the stack consumption, bytes per call, before => after:

test_python_call: 1168 => 1152 (-16 B)
test_python_getitem: 1344 => 1008 (-336 B)
test_python_iterator: 1568 => 1232 (-336 B)

Remove the _PyObject_VaCallFunctionObjArgs() function which became useless.
Rename it to object_vacall() and make it private.
2017-01-11 00:07:40 +01:00
Xiang Zhang 7a4da324dc Issue #29145: Merge 3.6. 2017-01-10 10:56:38 +08:00
Xiang Zhang 95403d74d7 Issue #29145: Merge 3.5. 2017-01-10 10:54:19 +08:00
Xiang Zhang b0541f4cdf Issue #29145: Fix overflow checks in str.replace() and str.join().
Based on patch by Martin Panter.
2017-01-10 10:52:00 +08:00
INADA Naoki 7ed28a8914 Merge 3.6 2017-01-06 17:44:43 +09:00
INADA Naoki a634e23209 Issue #29159: Fix regression in bytes(x) when x.__index__() raises Exception. 2017-01-06 17:32:01 +09:00
Victor Stinner 6f7c0ae46d Issue #28839: Optimize function_call()
function_call() now simply calls _PyFunction_FastCallDict().

_PyFunction_FastCallDict() is more efficient: it contains fast paths for the
common case (optimized code object and no keyword argument).
2017-01-03 01:58:17 +01:00
Stefan Krah 089a062da4 Merge 3.6. 2016-12-30 12:24:59 +01:00
Stefan Krah a50006c977 Merge 3.5. 2016-12-30 12:24:23 +01:00
Stefan Krah 195319e6bb Issue #29111: Fix memoryview signature. 2016-12-30 12:23:35 +01:00
Serhiy Storchaka c9ad8b7a23 Issue #29073: bytearray formatting no longer truncates on first null byte. 2016-12-28 09:54:22 +02:00
Antoine Pitrou c06ae208eb Issue #28427: old keys should not remove new values from
WeakValueDictionary when collecting from another thread.
2016-12-27 14:34:54 +01:00
Antoine Pitrou d741ed492f Issue #28427: old keys should not remove new values from
WeakValueDictionary when collecting from another thread.
2016-12-27 14:23:43 +01:00
Antoine Pitrou e10ca3a0fe Issue #28427: old keys should not remove new values from
WeakValueDictionary when collecting from another thread.
2016-12-27 14:19:20 +01:00
INADA Naoki 5a625d0aa6 Issue #29049: Call _PyObject_GC_TRACK() lazily when calling Python function.
Calling function is up to 5% faster.
2016-12-24 20:19:08 +09:00
Xiang Zhang 62497d52d9 Issue #29044: Merge 3.6. 2016-12-22 15:31:55 +08:00
Xiang Zhang 437a5d2c25 Issue #29044: Merge 3.5. 2016-12-22 15:31:22 +08:00
Xiang Zhang ea1cf87030 Issue #29044: Fix a use-after-free in string '%c' formatter. 2016-12-22 15:30:47 +08:00
Xiang Zhang b211068f5c Issue #28822: Adjust indices handling of PyUnicode_FindChar(). 2016-12-20 22:52:33 +08:00
INADA Naoki 6165d55f13 Issue #28147: Fix a memory leak in split-table dictionaries
setattr() must not convert combined table into split table.
2016-12-20 09:54:24 +09:00
Serhiy Storchaka dd1da7f74a Issue #28927: bytes.fromhex() and bytearray.fromhex() now ignore all ASCII
whitespace, not only spaces.  Patch by Robert Xiao.
2016-12-19 18:51:37 +02:00
Serhiy Storchaka 9d16b616d5 Issue #29000: Fixed bytes formatting of octals with zero padding in alternate
form.
2016-12-17 22:15:10 +02:00
Serhiy Storchaka 025f8953f1 Issue #29000: Fixed bytes formatting of octals with zero padding in alternate
form.
2016-12-17 22:13:05 +02:00
Serhiy Storchaka b1a1619bf0 Issue #29000: Fixed bytes formatting of octals with zero padding in alternate
form.
2016-12-17 21:48:03 +02:00
Serhiy Storchaka 5bb8b9134b Issue #18896: Python function can now have more than 255 parameters.
collections.namedtuple() now supports tuples with more than 255 elements.
2016-12-16 19:19:02 +02:00
Serhiy Storchaka 5ab81d787f Issue #28959: Added private macro PyDict_GET_SIZE for retrieving the size of dict. 2016-12-16 16:18:57 +02:00
Xavier de Gaye 31eaf49ed9 Merge 3.6. 2016-12-15 21:01:52 +01:00
Xavier de Gaye 76febd0792 Issue #26919: On Android, operating system data is now always encoded/decoded
to/from UTF-8, instead of the locale encoding to avoid inconsistencies with
os.fsencode() and os.fsdecode() which are already using UTF-8.
2016-12-15 20:59:58 +01:00
Victor Stinner 5cc70c9935 Merge 3.6 2016-12-15 17:23:24 +01:00
Victor Stinner 3d3f264849 Fix a memory leak in split-table dictionaries
Issue #28147: Fix a memory leak in split-table dictionaries: setattr() must not
convert combined table into split table.

Patch written by INADA Naoki.
2016-12-15 17:21:23 +01:00
Victor Stinner 944dbc6431 Use _PyDict_NewPresized() in _PyStack_AsDict()
Issue #27810.
2016-12-15 16:59:40 +01:00
Victor Stinner bc08ab4598 Add _PY_FASTCALL_SMALL_STACK constant
Issue #28870: Add a new _PY_FASTCALL_SMALL_STACK constant, size of "small
stacks" allocated on the C stack to pass positional arguments to
_PyObject_FastCall().

_PyObject_Call_Prepend() now uses a small stack of 5 arguments (40 bytes)
instead of 8 (64 bytes), since it is modified to use _PY_FASTCALL_SMALL_STACK.
2016-12-15 12:40:53 +01:00
Victor Stinner d1e35dd9ee Fix _PyObject_CallFunctionVa(), use the small stack
Issue #28915. Oops, I disabled the small stack to test both code paths. It's
now fixed.
2016-12-15 12:36:50 +01:00
Serhiy Storchaka bdfc5ff17e Merge from 3.6. 2016-12-14 19:56:53 +02:00
Serhiy Storchaka 386072ebe0 Merge from 3.6. 2016-12-14 19:54:38 +02:00
Serhiy Storchaka 49010ee323 Revert changeset 1f31bf3f76f5 (issue5322) except tests. 2016-12-14 19:52:17 +02:00
Yury Selivanov f2392133eb Issue #26110: Add LOAD_METHOD/CALL_METHOD opcodes.
Special thanks to INADA Naoki for pushing the patch through
the last mile, Serhiy Storchaka for reviewing the code, and to
Victor Stinner for suggesting the idea (originally implemented
in the PyPy project).
2016-12-13 19:03:51 -05:00
Martin Panter 9bcaa37e1c Issue #28820: Merge typo fixes from 3.6 2016-12-10 05:39:12 +00:00
Martin Panter 186b204997 Fix typos in comment and documentation 2016-12-10 05:32:55 +00:00
Victor Stinner 59a73276e9 Backed out changeset 99c34e47348b
The change broke test_gdb.
2016-12-09 18:51:13 +01:00
Victor Stinner 0ca246c5e7 Inline PyEval_EvalFrameEx() in callers
The PEP 523 modified PyEval_EvalFrameEx(): it's now an indirection to
interp->eval_frame().

Inline the call in performance critical code. Leave PyEval_EvalFrame()
unchanged, this function is only kept for backward compatibility.
2016-12-09 17:12:17 +01:00
Victor Stinner 14e6d09547 Remove useless variable initialization
Don't initialize variables which are not used before they are assigned.
2016-12-09 17:08:59 +01:00
Victor Stinner 5abaa2b139 Use PyObject_CallFunctionObjArgs()
Issue #28915: Replace PyObject_CallFunction() with
PyObject_CallFunctionObjArgs() when the format string was only made of "O"
formats, PyObject* arguments.

PyObject_CallFunctionObjArgs() avoids the creation of a temporary tuple and
doesn't have to parse a format string.
2016-12-09 16:22:32 +01:00
Victor Stinner 887b4307b6 Use _PyObject_FastCallVa() in type slots
Issue #28915: Replace Py_VaBuildValue()+PyObject_Call() with
_PyObject_FastCallVa() to avoid the creation of temporary tuple.
2016-12-09 00:41:46 +01:00
Victor Stinner 7f39c0ccfc Add _PyObject_VaCallFunctionObjArgs() private function
Issue #28915: Similar to _PyObject_CallFunctionObjArgs() but use va_list to
pass arguments.
2016-12-09 00:40:33 +01:00