summaryrefslogtreecommitdiffstats
path: root/Include
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2016-01-22 11:33:12 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2016-01-22 11:33:12 (GMT)
commitefb2413ce82acaa5dec43a8cb14aa7cdf2352fb1 (patch)
treeaa337dfb1c8b7c7911e150dd0ba94e762567fb48 /Include
parente3560a7dc9eeac324ff407588cb3f0b36ffe5c6e (diff)
downloadcpython-efb2413ce82acaa5dec43a8cb14aa7cdf2352fb1.zip
cpython-efb2413ce82acaa5dec43a8cb14aa7cdf2352fb1.tar.gz
cpython-efb2413ce82acaa5dec43a8cb14aa7cdf2352fb1.tar.bz2
code_richcompare() now uses the constants types
Issue #25843: When compiling code, don't merge constants if they are equal but have a different types. For example, "f1, f2 = lambda: 1, lambda: 1.0" is now correctly compiled to two different functions: f1() returns 1 (int) and f2() returns 1.0 (int), even if 1 and 1.0 are equal. Add a new _PyCode_ConstantKey() private function.
Diffstat (limited to 'Include')
-rw-r--r--Include/code.h11
1 files changed, 10 insertions, 1 deletions
diff --git a/Include/code.h b/Include/code.h
index 3ce2084..a300ead 100644
--- a/Include/code.h
+++ b/Include/code.h
@@ -108,12 +108,21 @@ typedef struct _addr_pair {
int ap_upper;
} PyAddrPair;
+#ifndef Py_LIMITED_API
/* Update *bounds to describe the first and one-past-the-last instructions in the
same line as lasti. Return the number of that line.
*/
-#ifndef Py_LIMITED_API
PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co,
int lasti, PyAddrPair *bounds);
+
+/* Create a comparable key used to compare constants taking in account the
+ * object type. It is used to make sure types are not coerced (e.g., float and
+ * complex) _and_ to distinguish 0.0 from -0.0 e.g. on IEEE platforms
+ *
+ * Return (type(obj), obj, ...): a tuple with variable size (at least 2 items)
+ * depending on the type and the value. The type is the first item to not
+ * compare bytes and str which can raise a BytesWarning exception. */
+PyAPI_FUNC(PyObject*) _PyCode_ConstantKey(PyObject *obj);
#endif
PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,