]> granicus.if.org Git - python/commitdiff
Issue #29058: All stable API extensions added after Python 3.2 are now
authorSerhiy Storchaka <storchaka@gmail.com>
Tue, 27 Dec 2016 13:04:59 +0000 (15:04 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Tue, 27 Dec 2016 13:04:59 +0000 (15:04 +0200)
available only when Py_LIMITED_API is set to the PY_VERSION_HEX value of
the minimum Python version supporting this API.

1  2 
Include/abstract.h
Include/moduleobject.h
Include/odictobject.h
Include/pyerrors.h
Include/unicodeobject.h
Misc/NEWS

index cfd240c2bf1d1c45e2cad6793d8e59e560827c27,7d137a22bfb7a8cab97f3a514b00f6fa7f899801..f7d7dcc1da3987dd3ecad80df66642ef557d5c91
@@@ -580,251 -710,342 +580,255 @@@ PyAPI_FUNC(PyObject *) PyObject_GetIter
      ((obj)->ob_type->tp_iternext != NULL && \
       (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented)
  
 -     PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *);
 -     /* Takes an iterator object and calls its tp_iternext slot,
 -    returning the next value.  If the iterator is exhausted,
 -    this returns NULL without setting an exception.
 -    NULL with an exception means an error occurred. */
 +/* Takes an iterator object and calls its tp_iternext slot,
 +   returning the next value.
  
 -/*  Number Protocol:*/
 +   If the iterator is exhausted, this returns NULL without setting an
 +   exception.
  
 -     PyAPI_FUNC(int) PyNumber_Check(PyObject *o);
 +   NULL with an exception means an error occurred. */
 +PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *);
  
 -       /*
 -     Returns 1 if the object, o, provides numeric protocols, and
 -     false otherwise.
  
 -     This function always succeeds.
 -       */
 +/* === Number Protocol ================================================== */
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2);
 +/* Returns 1 if the object 'o' provides numeric protocols, and 0 otherwise.
  
 -       /*
 -     Returns the result of adding o1 and o2, or null on failure.
 -     This is the equivalent of the Python expression: o1+o2.
 -       */
 +   This function always succeeds. */
 +PyAPI_FUNC(int) PyNumber_Check(PyObject *o);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2);
 +/* Returns the result of adding o1 and o2, or NULL on failure.
  
 -       /*
 -     Returns the result of subtracting o2 from o1, or null on
 -     failure.  This is the equivalent of the Python expression:
 -     o1-o2.
 -       */
 +   This is the equivalent of the Python expression: o1 + o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2);
 +/* Returns the result of subtracting o2 from o1, or NULL on failure.
  
 -       /*
 -     Returns the result of multiplying o1 and o2, or null on
 -     failure.  This is the equivalent of the Python expression:
 -     o1*o2.
 -       */
 +   This is the equivalent of the Python expression: o1 - o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2);
  
 -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
 -     PyAPI_FUNC(PyObject *) PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2);
 +/* Returns the result of multiplying o1 and o2, or NULL on failure.
 +
 +   This is the equivalent of the Python expression: o1 * o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2);
  
 -       /*
 -     This is the equivalent of the Python expression: o1 @ o2.
 -       */
++#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
 +/* This is the equivalent of the Python expression: o1 @ o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2);
+ #endif
  
 -     PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2);
 +/* Returns the result of dividing o1 by o2 giving an integral result,
 +   or NULL on failure.
  
 -       /*
 -     Returns the result of dividing o1 by o2 giving an integral result,
 -     or null on failure.
 -     This is the equivalent of the Python expression: o1//o2.
 -       */
 +   This is the equivalent of the Python expression: o1 // o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2);
 +/* Returns the result of dividing o1 by o2 giving a float result, or NULL on
 +   failure.
  
 -       /*
 -     Returns the result of dividing o1 by o2 giving a float result,
 -     or null on failure.
 -     This is the equivalent of the Python expression: o1/o2.
 -       */
 +   This is the equivalent of the Python expression: o1 / o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2);
 +/* Returns the remainder of dividing o1 by o2, or NULL on failure.
  
 -       /*
 -     Returns the remainder of dividing o1 by o2, or null on
 -     failure.  This is the equivalent of the Python expression:
 -     o1%o2.
 -       */
 +   This is the equivalent of the Python expression: o1 % o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2);
 +/* See the built-in function divmod.
  
 -       /*
 -     See the built-in function divmod.  Returns NULL on failure.
 -     This is the equivalent of the Python expression:
 -     divmod(o1,o2).
 -       */
 +   Returns NULL on failure.
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2,
 -                                           PyObject *o3);
 +   This is the equivalent of the Python expression: divmod(o1, o2). */
 +PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2);
  
 -       /*
 -     See the built-in function pow.  Returns NULL on failure.
 -     This is the equivalent of the Python expression:
 -     pow(o1,o2,o3), where o3 is optional.
 -       */
 +/* See the built-in function pow. Returns NULL on failure.
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o);
 +   This is the equivalent of the Python expression: pow(o1, o2, o3),
 +   where o3 is optional. */
 +PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2,
 +                                      PyObject *o3);
  
 -       /*
 -     Returns the negation of o on success, or null on failure.
 -     This is the equivalent of the Python expression: -o.
 -       */
 +/* Returns the negation of o on success, or NULL on failure.
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o);
 + This is the equivalent of the Python expression: -o. */
 +PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o);
  
 -       /*
 -     Returns the (what?) of o on success, or NULL on failure.
 -     This is the equivalent of the Python expression: +o.
 -       */
 +/* Returns the positive of o on success, or NULL on failure.
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o);
 +   This is the equivalent of the Python expression: +o. */
 +PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o);
  
 -       /*
 -     Returns the absolute value of o, or null on failure.  This is
 -     the equivalent of the Python expression: abs(o).
 -       */
 +/* Returns the absolute value of 'o', or NULL on failure.
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o);
 +   This is the equivalent of the Python expression: abs(o). */
 +PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o);
  
 -       /*
 -     Returns the bitwise negation of o on success, or NULL on
 -     failure.  This is the equivalent of the Python expression:
 -     ~o.
 -       */
 +/* Returns the bitwise negation of 'o' on success, or NULL on failure.
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2);
 +   This is the equivalent of the Python expression: ~o. */
 +PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o);
  
 -       /*
 -     Returns the result of left shifting o1 by o2 on success, or
 -     NULL on failure.  This is the equivalent of the Python
 -     expression: o1 << o2.
 -       */
 +/* Returns the result of left shifting o1 by o2 on success, or NULL on failure.
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2);
 +   This is the equivalent of the Python expression: o1 << o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2);
  
 -       /*
 -     Returns the result of right shifting o1 by o2 on success, or
 -     NULL on failure.  This is the equivalent of the Python
 -     expression: o1 >> o2.
 -       */
 +/* Returns the result of right shifting o1 by o2 on success, or NULL on
 +   failure.
  
 -     PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2);
 +   This is the equivalent of the Python expression: o1 >> o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2);
  
 -       /*
 -     Returns the result of bitwise and of o1 and o2 on success, or
 -     NULL on failure. This is the equivalent of the Python
 -     expression: o1&o2.
 +/* Returns the result of bitwise and of o1 and o2 on success, or NULL on
 +   failure.
  
 -       */
 +   This is the equivalent of the Python expression: o1 & o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2);
 +/* Returns the bitwise exclusive or of o1 by o2 on success, or NULL on failure.
  
 -       /*
 -     Returns the bitwise exclusive or of o1 by o2 on success, or
 -     NULL on failure.  This is the equivalent of the Python
 -     expression: o1^o2.
 -       */
 +   This is the equivalent of the Python expression: o1 ^ o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2);
 +/* Returns the result of bitwise or on o1 and o2 on success, or NULL on
 +   failure.
  
 -       /*
 -     Returns the result of bitwise or on o1 and o2 on success, or
 -     NULL on failure.  This is the equivalent of the Python
 -     expression: o1|o2.
 -       */
 +   This is the equivalent of the Python expression: o1 | o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2);
  
 -#define PyIndex_Check(obj) \
 -   ((obj)->ob_type->tp_as_number != NULL && \
 -    (obj)->ob_type->tp_as_number->nb_index != NULL)
 +#define PyIndex_Check(obj)                              \
 +    ((obj)->ob_type->tp_as_number != NULL &&            \
 +     (obj)->ob_type->tp_as_number->nb_index != NULL)
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o);
 +/* Returns the object 'o' converted to a Python int, or NULL with an exception
 +   raised on failure. */
 +PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o);
  
 -       /*
 -     Returns the object converted to a Python int
 -     or NULL with an error raised on failure.
 -       */
 +/* Returns the object 'o' converted to Py_ssize_t by going through
 +   PyNumber_Index() first.
  
 -     PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc);
 +   If an overflow error occurs while converting the int to Py_ssize_t, then the
 +   second argument 'exc' is the error-type to return.  If it is NULL, then the
 +   overflow error is cleared and the value is clipped. */
 +PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc);
  
 -       /*
 -    Returns the object converted to Py_ssize_t by going through
 -    PyNumber_Index first.  If an overflow error occurs while
 -    converting the int to Py_ssize_t, then the second argument
 -    is the error-type to return.  If it is NULL, then the overflow error
 -    is cleared and the value is clipped.
 -       */
 +/* Returns the object 'o' converted to an integer object on success, or NULL
 +   on failure.
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o);
 +   This is the equivalent of the Python expression: int(o). */
 +PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o);
  
 -       /*
 -     Returns the o converted to an integer object on success, or
 -     NULL on failure.  This is the equivalent of the Python
 -     expression: int(o).
 -       */
 +/* Returns the object 'o' converted to a float object on success, or NULL
 +  on failure.
  
 -     PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o);
 +  This is the equivalent of the Python expression: float(o). */
 +PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o);
  
 -       /*
 -     Returns the o converted to a float object on success, or NULL
 -     on failure.  This is the equivalent of the Python expression:
 -     float(o).
 -       */
  
 -/*  In-place variants of (some of) the above number protocol functions */
 +/* --- In-place variants of (some of) the above number protocol functions -- */
  
 -     PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
 +/* Returns the result of adding o2 to o1, possibly in-place, or NULL
 +   on failure.
  
 -       /*
 -     Returns the result of adding o2 to o1, possibly in-place, or null
 -     on failure.  This is the equivalent of the Python expression:
 -     o1 += o2.
 -       */
 +   This is the equivalent of the Python expression: o1 += o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
 +/* Returns the result of subtracting o2 from o1, possibly in-place or
 +   NULL on failure.
  
 -       /*
 -     Returns the result of subtracting o2 from o1, possibly in-place or
 -     null on failure.  This is the equivalent of the Python expression:
 -     o1 -= o2.
 -       */
 +   This is the equivalent of the Python expression: o1 -= o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
 +/* Returns the result of multiplying o1 by o2, possibly in-place, or NULL on
 +   failure.
  
 -       /*
 -     Returns the result of multiplying o1 by o2, possibly in-place, or
 -     null on failure.  This is the equivalent of the Python expression:
 -     o1 *= o2.
 -       */
 +   This is the equivalent of the Python expression: o1 *= o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2);
 -
 -       /*
 -     This is the equivalent of the Python expression: o1 @= o2.
 -       */
+ #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
 +/* This is the equivalent of the Python expression: o1 @= o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2);
+ #endif
  
 -     PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1,
 -                                                        PyObject *o2);
 +/* Returns the result of dividing o1 by o2 giving an integral result, possibly
 +   in-place, or NULL on failure.
  
 -       /*
 -     Returns the result of dividing o1 by o2 giving an integral result,
 -     possibly in-place, or null on failure.
 -     This is the equivalent of the Python expression:
 -     o1 /= o2.
 -       */
 +   This is the equivalent of the Python expression: o1 /= o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1,
 +                                                   PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1,
 -                                                       PyObject *o2);
 +/* Returns the result of dividing o1 by o2 giving a float result, possibly
 +   in-place, or null on failure.
  
 -       /*
 -     Returns the result of dividing o1 by o2 giving a float result,
 -     possibly in-place, or null on failure.
 -     This is the equivalent of the Python expression:
 -     o1 /= o2.
 -       */
 +   This is the equivalent of the Python expression: o1 /= o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1,
 +                                                  PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
 +/* Returns the remainder of dividing o1 by o2, possibly in-place, or NULL on
 +   failure.
  
 -       /*
 -     Returns the remainder of dividing o1 by o2, possibly in-place, or
 -     null on failure.  This is the equivalent of the Python expression:
 -     o1 %= o2.
 -       */
 +   This is the equivalent of the Python expression: o1 %= o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
 -                                                  PyObject *o3);
 +/* Returns the result of raising o1 to the power of o2, possibly in-place,
 +   or NULL on failure.
  
 -       /*
 -     Returns the result of raising o1 to the power of o2, possibly
 -     in-place, or null on failure.  This is the equivalent of the Python
 -     expression: o1 **= o2, or pow(o1, o2, o3) if o3 is present.
 -       */
 +   This is the equivalent of the Python expression: o1 **= o2,
 +   or o1 = pow(o1, o2, o3) if o3 is present. */
 +PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
 +                                             PyObject *o3);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
 +/* Returns the result of left shifting o1 by o2, possibly in-place, or NULL
 +   on failure.
  
 -       /*
 -     Returns the result of left shifting o1 by o2, possibly in-place, or
 -     null on failure.  This is the equivalent of the Python expression:
 -     o1 <<= o2.
 -       */
 +   This is the equivalent of the Python expression: o1 <<= o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
 +/* Returns the result of right shifting o1 by o2, possibly in-place or NULL
 +   on failure.
  
 -       /*
 -     Returns the result of right shifting o1 by o2, possibly in-place or
 -     null on failure.  This is the equivalent of the Python expression:
 -     o1 >>= o2.
 -       */
 +   This is the equivalent of the Python expression: o1 >>= o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
 +/* Returns the result of bitwise and of o1 and o2, possibly in-place, or NULL
 +   on failure.
  
 -       /*
 -     Returns the result of bitwise and of o1 and o2, possibly in-place,
 -     or null on failure. This is the equivalent of the Python
 -     expression: o1 &= o2.
 -       */
 +   This is the equivalent of the Python expression: o1 &= o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
 +/* Returns the bitwise exclusive or of o1 by o2, possibly in-place, or NULL
 +   on failure.
  
 -       /*
 -     Returns the bitwise exclusive or of o1 by o2, possibly in-place, or
 -     null on failure.  This is the equivalent of the Python expression:
 -     o1 ^= o2.
 -       */
 +   This is the equivalent of the Python expression: o1 ^= o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
 +/* Returns the result of bitwise or of o1 and o2, possibly in-place,
 +   or NULL on failure.
  
 -       /*
 -     Returns the result of bitwise or of o1 and o2, possibly in-place,
 -     or null on failure.  This is the equivalent of the Python
 -     expression: o1 |= o2.
 -       */
 +   This is the equivalent of the Python expression: o1 |= o2. */
 +PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
  
 -     PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base);
 +/* Returns the integer n converted to a string with a base, with a base
 +   marker of 0b, 0o or 0x prefixed if applicable.
  
 -       /*
 -     Returns the integer n converted to a string with a base, with a base
 -     marker of 0b, 0o or 0x prefixed if applicable.
 -     If n is not an int object, it is converted with PyNumber_Index first.
 -       */
 +   If n is not an int object, it is converted with PyNumber_Index first. */
 +PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base);
  
  
 -/*  Sequence protocol:*/
 +/* === Sequence protocol ================================================ */
  
 -     PyAPI_FUNC(int) PySequence_Check(PyObject *o);
 +/* Return 1 if the object provides sequence protocol, and zero
 +   otherwise.
  
 -       /*
 -     Return 1 if the object provides sequence protocol, and zero
 -     otherwise.
 +   This function always succeeds. */
 +PyAPI_FUNC(int) PySequence_Check(PyObject *o);
  
 -     This function always succeeds.
 -       */
 +/* Return the size of sequence object o, or -1 on failure. */
 +PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);
  
 -     PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);
 -
 -       /*
 -     Return the size of sequence object o, or -1 on failure.
 -       */
 -
 -       /* For DLL compatibility */
 +/* For DLL compatibility */
  #undef PySequence_Length
 -     PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
 +PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
  #define PySequence_Length PySequence_Size
  
  
index 43b68481c35e9cab4def9d0dee953288da98e9e1,b6e49333d2d9f146e02918aaef31df547adb327d..1d8fe46dea03a1713e6a5424d331004f82543e79
@@@ -19,9 -21,11 +21,11 @@@ PyAPI_FUNC(PyObject *) PyModule_New
      const char *name            /* UTF-8 encoded string */
      );
  PyAPI_FUNC(PyObject *) PyModule_GetDict(PyObject *);
+ #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
  PyAPI_FUNC(PyObject *) PyModule_GetNameObject(PyObject *);
+ #endif
  PyAPI_FUNC(const char *) PyModule_GetName(PyObject *);
 -PyAPI_FUNC(const char *) PyModule_GetFilename(PyObject *);
 +PyAPI_FUNC(const char *) PyModule_GetFilename(PyObject *) Py_DEPRECATED(3.2);
  PyAPI_FUNC(PyObject *) PyModule_GetFilenameObject(PyObject *);
  #ifndef Py_LIMITED_API
  PyAPI_FUNC(void) _PyModule_Clear(PyObject *);
index 9410a0d845b91f2509ba3ebf4a847024f8b0ef0d,381de58ba4c73e38f038a8ee434870b8790ca54c..ff6ad64b8b4e826dc408451b7787550d37b48007
@@@ -17,12 -17,13 +17,13 @@@ PyAPI_DATA(PyTypeObject) PyODictKeys_Ty
  PyAPI_DATA(PyTypeObject) PyODictItems_Type;
  PyAPI_DATA(PyTypeObject) PyODictValues_Type;
  
- #endif /* Py_LIMITED_API */
  #define PyODict_Check(op) PyObject_TypeCheck(op, &PyODict_Type)
  #define PyODict_CheckExact(op) (Py_TYPE(op) == &PyODict_Type)
 -#define PyODict_SIZE(op) ((PyDictObject *)op)->ma_used
 +#define PyODict_SIZE(op) PyDict_GET_SIZE((op))
- #define PyODict_HasKey(od, key) (PyMapping_HasKey(PyObject *)od, key)
+ #endif /* Py_LIMITED_API */
+ #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
  
  PyAPI_FUNC(PyObject *) PyODict_New(void);
  PyAPI_FUNC(int) PyODict_SetItem(PyObject *od, PyObject *key, PyObject *item);
Simple merge
index 99f2d433fdf96c0b21fb1acb2cc6f68f67593865,587cf03e3697eb04186f847fb3c9f18b705f413c..87cd96d90338e136cd070b8c9954a3e778d2d3df
@@@ -772,9 -772,10 +776,10 @@@ PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUn
  PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicodeAndSize(
      PyObject *unicode,          /* Unicode object */
      Py_ssize_t *size            /* location where to save the length */
 -    );
 +    )  /* Py_DEPRECATED(3.3) */;
  #endif
  
+ #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
  /* Get the length of the Unicode object. */
  
  PyAPI_FUNC(Py_ssize_t) PyUnicode_GetLength(
  
  PyAPI_FUNC(Py_ssize_t) PyUnicode_GetSize(
      PyObject *unicode           /* Unicode object */
 -    );
 +    ) Py_DEPRECATED(3.3);
  
+ #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
  /* Read a character from the string. */
  
  PyAPI_FUNC(Py_UCS4) PyUnicode_ReadChar(
@@@ -1707,9 -1715,10 +1719,10 @@@ PyAPI_FUNC(PyObject*) PyUnicode_EncodeM
      const Py_UNICODE *data,     /* Unicode char buffer */
      Py_ssize_t length,          /* number of Py_UNICODE chars to encode */
      const char *errors          /* error handling */
 -    );
 +    ) Py_DEPRECATED(3.3);
  #endif
  
+ #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
  PyAPI_FUNC(PyObject*) PyUnicode_EncodeCodePage(
      int code_page,              /* code page number */
      PyObject *unicode,          /* Unicode object */
diff --cc Misc/NEWS
index f731659a97385268b48007f8878ee2a359344fec,f3d8e419c37ca9a5dc00674eeb0dada4f49d625d..a80a3db8d4701a7bba89e427317a1c6d23d215ae
+++ b/Misc/NEWS
  Python News
  +++++++++++
  
 +What's New in Python 3.7.0 alpha 1?
 +===================================
 +
 +*Release date: XXXX-XX-XX*
 +
 +Core and Builtins
 +-----------------
 +
 +- Issue #29049: Call _PyObject_GC_TRACK() lazily when calling Python function.
 +  Calling function is up to 5% faster.
 +
 +- Issue #28927: bytes.fromhex() and bytearray.fromhex() now ignore all ASCII
 +  whitespace, not only spaces.  Patch by Robert Xiao.
 +
 +- Issue #28932: Do not include <sys/random.h> if it does not exist.
 +
 +- Issue #25677: Correct the positioning of the syntax error caret for
 +  indented blocks.  Based on patch by Michael Layzell.
 +
 +- Issue #29000: Fixed bytes formatting of octals with zero padding in alternate
 +  form.
 +
 +- Issue #18896: Python function can now have more than 255 parameters.
 +  collections.namedtuple() now supports tuples with more than 255 elements.
 +
 +- Issue #28596: The preferred encoding is UTF-8 on Android. Patch written by
 +  Chi Hsuan Yen.
 +
 +- 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.
 +
 +- Issue #28991:  functools.lru_cache() was susceptible to an obscure reentrancy
 +  bug triggerable by a monkey-patched len() function.
 +
 +- Issue #28147: Fix a memory leak in split-table dictionaries: setattr()
 +  must not convert combined table into split table. Patch written by INADA
 +  Naoki.
 +
 +- Issue #28739: f-string expressions are no longer accepted as docstrings and
 +  by ast.literal_eval() even if they do not include expressions.
 +
 +- Issue #28512: Fixed setting the offset attribute of SyntaxError by
 +  PyErr_SyntaxLocationEx() and PyErr_SyntaxLocationObject().
 +
 +- Issue #28918: Fix the cross compilation of xxlimited when Python has been
 +  built with Py_DEBUG defined.
 +
 +- Issue #23722: Rather than silently producing a class that doesn't support
 +  zero-argument ``super()`` in methods, failing to pass the new
 +  ``__classcell__`` namespace entry up to ``type.__new__`` now results in a
 +  ``DeprecationWarning`` and a class that supports zero-argument ``super()``.
 +
 +- Issue #28797: Modifying the class __dict__ inside the __set_name__ method of
 +  a descriptor that is used inside that class no longer prevents calling the
 +  __set_name__ method of other descriptors.
 +
 +- Issue #28799: Remove the ``PyEval_GetCallStats()`` function and deprecate
 +  the untested and undocumented ``sys.callstats()`` function. Remove the
 +  ``CALL_PROFILE`` special build: use the :func:`sys.setprofile` function,
 +  :mod:`cProfile` or :mod:`profile` to profile function calls.
 +
 +- Issue #12844: More than 255 arguments can now be passed to a function.
 +
 +- Issue #28782: Fix a bug in the implementation ``yield from`` when checking
 +  if the next instruction is YIELD_FROM. Regression introduced by WORDCODE
 +  (issue #26647).
 +
 +- Issue #28774: Fix error position of the unicode error in ASCII and Latin1
 +  encoders when a string returned by the error handler contains multiple
 +  non-encodable characters (non-ASCII for the ASCII codec, characters out
 +  of the U+0000-U+00FF range for Latin1).
 +
 +- Issue #28731: Optimize _PyDict_NewPresized() to create correct size dict.
 +  Improve speed of dict literal with constant keys up to 30%.
 +
 +- Issue #28532: Show sys.version when -V option is supplied twice.
 +
 +- Issue #27100: The with-statement now checks for __enter__ before it
 +  checks for __exit__.  This gives less confusing error messages when
 +  both methods are missing. Patch by Jonathan Ellington.
 +
 +- Issue #28746: Fix the set_inheritable() file descriptor method on platforms
 +  that do not have the ioctl FIOCLEX and FIONCLEX commands.
 +
 +- Issue #26920: Fix not getting the locale's charset upon initializing the
 +  interpreter, on platforms that do not have langinfo.
 +
 +- Issue #28648: Fixed crash in Py_DecodeLocale() in debug build on Mac OS X
 +  when decode astral characters.  Patch by Xiang Zhang.
 +
 +- Issue #28665: Improve speed of the STORE_DEREF opcode by 40%.
 +
 +- Issue #19398: Extra slash no longer added to sys.path components in case of
 +  empty compile-time PYTHONPATH components.
 +
 +- Issue #28621: Sped up converting int to float by reusing faster bits counting
 +  implementation.  Patch by Adrian Wielgosik.
 +
 +- Issue #28580: Optimize iterating split table values.
 +  Patch by Xiang Zhang.
 +
 +- Issue #28583: PyDict_SetDefault didn't combine split table when needed.
 +  Patch by Xiang Zhang.
 +
 +- Issue #28128: Deprecation warning for invalid str and byte escape
 +  sequences now prints better information about where the error
 +  occurs. Patch by Serhiy Storchaka and Eric Smith.
 +
 +- Issue #28509: dict.update() no longer allocate unnecessary large memory.
 +
 +- Issue #28426: Fixed potential crash in PyUnicode_AsDecodedObject() in debug
 +  build.
 +
 +- Issue #28517: Fixed of-by-one error in the peephole optimizer that caused
 +  keeping unreachable code.
 +
 +- Issue #28214: Improved exception reporting for problematic __set_name__
 +  attributes.
 +
 +- Issue #23782: Fixed possible memory leak in _PyTraceback_Add() and exception
 +  loss in PyTraceBack_Here().
 +
 +- Issue #28183: Optimize and cleanup dict iteration.
 +
 +- Issue #26081: Added C implementation of asyncio.Future.
 +  Original patch by Yury Selivanov.
 +
 +- Issue #28379: Added sanity checks and tests for PyUnicode_CopyCharacters().
 +  Patch by Xiang Zhang.
 +
 +- Issue #28376: The type of long range iterator is now registered as Iterator.
 +  Patch by Oren Milman.
 +
 +- Issue #28376: Creating instances of range_iterator by calling range_iterator
 +  type now is disallowed.  Calling iter() on range instance is the only way.
 +  Patch by Oren Milman.
 +
 +- Issue #26906: Resolving special methods of uninitialized type now causes
 +  implicit initialization of the type instead of a fail.
 +
 +- Issue #18287: PyType_Ready() now checks that tp_name is not NULL.
 +  Original patch by Niklas Koep.
 +
 +- Issue #24098: Fixed possible crash when AST is changed in process of
 +  compiling it.
 +
 +- Issue #28201: Dict reduces possibility of 2nd conflict in hash table when
 +  hashes have same lower bits.
 +
 +- Issue #28350: String constants with null character no longer interned.
 +
 +- Issue #26617: Fix crash when GC runs during weakref callbacks.
 +
 +- Issue #27942: String constants now interned recursively in tuples and frozensets.
 +
 +- Issue #28289: ImportError.__init__ now resets not specified attributes.
 +
 +- Issue #21578: Fixed misleading error message when ImportError called with
 +  invalid keyword args.
 +
 +- Issue #28203: Fix incorrect type in complex(1.0, {2:3}) error message.
 +  Patch by Soumya Sharma.
 +
 +- Issue #28086: Single var-positional argument of tuple subtype was passed
 +  unscathed to the C-defined function.  Now it is converted to exact tuple.
 +
 +- Issue #28214: Now __set_name__ is looked up on the class instead of the
 +  instance.
 +
 +- Issue #27955: Fallback on reading /dev/urandom device when the getrandom()
 +  syscall fails with EPERM, for example when blocked by SECCOMP.
 +
 +- Issue #28192: Don't import readline in isolated mode.
 +
 +- Issue #27441: Remove some redundant assignments to ob_size in longobject.c.
 +  Thanks Oren Milman.
 +
 +- Issue #27222: Clean up redundant code in long_rshift function. Thanks
 +  Oren Milman.
 +
 +- Upgrade internal unicode databases to Unicode version 9.0.0.
 +
 +- Issue #28131: Fix a regression in zipimport's compile_source().  zipimport
 +  should use the same optimization level as the interpreter.
 +
 +- Issue #28126: Replace Py_MEMCPY with memcpy(). Visual Studio can properly
 +  optimize memcpy().
 +
 +- Issue #28120: Fix dict.pop() for splitted dictionary when trying to remove a
 +  "pending key" (Not yet inserted in split-table). Patch by Xiang Zhang.
 +
 +- Issue #26182: Raise DeprecationWarning when async and await keywords are
 +  used as variable/attribute/class/function name.
 +
 +- Issue #26182: Fix a refleak in code that raises DeprecationWarning.
 +
 +- Issue #28721: Fix asynchronous generators aclose() and athrow() to
 +  handle StopAsyncIteration propagation properly.
 +
 +- Issue #26110: Speed-up method calls: add LOAD_METHOD and CALL_METHOD
 +  opcodes.
 +
 +Library
 +-------
 +
 +- Issue 28923: Remove editor artifacts from Tix.py.
 +
 +- Issue #28871: Fixed a crash when deallocate deep ElementTree.
 +
 +- Issue #19542: Fix bugs in WeakValueDictionary.setdefault() and
 +  WeakValueDictionary.pop() when a GC collection happens in another
 +  thread.
 +
 +- Issue #20191: Fixed a crash in resource.prlimit() when pass a sequence that
 +  doesn't own its elements as limits.
 +
 +- Issue #16255: subprocess.Popen uses /system/bin/sh on Android as the shell,
 +  instead of /bin/sh.
 +
 +- Issue #28779: multiprocessing.set_forkserver_preload() would crash the
 +  forkserver process if a preloaded module instantiated some
 +  multiprocessing objects such as locks.
 +
 +- Issue #26937: The chown() method of the tarfile.TarFile class does not fail
 +  now when the grp module cannot be imported, as for example on Android
 +  platforms.
 +
 +- Issue #28847: dbm.dumb now supports reading read-only files and no longer
 +  writes the index file when it is not changed.  A deprecation warning is now
 +  emitted if the index file is missed and recreated in the 'r' and 'w' modes
 +  (will be an error in future Python releases).
 +
 +- Issue #27030: Unknown escapes consisting of ``'\'`` and an ASCII letter in
 +  re.sub() replacement templates regular expressions now are errors.
 +
 +- Issue #28835: Fix a regression introduced in warnings.catch_warnings():
 +  call warnings.showwarning() if it was overriden inside the context manager.
 +
 +- Issue #27172: To assist with upgrades from 2.7, the previously documented
 +  deprecation of ``inspect.getfullargspec()`` has been reversed. This decision
 +  may be revisited again after the Python 2.7 branch is no longer officially
 +  supported.
 +
 +- Issue #28740: Add sys.getandroidapilevel(): return the build time API version
 +  of Android as an integer. Function only available on Android.
 +
 +- Issue #26273: Add new :data:`socket.TCP_CONGESTION` (Linux 2.6.13) and
 +  :data:`socket.TCP_USER_TIMEOUT` (Linux 2.6.37) constants. Patch written by
 +  Omar Sandoval.
 +
 +- Issue #28752: Restored the __reduce__() methods of datetime objects.
 +
 +- Issue #28727: Regular expression patterns, _sre.SRE_Pattern objects created
 +  by re.compile(), become comparable (only x==y and x!=y operators). This
 +  change should fix the issue #18383: don't duplicate warning filters when the
 +  warnings module is reloaded (thing usually only done in unit tests).
 +
 +- Issue #20572: Remove the subprocess.Popen.wait endtime parameter.  It was
 +  deprecated in 3.4 and undocumented prior to that.
 +
 +- Issue #25659: In ctypes, prevent a crash calling the from_buffer() and
 +  from_buffer_copy() methods on abstract classes like Array.
 +
 +- Issue #28548: In the "http.server" module, parse the protocol version if
 +  possible, to avoid using HTTP 0.9 in some error responses.
 +
 +- Issue #19717: Makes Path.resolve() succeed on paths that do not exist.
 +  Patch by Vajrasky Kok
 +
 +- Issue #28563: Fixed possible DoS and arbitrary code execution when handle
 +  plural form selections in the gettext module.  The expression parser now
 +  supports exact syntax supported by GNU gettext.
 +
 +- Issue #28387: Fixed possible crash in _io.TextIOWrapper deallocator when
 +  the garbage collector is invoked in other thread.  Based on patch by
 +  Sebastian Cufre.
 +
 +- Issue #27517: LZMA compressor and decompressor no longer raise exceptions if
 +  given empty data twice.  Patch by Benjamin Fogle.
 +
 +- Issue #28549: Fixed segfault in curses's addch() with ncurses6.
 +
 +- Issue #28449: tarfile.open() with mode "r" or "r:" now tries to open a tar
 +  file with compression before trying to open it without compression.  Otherwise
 +  it had 50% chance failed with ignore_zeros=True.
 +
 +- Issue #23262: The webbrowser module now supports Firefox 36+ and derived
 +  browsers.  Based on patch by Oleg Broytman.
 +
 +- Issue #27939: Fixed bugs in tkinter.ttk.LabeledScale and tkinter.Scale caused
 +  by representing the scale as float value internally in Tk.  tkinter.IntVar
 +  now works if float value is set to underlying Tk variable.
 +
 +- Issue #28255: calendar.TextCalendar.prweek() no longer prints a space after
 +  a weeks's calendar.  calendar.TextCalendar.pryear() no longer prints redundant
 +  newline after a year's calendar.  Based on patch by Xiang Zhang.
 +
 +- Issue #28255: calendar.TextCalendar.prmonth() no longer prints a space
 +  at the start of new line after printing a month's calendar.  Patch by
 +  Xiang Zhang.
 +
 +- Issue #20491: The textwrap.TextWrapper class now honors non-breaking spaces.
 +  Based on patch by Kaarle Ritvanen.
 +
 +- Issue #28353: os.fwalk() no longer fails on broken links.
 +
 +- Issue #28430: Fix iterator of C implemented asyncio.Future doesn't accept
 +  non-None value is passed to it.send(val).
 +
 +- Issue #27025: Generated names for Tkinter widgets now start by the "!" prefix
 +  for readability (was "`").
 +
 +- Issue #25464: Fixed HList.header_exists() in tkinter.tix module by addin
 +  a workaround to Tix library bug.
 +
 +- Issue #28488: shutil.make_archive() no longer adds entry "./" to ZIP archive.
 +
 +- Issue #25953: re.sub() now raises an error for invalid numerical group
 +  reference in replacement template even if the pattern is not found in
 +  the string.  Error message for invalid group reference now includes the
 +  group index and the position of the reference.
 +  Based on patch by SilentGhost.
 +
 +- Issue #28469: timeit now uses the sequence 1, 2, 5, 10, 20, 50,... instead
 +  of 1, 10, 100,... for autoranging.
 +
 +- Issue #28115: Command-line interface of the zipfile module now uses argparse.
 +  Added support of long options.
 +
 +- Issue #18219: Optimize csv.DictWriter for large number of columns.
 +  Patch by Mariatta Wijaya.
 +
 +- Issue #28448: Fix C implemented asyncio.Future didn't work on Windows.
 +
 +- Issue #23214: In the "io" module, the argument to BufferedReader and
 +  BytesIO's read1() methods is now optional and can be -1, matching the
 +  BufferedIOBase specification.
 +
 +- Issue #28480: Fix error building socket module when multithreading is
 +  disabled.
 +
 +- Issue #28240: timeit: remove ``-c/--clock`` and ``-t/--time`` command line
 +  options which were deprecated since Python 3.3.
 +
 +- Issue #28240: timeit now repeats the benchmarks 5 times instead of only 3
 +  to make benchmarks more reliable.
 +
 +- Issue #28240: timeit autorange now uses a single loop iteration if the
 +  benchmark takes less than 10 seconds, instead of 10 iterations.
 +  "python3 -m timeit -s 'import time' 'time.sleep(1)'" now takes 4 seconds
 +  instead of 40 seconds.
 +
 +- Distutils.sdist now looks for README and setup.py files with case
 +  sensitivity. This behavior matches that found in Setuptools 6.0 and
 +  later. See `setuptools 100
 +  <https://github.com/pypa/setuptools/issues/100>`_ for rationale.
 +
 +- Issue #24452: Make webbrowser support Chrome on Mac OS X. Patch by
 +  Ned Batchelder.
 +
 +- Issue #20766: Fix references leaked by pdb in the handling of SIGINT
 +  handlers.
 +
 +- Issue #27998: Fixed bytes path support in os.scandir() on Windows.
 +  Patch by Eryk Sun.
 +
 +- Issue #28317: The disassembler now decodes FORMAT_VALUE argument.
 +
 +- Issue #26293: Fixed writing ZIP files that starts not from the start of the
 +  file.  Offsets in ZIP file now are relative to the start of the archive in
 +  conforming to the specification.
 +
 +- Issue #28380: unittest.mock Mock autospec functions now properly support
 +  assert_called, assert_not_called, and assert_called_once.
 +
 +- Issue #28229: lzma module now supports pathlib.
 +
 +- Issue #28321: Fixed writing non-BMP characters with binary format in plistlib.
 +
 +- Issue #28225: bz2 module now supports pathlib.  Initial patch by Ethan Furman.
 +
 +- Issue #28227: gzip now supports pathlib.  Patch by Ethan Furman.
 +
 +- Issue #28332: Deprecated silent truncations in socket.htons and socket.ntohs.
 +  Original patch by Oren Milman.
 +
 +- Issue #27358: Optimized merging var-keyword arguments and improved error
 +  message when pass a non-mapping as a var-keyword argument.
 +
 +- Issue #28257: Improved error message when pass a non-iterable as
 +  a var-positional argument.  Added opcode BUILD_TUPLE_UNPACK_WITH_CALL.
 +
 +- Issue #28322: Fixed possible crashes when unpickle itertools objects from
 +  incorrect pickle data.  Based on patch by John Leitch.
 +
 +- Issue #28228: imghdr now supports pathlib.
 +
 +- Issue #28226: compileall now supports pathlib.
 +
 +- Issue #28314: Fix function declaration (C flags) for the getiterator() method
 +  of xml.etree.ElementTree.Element.
 +
 +- Issue #28148: Stop using localtime() and gmtime() in the time
 +  module.
 +
 +  Introduced platform independent _PyTime_localtime API that is
 +  similar to POSIX localtime_r, but available on all platforms.  Patch
 +  by Ed Schouten.
 +
 +- Issue #28253: Fixed calendar functions for extreme months: 0001-01
 +  and 9999-12.
 +
 +  Methods itermonthdays() and itermonthdays2() are reimplemented so
 +  that they don't call itermonthdates() which can cause datetime.date
 +  under/overflow.
 +
 +- Issue #28275: Fixed possible use after free in the decompress()
 +  methods of the LZMADecompressor and BZ2Decompressor classes.
 +  Original patch by John Leitch.
 +
 +- Issue #27897: Fixed possible crash in sqlite3.Connection.create_collation()
 +  if pass invalid string-like object as a name.  Patch by Xiang Zhang.
 +
 +- Issue #18844: random.choices() now has k as a keyword-only argument
 +  to improve the readability of common cases and come into line
 +  with the signature used in other languages.
 +
 +- Issue #18893: Fix invalid exception handling in Lib/ctypes/macholib/dyld.py.
 +  Patch by Madison May.
 +
 +- Issue #27611: Fixed support of default root window in the tkinter.tix module.
 +  Added the master parameter in the DisplayStyle constructor.
 +
 +- Issue #27348: In the traceback module, restore the formatting of exception
 +  messages like "Exception: None".  This fixes a regression introduced in
 +  3.5a2.
 +
 +- Issue #25651: Allow falsy values to be used for msg parameter of subTest().
 +
 +- Issue #27778: Fix a memory leak in os.getrandom() when the getrandom() is
 +  interrupted by a signal and a signal handler raises a Python exception.
 +
 +- Issue #28200: Fix memory leak on Windows in the os module (fix
 +  path_converter() function).
 +
 +- Issue #25400: RobotFileParser now correctly returns default values for
 +  crawl_delay and request_rate.  Initial patch by Peter Wirtz.
 +
 +- Issue #27932: Prevent memory leak in win32_ver().
 +
 +- Fix UnboundLocalError in socket._sendfile_use_sendfile.
 +
 +- Issue #28075: Check for ERROR_ACCESS_DENIED in Windows implementation of
 +  os.stat().  Patch by Eryk Sun.
 +
 +- Issue #22493: Warning message emitted by using inline flags in the middle of
 +  regular expression now contains a (truncated) regex pattern.
 +  Patch by Tim Graham.
 +
 +- Issue #25270: Prevent codecs.escape_encode() from raising SystemError when
 +  an empty bytestring is passed.
 +
 +- Issue #28181: Get antigravity over HTTPS. Patch by Kaartic Sivaraam.
 +
 +- Issue #25895: Enable WebSocket URL schemes in urllib.parse.urljoin.
 +  Patch by Gergely Imreh and Markus Holtermann.
 +
 +- Issue #28114: Fix a crash in parse_envlist() when env contains byte strings.
 +  Patch by Eryk Sun.
 +
 +- Issue #27599: Fixed buffer overrun in binascii.b2a_qp() and binascii.a2b_qp().
 +
 +- Issue #27906: Fix socket accept exhaustion during high TCP traffic.
 +  Patch by Kevin Conway.
 +
 +- Issue #28174: Handle when SO_REUSEPORT isn't properly supported.
 +  Patch by Seth Michael Larson.
 +
 +- Issue #26654: Inspect functools.partial in asyncio.Handle.__repr__.
 +  Patch by iceboy.
 +
 +- Issue #26909: Fix slow pipes IO in asyncio.
 +  Patch by INADA Naoki.
 +
 +- Issue #28176: Fix callbacks race in asyncio.SelectorLoop.sock_connect.
 +
 +- Issue #27759: Fix selectors incorrectly retain invalid file descriptors.
 +  Patch by Mark Williams.
 +
 +- Issue #28325: Remove vestigial MacOS 9 macurl2path module and its tests.
 +
 +- Issue #28368: Refuse monitoring processes if the child watcher has
 +  no loop attached.
 +  Patch by Vincent Michel.
 +
 +- Issue #28369: Raise RuntimeError when transport's FD is used with
 +  add_reader, add_writer, etc.
 +
 +- Issue #28370: Speedup asyncio.StreamReader.readexactly.
 +  Patch by Коренберг Марк.
 +
 +- Issue #28371: Deprecate passing asyncio.Handles to run_in_executor.
 +
 +- Issue #28372: Fix asyncio to support formatting of non-python coroutines.
 +
 +- Issue #28399: Remove UNIX socket from FS before binding.
 +  Patch by Коренберг Марк.
 +
 +- Issue #27972: Prohibit Tasks to await on themselves.
 +
 +- Issue #24142: Reading a corrupt config file left configparser in an
 +  invalid state.  Original patch by Florian Höch.
 +
 +Windows
 +-------
 +
 +- Issue #25778: winreg does not truncate string correctly (Patch by Eryk Sun)
 +
 +- Issue #28896: Deprecate WindowsRegistryFinder and disable it by default
 +
 +- Issue #28522: Fixes mishandled buffer reallocation in getpathp.c
 +
 +- Issue #28402: Adds signed catalog files for stdlib on Windows.
 +
 +- Issue #28333: Enables Unicode for ps1/ps2 and input() prompts. (Patch by
 +  Eryk Sun)
 +
 +- Issue #28251: Improvements to help manuals on Windows.
 +
 +- Issue #28110: launcher.msi has different product codes between 32-bit and
 +  64-bit
 +
 +- Issue #28161: Opening CON for write access fails
 +
 +- Issue #28162: WindowsConsoleIO readall() fails if first line starts with
 +  Ctrl+Z
 +
 +- Issue #28163: WindowsConsoleIO fileno() passes wrong flags to
 +  _open_osfhandle
 +
 +- Issue #28164: _PyIO_get_console_type fails for various paths
 +
 +- Issue #28137: Renames Windows path file to ._pth
 +
 +- Issue #28138: Windows ._pth file should allow import site
 +
 +C API
 +-----
 +
++- Issue #29058: All stable API extensions added after Python 3.2 are now
++  available only when Py_LIMITED_API is set to the PY_VERSION_HEX value of
++  the minimum Python version supporting this API.
++
 +- Issue #28822: The indices parameters *start* and *end* of PyUnicode_FindChar()
 +  are now adjusted to behave like ``str[start:end]``.
 +
 +- Issue #28808: PyUnicode_CompareWithASCIIString() now never raises exceptions.
 +
 +- Issue #28761: The fields name and doc of structures PyMemberDef, PyGetSetDef,
 +  PyStructSequence_Field, PyStructSequence_Desc, and wrapperbase are now of
 +  type ``const char *`` rather of ``char *``.
 +
 +- Issue #28748: Private variable _Py_PackageContext is now of type ``const char *``
 +  rather of ``char *``.
 +
 +- Issue #19569: Compiler warnings are now emitted if use most of deprecated
 +  functions.
 +
 +- Issue #28426: Deprecated undocumented functions PyUnicode_AsEncodedObject(),
 +  PyUnicode_AsDecodedObject(), PyUnicode_AsDecodedUnicode() and
 +  PyUnicode_AsEncodedUnicode().
 +
 +Documentation
 +-------------
 +
 +- Issue #23722: The data model reference and the porting section in the
 +  3.6 What's New guide now cover the additional ``__classcell__`` handling
 +  needed for custom metaclasses to fully support PEP 487 and zero-argument
 +  ``super()``.
 +
 +- Issue #28513: Documented command-line interface of zipfile.
 +
 +Build
 +-----
 +
 +- Issue #23903: Added missed names to PC/python3.def.
 +
 +- Issue #28762: lockf() is available on Android API level 24, but the F_LOCK
 +  macro is not defined in android-ndk-r13.
 +
 +- Issue #28538: Fix the compilation error that occurs because if_nameindex() is
 +  available on Android API level 24, but the if_nameindex structure is not
 +  defined.
 +
 +- Issue #20211: Do not add the directory for installing C header files and the
 +  directory for installing object code libraries to the cross compilation
 +  search paths. Original patch by Thomas Petazzoni.
 +
 +- Issue #28849: Do not define sys.implementation._multiarch on Android.
 +
 +- Issue #10656: Fix out-of-tree building on AIX.  Patch by Tristan Carel and
 +  Michael Haubenwallner.
 +
 +- Issue #26359: Rename --with-optimiations to --enable-optimizations.
 +
 +- Issue #28444: Fix missing extensions modules when cross compiling.
 +
 +- Issue #28208: Update Windows build and OS X installers to use SQLite 3.14.2.
 +
 +- Issue #28248: Update Windows build and OS X installers to use OpenSSL 1.0.2j.
 +
 +- Issue #21124: Fix building the _struct module on Cygwin by passing ``NULL``
 +  instead of ``&PyType_Type`` to PyVarObject_HEAD_INIT.  Patch by Masayuki
 +  Yamamoto.
 +
 +- Issue #13756: Fix building extensions modules on Cygwin.  Patch by Roumen
 +  Petrov, based on original patch by Jason Tishler.
 +
 +- Issue #21085: Add configure check for siginfo_t.si_band, which Cygwin does
 +  not provide.  Patch by Masayuki Yamamoto with review and rebase by Erik Bray.
 +
 +- Issue #28258: Fixed build with Estonian locale (python-config and distclean
 +  targets in Makefile).  Patch by Arfrever Frehtes Taifersar Arahesis.
 +
 +- Issue #26661: setup.py now detects system libffi with multiarch wrapper.
 +
 +- Issue #27979: A full copy of libffi is no longer bundled for use when
 +  building _ctypes on non-OSX UNIX platforms.  An installed copy of libffi is
 +  now required when building _ctypes on such platforms.
 +
 +- Issue #15819: Remove redundant include search directory option for building
 +  outside the source tree.
 +
 +- Issue #28676: Prevent missing 'getentropy' declaration warning on macOS.
 +  Patch by Gareth Rees.
 +
 +Tools/Demos
 +-----------
 +
 +- Issue #28023: Fix python-gdb.py didn't support new dict implementation.
 +
 +- Issue #15369: The pybench and pystone microbenchmark have been removed from
 +  Tools. Please use the new Python benchmark suite
 +  https://github.com/python/performance which is more reliable and includes a
 +  portable version of pybench working on Python 2 and Python 3.
 +
 +- Issue #28102: The zipfile module CLI now prints usage to stderr.
 +  Patch by Stephen J. Turnbull.
 +
 +Tests
 +-----
 +
 +- Issue #28950: Disallow -j0 to be combined with -T/-l in regrtest
 +  command line arguments.
 +
 +- Issue #28683: Fix the tests that bind() a unix socket and raise
 +  PermissionError on Android for a non-root user.
 +
 + - Issue #26936: Fix the test_socket failures on Android - getservbyname(),
 +   getservbyport() and getaddrinfo() are broken on some Android API levels.
 +
 +- Issue #28666: Now test.support.rmtree is able to remove unwritable or
 +  unreadable directories.
 +
 +- Issue #23839: Various caches now are cleared before running every test file.
 +
 +- Issue #26944: Fix test_posix for Android where 'id -G' is entirely wrong or
 +  missing the effective gid.
 +
 +- Issue #28409: regrtest: fix the parser of command line arguments.
 +
 +- Issue #28217: Adds _testconsole module to test console input.
 +
 +- Issue #26939: Add the support.setswitchinterval() function to fix
 +  test_functools hanging on the Android armv7 qemu emulator.
 +
 +
  What's New in Python 3.6.1 release candidate 1?
  ===============================================