(original) (raw)

I don't see any obvious issues, but there may be some that don't need to be marked stable.

Given that a mismatch here will cause build errors for users, I'm +1 on checking this in.

Cheers,
Steve

Top-posted from my Windows Phone

From: Zachary Ware
Sent: �4/�13/�2015 17:29
To: Python-Dev
Subject: \[Python-Dev\] Python3 Stable ABI

In issue23903, I've created a script that will produce PC/python3.def
by scraping the header files in Include. There are are many many
discrepencies between what my script generates and what is currently
in the repository (diff below), but in every case I've checked the
script has been right: what the script finds is actually exported as
part of the limited API, but due to not being in the .def file it's
not actually exported from python3.dll. Almost all of the differences
are things that the script found that weren't present, but there are a
couple things going the other way.

The point of this message is to ask everybody who maintains anything
in C to take a look through and make sure everything in their area is
properly guarded (or not) by Py\_LIMITED\_API. Alternately, if somebody
can find a bug in my script and brain that's finding too much stuff,
that would be great too.

Ideally, after this is all settled I'd like to add the script to both
the Makefile and the Windows build system, such that PC/python3.def is
always kept up to date and flags changes that weren't meant to be
made.

Regards,
\--
Zach

(I'm afraid Gmail might mangle this beyond recognition, you can find the diff at
http://bugs.python.org/review/23903/diff/14549/PC/python3.def
if it does.)

diff -r 24f2c0279120 PC/python3.def
\--- a/PC/python3.def Mon Apr 13 15:51:59 2015 -0500
+++ b/PC/python3.def Mon Apr 13 16:10:34 2015 -0500
@@ -1,13 +1,15 @@
; This file specifies the import forwarding for python3.dll
; It is used when building python3dll.vcxproj
+; Generated by python3defgen.py, DO NOT modify directly!
LIBRARY "python3"
EXPORTS
\+ PyAST\_FromNode=python35.PyAST\_FromNode
\+ PyAST\_FromNodeObject=python35.PyAST\_FromNodeObject
\+ PyAST\_Validate=python35.PyAST\_Validate
PyArg\_Parse=python35.PyArg\_Parse
PyArg\_ParseTuple=python35.PyArg\_ParseTuple
PyArg\_ParseTupleAndKeywords=python35.PyArg\_ParseTupleAndKeywords
PyArg\_UnpackTuple=python35.PyArg\_UnpackTuple
\- PyArg\_VaParse=python35.PyArg\_VaParse
\- PyArg\_VaParseTupleAndKeywords=python35.PyArg\_VaParseTupleAndKeywords
PyArg\_ValidateKeywordArguments=python35.PyArg\_ValidateKeywordArguments
PyBaseObject\_Type=python35.PyBaseObject\_Type DATA
PyBool\_FromLong=python35.PyBool\_FromLong
@@ -39,7 +41,6 @@
PyCFunction\_GetFlags=python35.PyCFunction\_GetFlags
PyCFunction\_GetFunction=python35.PyCFunction\_GetFunction
PyCFunction\_GetSelf=python35.PyCFunction\_GetSelf
\- PyCFunction\_New=python35.PyCFunction\_New
PyCFunction\_NewEx=python35.PyCFunction\_NewEx
PyCFunction\_Type=python35.PyCFunction\_Type DATA
PyCallIter\_New=python35.PyCallIter\_New
@@ -58,6 +59,7 @@
PyCapsule\_SetPointer=python35.PyCapsule\_SetPointer
PyCapsule\_Type=python35.PyCapsule\_Type DATA
PyClassMethodDescr\_Type=python35.PyClassMethodDescr\_Type DATA
\+ PyCmpWrapper\_Type=python35.PyCmpWrapper\_Type DATA
PyCodec\_BackslashReplaceErrors=python35.PyCodec\_BackslashReplaceErrors
PyCodec\_Decode=python35.PyCodec\_Decode
PyCodec\_Decoder=python35.PyCodec\_Decoder
@@ -68,6 +70,7 @@
PyCodec\_IncrementalEncoder=python35.PyCodec\_IncrementalEncoder
PyCodec\_KnownEncoding=python35.PyCodec\_KnownEncoding
PyCodec\_LookupError=python35.PyCodec\_LookupError
\+ PyCodec\_NameReplaceErrors=python35.PyCodec\_NameReplaceErrors
PyCodec\_Register=python35.PyCodec\_Register
PyCodec\_RegisterError=python35.PyCodec\_RegisterError
PyCodec\_ReplaceErrors=python35.PyCodec\_ReplaceErrors
@@ -122,6 +125,7 @@
PyErr\_Fetch=python35.PyErr\_Fetch
PyErr\_Format=python35.PyErr\_Format
PyErr\_FormatV=python35.PyErr\_FormatV
\+ PyErr\_GetExcInfo=python35.PyErr\_GetExcInfo
PyErr\_GivenExceptionMatches=python35.PyErr\_GivenExceptionMatches
PyErr\_NewException=python35.PyErr\_NewException
PyErr\_NewExceptionWithDoc=python35.PyErr\_NewExceptionWithDoc
@@ -132,14 +136,25 @@
PyErr\_PrintEx=python35.PyErr\_PrintEx
PyErr\_ProgramText=python35.PyErr\_ProgramText
PyErr\_Restore=python35.PyErr\_Restore
\+ PyErr\_SetExcFromWindowsErr=python35.PyErr\_SetExcFromWindowsErr
\+ PyErr\_SetExcFromWindowsErrWithFilename=python35.PyErr\_SetExcFromWindowsErrWithFilename
\+ PyErr\_SetExcFromWindowsErrWithFilenameObject=python35.PyErr\_SetExcFromWindowsErrWithFilenameObject
\+ PyErr\_SetExcFromWindowsErrWithFilenameObjects=python35.PyErr\_SetExcFromWindowsErrWithFilenameObjects
\+ PyErr\_SetExcInfo=python35.PyErr\_SetExcInfo
\+ PyErr\_SetExcWithArgsKwargs=python35.PyErr\_SetExcWithArgsKwargs
PyErr\_SetFromErrno=python35.PyErr\_SetFromErrno
PyErr\_SetFromErrnoWithFilename=python35.PyErr\_SetFromErrnoWithFilename
PyErr\_SetFromErrnoWithFilenameObject=python35.PyErr\_SetFromErrnoWithFilenameObject
\+ PyErr\_SetFromErrnoWithFilenameObjects=python35.PyErr\_SetFromErrnoWithFilenameObjects
\+ PyErr\_SetFromWindowsErr=python35.PyErr\_SetFromWindowsErr
\+ PyErr\_SetFromWindowsErrWithFilename=python35.PyErr\_SetFromWindowsErrWithFilename
\+ PyErr\_SetImportError=python35.PyErr\_SetImportError
PyErr\_SetInterrupt=python35.PyErr\_SetInterrupt
PyErr\_SetNone=python35.PyErr\_SetNone
PyErr\_SetObject=python35.PyErr\_SetObject
PyErr\_SetString=python35.PyErr\_SetString
PyErr\_SyntaxLocation=python35.PyErr\_SyntaxLocation
\+ PyErr\_SyntaxLocationEx=python35.PyErr\_SyntaxLocationEx
PyErr\_WarnEx=python35.PyErr\_WarnEx
PyErr\_WarnExplicit=python35.PyErr\_WarnExplicit
PyErr\_WarnFormat=python35.PyErr\_WarnFormat
@@ -171,12 +186,21 @@
PyExc\_AssertionError=python35.PyExc\_AssertionError DATA
PyExc\_AttributeError=python35.PyExc\_AttributeError DATA
PyExc\_BaseException=python35.PyExc\_BaseException DATA
\+ PyExc\_BlockingIOError=python35.PyExc\_BlockingIOError DATA
\+ PyExc\_BrokenPipeError=python35.PyExc\_BrokenPipeError DATA
PyExc\_BufferError=python35.PyExc\_BufferError DATA
PyExc\_BytesWarning=python35.PyExc\_BytesWarning DATA
\+ PyExc\_ChildProcessError=python35.PyExc\_ChildProcessError DATA
\+ PyExc\_ConnectionAbortedError=python35.PyExc\_ConnectionAbortedError DATA
\+ PyExc\_ConnectionError=python35.PyExc\_ConnectionError DATA
\+ PyExc\_ConnectionRefusedError=python35.PyExc\_ConnectionRefusedError DATA
\+ PyExc\_ConnectionResetError=python35.PyExc\_ConnectionResetError DATA
PyExc\_DeprecationWarning=python35.PyExc\_DeprecationWarning DATA
PyExc\_EOFError=python35.PyExc\_EOFError DATA
PyExc\_EnvironmentError=python35.PyExc\_EnvironmentError DATA
PyExc\_Exception=python35.PyExc\_Exception DATA
\+ PyExc\_FileExistsError=python35.PyExc\_FileExistsError DATA
\+ PyExc\_FileNotFoundError=python35.PyExc\_FileNotFoundError DATA
PyExc\_FloatingPointError=python35.PyExc\_FloatingPointError DATA
PyExc\_FutureWarning=python35.PyExc\_FutureWarning DATA
PyExc\_GeneratorExit=python35.PyExc\_GeneratorExit DATA
@@ -185,18 +209,23 @@
PyExc\_ImportWarning=python35.PyExc\_ImportWarning DATA
PyExc\_IndentationError=python35.PyExc\_IndentationError DATA
PyExc\_IndexError=python35.PyExc\_IndexError DATA
\+ PyExc\_InterruptedError=python35.PyExc\_InterruptedError DATA
\+ PyExc\_IsADirectoryError=python35.PyExc\_IsADirectoryError DATA
PyExc\_KeyError=python35.PyExc\_KeyError DATA
PyExc\_KeyboardInterrupt=python35.PyExc\_KeyboardInterrupt DATA
PyExc\_LookupError=python35.PyExc\_LookupError DATA
PyExc\_MemoryError=python35.PyExc\_MemoryError DATA
\- PyExc\_MemoryErrorInst=python35.PyExc\_MemoryErrorInst DATA
PyExc\_NameError=python35.PyExc\_NameError DATA
\+ PyExc\_NotADirectoryError=python35.PyExc\_NotADirectoryError DATA
PyExc\_NotImplementedError=python35.PyExc\_NotImplementedError DATA
PyExc\_OSError=python35.PyExc\_OSError DATA
PyExc\_OverflowError=python35.PyExc\_OverflowError DATA
PyExc\_PendingDeprecationWarning=python35.PyExc\_PendingDeprecationWarning DATA
\+ PyExc\_PermissionError=python35.PyExc\_PermissionError DATA
\+ PyExc\_ProcessLookupError=python35.PyExc\_ProcessLookupError DATA
PyExc\_RecursionErrorInst=python35.PyExc\_RecursionErrorInst DATA
PyExc\_ReferenceError=python35.PyExc\_ReferenceError DATA
\+ PyExc\_ResourceWarning=python35.PyExc\_ResourceWarning DATA
PyExc\_RuntimeError=python35.PyExc\_RuntimeError DATA
PyExc\_RuntimeWarning=python35.PyExc\_RuntimeWarning DATA
PyExc\_StopIteration=python35.PyExc\_StopIteration DATA
@@ -205,6 +234,7 @@
PyExc\_SystemError=python35.PyExc\_SystemError DATA
PyExc\_SystemExit=python35.PyExc\_SystemExit DATA
PyExc\_TabError=python35.PyExc\_TabError DATA
\+ PyExc\_TimeoutError=python35.PyExc\_TimeoutError DATA
PyExc\_TypeError=python35.PyExc\_TypeError DATA
PyExc\_UnboundLocalError=python35.PyExc\_UnboundLocalError DATA
PyExc\_UnicodeDecodeError=python35.PyExc\_UnicodeDecodeError DATA
@@ -215,6 +245,7 @@
PyExc\_UserWarning=python35.PyExc\_UserWarning DATA
PyExc\_ValueError=python35.PyExc\_ValueError DATA
PyExc\_Warning=python35.PyExc\_Warning DATA
\+ PyExc\_WindowsError=python35.PyExc\_WindowsError DATA
PyExc\_ZeroDivisionError=python35.PyExc\_ZeroDivisionError DATA
PyException\_GetCause=python35.PyException\_GetCause
PyException\_GetContext=python35.PyException\_GetContext
@@ -242,10 +273,12 @@
PyGILState\_Release=python35.PyGILState\_Release
PyGetSetDescr\_Type=python35.PyGetSetDescr\_Type DATA
PyImport\_AddModule=python35.PyImport\_AddModule
\+ PyImport\_AddModuleObject=python35.PyImport\_AddModuleObject
PyImport\_AppendInittab=python35.PyImport\_AppendInittab
PyImport\_Cleanup=python35.PyImport\_Cleanup
PyImport\_ExecCodeModule=python35.PyImport\_ExecCodeModule
PyImport\_ExecCodeModuleEx=python35.PyImport\_ExecCodeModuleEx
\+ PyImport\_ExecCodeModuleObject=python35.PyImport\_ExecCodeModuleObject
PyImport\_ExecCodeModuleWithPathnames=python35.PyImport\_ExecCodeModuleWithPathnames
PyImport\_GetImporter=python35.PyImport\_GetImporter
PyImport\_GetMagicNumber=python35.PyImport\_GetMagicNumber
@@ -253,8 +286,10 @@
PyImport\_GetModuleDict=python35.PyImport\_GetModuleDict
PyImport\_Import=python35.PyImport\_Import
PyImport\_ImportFrozenModule=python35.PyImport\_ImportFrozenModule
\+ PyImport\_ImportFrozenModuleObject=python35.PyImport\_ImportFrozenModuleObject
PyImport\_ImportModule=python35.PyImport\_ImportModule
PyImport\_ImportModuleLevel=python35.PyImport\_ImportModuleLevel
\+ PyImport\_ImportModuleLevelObject=python35.PyImport\_ImportModuleLevelObject
PyImport\_ImportModuleNoBlock=python35.PyImport\_ImportModuleNoBlock
PyImport\_ReloadModule=python35.PyImport\_ReloadModule
PyInterpreterState\_Clear=python35.PyInterpreterState\_Clear
@@ -310,10 +345,18 @@
PyMapping\_SetItemString=python35.PyMapping\_SetItemString
PyMapping\_Size=python35.PyMapping\_Size
PyMapping\_Values=python35.PyMapping\_Values
\+ PyMarshal\_ReadObjectFromString=python35.PyMarshal\_ReadObjectFromString
\+ PyMarshal\_WriteLongToFile=python35.PyMarshal\_WriteLongToFile
\+ PyMarshal\_WriteObjectToFile=python35.PyMarshal\_WriteObjectToFile
\+ PyMarshal\_WriteObjectToString=python35.PyMarshal\_WriteObjectToString
\+ PyMem\_Calloc=python35.PyMem\_Calloc
PyMem\_Free=python35.PyMem\_Free
PyMem\_Malloc=python35.PyMem\_Malloc
PyMem\_Realloc=python35.PyMem\_Realloc
PyMemberDescr\_Type=python35.PyMemberDescr\_Type DATA
\+ PyMember\_GetOne=python35.PyMember\_GetOne
\+ PyMember\_SetOne=python35.PyMember\_SetOne
\+ PyMemoryView\_FromMemory=python35.PyMemoryView\_FromMemory
PyMemoryView\_FromObject=python35.PyMemoryView\_FromObject
PyMemoryView\_GetContiguous=python35.PyMemoryView\_GetContiguous
PyMemoryView\_Type=python35.PyMemoryView\_Type DATA
@@ -327,9 +370,15 @@
PyModule\_GetFilename=python35.PyModule\_GetFilename
PyModule\_GetFilenameObject=python35.PyModule\_GetFilenameObject
PyModule\_GetName=python35.PyModule\_GetName
\+ PyModule\_GetNameObject=python35.PyModule\_GetNameObject
PyModule\_GetState=python35.PyModule\_GetState
PyModule\_New=python35.PyModule\_New
\+ PyModule\_NewObject=python35.PyModule\_NewObject
PyModule\_Type=python35.PyModule\_Type DATA
\+ PyNode\_AddChild=python35.PyNode\_AddChild
\+ PyNode\_Free=python35.PyNode\_Free
\+ PyNode\_ListTree=python35.PyNode\_ListTree
\+ PyNode\_New=python35.PyNode\_New
PyNullImporter\_Type=python35.PyNullImporter\_Type DATA
PyNumber\_Absolute=python35.PyNumber\_Absolute
PyNumber\_Add=python35.PyNumber\_Add
@@ -343,6 +392,7 @@
PyNumber\_InPlaceAnd=python35.PyNumber\_InPlaceAnd
PyNumber\_InPlaceFloorDivide=python35.PyNumber\_InPlaceFloorDivide
PyNumber\_InPlaceLshift=python35.PyNumber\_InPlaceLshift
\+ PyNumber\_InPlaceMatrixMultiply=python35.PyNumber\_InPlaceMatrixMultiply
PyNumber\_InPlaceMultiply=python35.PyNumber\_InPlaceMultiply
PyNumber\_InPlaceOr=python35.PyNumber\_InPlaceOr
PyNumber\_InPlacePower=python35.PyNumber\_InPlacePower
@@ -355,6 +405,7 @@
PyNumber\_Invert=python35.PyNumber\_Invert
PyNumber\_Long=python35.PyNumber\_Long
PyNumber\_Lshift=python35.PyNumber\_Lshift
\+ PyNumber\_MatrixMultiply=python35.PyNumber\_MatrixMultiply
PyNumber\_Multiply=python35.PyNumber\_Multiply
PyNumber\_Negative=python35.PyNumber\_Negative
PyNumber\_Or=python35.PyNumber\_Or
@@ -367,6 +418,7 @@
PyNumber\_TrueDivide=python35.PyNumber\_TrueDivide
PyNumber\_Xor=python35.PyNumber\_Xor
PyOS\_AfterFork=python35.PyOS\_AfterFork
\+ PyOS\_CheckStack=python35.PyOS\_CheckStack
PyOS\_InitInterrupts=python35.PyOS\_InitInterrupts
PyOS\_InputHook=python35.PyOS\_InputHook DATA
PyOS\_InterruptOccurred=python35.PyOS\_InterruptOccurred
@@ -393,6 +445,7 @@
PyObject\_CallMethod=python35.PyObject\_CallMethod
PyObject\_CallMethodObjArgs=python35.PyObject\_CallMethodObjArgs
PyObject\_CallObject=python35.PyObject\_CallObject
\+ PyObject\_Calloc=python35.PyObject\_Calloc
PyObject\_CheckReadBuffer=python35.PyObject\_CheckReadBuffer
PyObject\_ClearWeakRefs=python35.PyObject\_ClearWeakRefs
PyObject\_DelItem=python35.PyObject\_DelItem
@@ -405,6 +458,7 @@
PyObject\_GC\_UnTrack=python35.PyObject\_GC\_UnTrack
PyObject\_GenericGetAttr=python35.PyObject\_GenericGetAttr
PyObject\_GenericSetAttr=python35.PyObject\_GenericSetAttr
\+ PyObject\_GenericSetDict=python35.PyObject\_GenericSetDict
PyObject\_GetAttr=python35.PyObject\_GetAttr
PyObject\_GetAttrString=python35.PyObject\_GetAttrString
PyObject\_GetItem=python35.PyObject\_GetItem
@@ -431,9 +485,10 @@
PyObject\_SetItem=python35.PyObject\_SetItem
PyObject\_Size=python35.PyObject\_Size
PyObject\_Str=python35.PyObject\_Str
\- PyObject\_Type=python35.PyObject\_Type DATA
\+ PyObject\_Type=python35.PyObject\_Type
PyParser\_SimpleParseFileFlags=python35.PyParser\_SimpleParseFileFlags
PyParser\_SimpleParseStringFlags=python35.PyParser\_SimpleParseStringFlags
\+ PyParser\_SimpleParseStringFlagsFilename=python35.PyParser\_SimpleParseStringFlagsFilename
PyProperty\_Type=python35.PyProperty\_Type DATA
PyRangeIter\_Type=python35.PyRangeIter\_Type DATA
PyRange\_Type=python35.PyRange\_Type DATA
@@ -474,8 +529,8 @@
PySlice\_New=python35.PySlice\_New
PySlice\_Type=python35.PySlice\_Type DATA
PySortWrapper\_Type=python35.PySortWrapper\_Type DATA
\+ PyState\_AddModule=python35.PyState\_AddModule
PyState\_FindModule=python35.PyState\_FindModule
\- PyState\_AddModule=python35.PyState\_AddModule
PyState\_RemoveModule=python35.PyState\_RemoveModule
PyStructSequence\_GetItem=python35.PyStructSequence\_GetItem
PyStructSequence\_New=python35.PyStructSequence\_New
@@ -484,9 +539,11 @@
PySuper\_Type=python35.PySuper\_Type DATA
PySys\_AddWarnOption=python35.PySys\_AddWarnOption
PySys\_AddWarnOptionUnicode=python35.PySys\_AddWarnOptionUnicode
\+ PySys\_AddXOption=python35.PySys\_AddXOption
PySys\_FormatStderr=python35.PySys\_FormatStderr
PySys\_FormatStdout=python35.PySys\_FormatStdout
PySys\_GetObject=python35.PySys\_GetObject
\+ PySys\_GetXOptions=python35.PySys\_GetXOptions
PySys\_HasWarnOptions=python35.PySys\_HasWarnOptions
PySys\_ResetWarnOptions=python35.PySys\_ResetWarnOptions
PySys\_SetArgv=python35.PySys\_SetArgv
@@ -503,6 +560,24 @@
PyThreadState\_New=python35.PyThreadState\_New
PyThreadState\_SetAsyncExc=python35.PyThreadState\_SetAsyncExc
PyThreadState\_Swap=python35.PyThreadState\_Swap
\+ PyThread\_GetInfo=python35.PyThread\_GetInfo
\+ PyThread\_ReInitTLS=python35.PyThread\_ReInitTLS
\+ PyThread\_acquire\_lock=python35.PyThread\_acquire\_lock
\+ PyThread\_acquire\_lock\_timed=python35.PyThread\_acquire\_lock\_timed
\+ PyThread\_allocate\_lock=python35.PyThread\_allocate\_lock
\+ PyThread\_create\_key=python35.PyThread\_create\_key
\+ PyThread\_delete\_key=python35.PyThread\_delete\_key
\+ PyThread\_delete\_key\_value=python35.PyThread\_delete\_key\_value
\+ PyThread\_exit\_thread=python35.PyThread\_exit\_thread
\+ PyThread\_free\_lock=python35.PyThread\_free\_lock
\+ PyThread\_get\_key\_value=python35.PyThread\_get\_key\_value
\+ PyThread\_get\_stacksize=python35.PyThread\_get\_stacksize
\+ PyThread\_get\_thread\_ident=python35.PyThread\_get\_thread\_ident
\+ PyThread\_init\_thread=python35.PyThread\_init\_thread
\+ PyThread\_release\_lock=python35.PyThread\_release\_lock
\+ PyThread\_set\_key\_value=python35.PyThread\_set\_key\_value
\+ PyThread\_set\_stacksize=python35.PyThread\_set\_stacksize
\+ PyThread\_start\_new\_thread=python35.PyThread\_start\_new\_thread
PyTraceBack\_Here=python35.PyTraceBack\_Here
PyTraceBack\_Print=python35.PyTraceBack\_Print
PyTraceBack\_Type=python35.PyTraceBack\_Type DATA
@@ -561,34 +636,51 @@
PyUnicode\_AsEncodedString=python35.PyUnicode\_AsEncodedString
PyUnicode\_AsEncodedUnicode=python35.PyUnicode\_AsEncodedUnicode
PyUnicode\_AsLatin1String=python35.PyUnicode\_AsLatin1String
\+ PyUnicode\_AsMBCSString=python35.PyUnicode\_AsMBCSString
PyUnicode\_AsRawUnicodeEscapeString=python35.PyUnicode\_AsRawUnicodeEscapeString
\+ PyUnicode\_AsUCS4=python35.PyUnicode\_AsUCS4
\+ PyUnicode\_AsUCS4Copy=python35.PyUnicode\_AsUCS4Copy
PyUnicode\_AsUTF16String=python35.PyUnicode\_AsUTF16String
PyUnicode\_AsUTF32String=python35.PyUnicode\_AsUTF32String
PyUnicode\_AsUTF8String=python35.PyUnicode\_AsUTF8String
PyUnicode\_AsUnicodeEscapeString=python35.PyUnicode\_AsUnicodeEscapeString
PyUnicode\_AsWideChar=python35.PyUnicode\_AsWideChar
\- PyUnicode\_ClearFreelist=python35.PyUnicode\_ClearFreelist
\+ PyUnicode\_AsWideCharString=python35.PyUnicode\_AsWideCharString
\+ PyUnicode\_BuildEncodingMap=python35.PyUnicode\_BuildEncodingMap
\+ PyUnicode\_ClearFreeList=python35.PyUnicode\_ClearFreeList
PyUnicode\_Compare=python35.PyUnicode\_Compare
\+ PyUnicode\_CompareWithASCIIString=python35.PyUnicode\_CompareWithASCIIString
PyUnicode\_Concat=python35.PyUnicode\_Concat
PyUnicode\_Contains=python35.PyUnicode\_Contains
PyUnicode\_Count=python35.PyUnicode\_Count
PyUnicode\_Decode=python35.PyUnicode\_Decode
PyUnicode\_DecodeASCII=python35.PyUnicode\_DecodeASCII
PyUnicode\_DecodeCharmap=python35.PyUnicode\_DecodeCharmap
\+ PyUnicode\_DecodeCodePageStateful=python35.PyUnicode\_DecodeCodePageStateful
PyUnicode\_DecodeFSDefault=python35.PyUnicode\_DecodeFSDefault
PyUnicode\_DecodeFSDefaultAndSize=python35.PyUnicode\_DecodeFSDefaultAndSize
PyUnicode\_DecodeLatin1=python35.PyUnicode\_DecodeLatin1
\+ PyUnicode\_DecodeLocale=python35.PyUnicode\_DecodeLocale
\+ PyUnicode\_DecodeLocaleAndSize=python35.PyUnicode\_DecodeLocaleAndSize
\+ PyUnicode\_DecodeMBCS=python35.PyUnicode\_DecodeMBCS
\+ PyUnicode\_DecodeMBCSStateful=python35.PyUnicode\_DecodeMBCSStateful
PyUnicode\_DecodeRawUnicodeEscape=python35.PyUnicode\_DecodeRawUnicodeEscape
PyUnicode\_DecodeUTF16=python35.PyUnicode\_DecodeUTF16
PyUnicode\_DecodeUTF16Stateful=python35.PyUnicode\_DecodeUTF16Stateful
PyUnicode\_DecodeUTF32=python35.PyUnicode\_DecodeUTF32
PyUnicode\_DecodeUTF32Stateful=python35.PyUnicode\_DecodeUTF32Stateful
\+ PyUnicode\_DecodeUTF7=python35.PyUnicode\_DecodeUTF7
\+ PyUnicode\_DecodeUTF7Stateful=python35.PyUnicode\_DecodeUTF7Stateful
PyUnicode\_DecodeUTF8=python35.PyUnicode\_DecodeUTF8
PyUnicode\_DecodeUTF8Stateful=python35.PyUnicode\_DecodeUTF8Stateful
PyUnicode\_DecodeUnicodeEscape=python35.PyUnicode\_DecodeUnicodeEscape
\+ PyUnicode\_EncodeCodePage=python35.PyUnicode\_EncodeCodePage
\+ PyUnicode\_EncodeFSDefault=python35.PyUnicode\_EncodeFSDefault
\+ PyUnicode\_EncodeLocale=python35.PyUnicode\_EncodeLocale
PyUnicode\_FSConverter=python35.PyUnicode\_FSConverter
PyUnicode\_FSDecoder=python35.PyUnicode\_FSDecoder
PyUnicode\_Find=python35.PyUnicode\_Find
\+ PyUnicode\_FindChar=python35.PyUnicode\_FindChar
PyUnicode\_Format=python35.PyUnicode\_Format
PyUnicode\_FromEncodedObject=python35.PyUnicode\_FromEncodedObject
PyUnicode\_FromFormat=python35.PyUnicode\_FromFormat
@@ -599,30 +691,28 @@
PyUnicode\_FromStringAndSize=python35.PyUnicode\_FromStringAndSize
PyUnicode\_FromWideChar=python35.PyUnicode\_FromWideChar
PyUnicode\_GetDefaultEncoding=python35.PyUnicode\_GetDefaultEncoding
\+ PyUnicode\_GetLength=python35.PyUnicode\_GetLength
PyUnicode\_GetSize=python35.PyUnicode\_GetSize
\+ PyUnicode\_InternFromString=python35.PyUnicode\_InternFromString
\+ PyUnicode\_InternImmortal=python35.PyUnicode\_InternImmortal
\+ PyUnicode\_InternInPlace=python35.PyUnicode\_InternInPlace
PyUnicode\_IsIdentifier=python35.PyUnicode\_IsIdentifier
PyUnicode\_Join=python35.PyUnicode\_Join
PyUnicode\_Partition=python35.PyUnicode\_Partition
PyUnicode\_RPartition=python35.PyUnicode\_RPartition
PyUnicode\_RSplit=python35.PyUnicode\_RSplit
\+ PyUnicode\_ReadChar=python35.PyUnicode\_ReadChar
PyUnicode\_Replace=python35.PyUnicode\_Replace
PyUnicode\_Resize=python35.PyUnicode\_Resize
PyUnicode\_RichCompare=python35.PyUnicode\_RichCompare
\- PyUnicode\_SetDefaultEncoding=python35.PyUnicode\_SetDefaultEncoding
PyUnicode\_Split=python35.PyUnicode\_Split
PyUnicode\_Splitlines=python35.PyUnicode\_Splitlines
\+ PyUnicode\_Substring=python35.PyUnicode\_Substring
PyUnicode\_Tailmatch=python35.PyUnicode\_Tailmatch
PyUnicode\_Translate=python35.PyUnicode\_Translate
\- PyUnicode\_BuildEncodingMap=python35.PyUnicode\_BuildEncodingMap
\- PyUnicode\_CompareWithASCIIString=python35.PyUnicode\_CompareWithASCIIString
\- PyUnicode\_DecodeUTF7=python35.PyUnicode\_DecodeUTF7
\- PyUnicode\_DecodeUTF7Stateful=python35.PyUnicode\_DecodeUTF7Stateful
\- PyUnicode\_EncodeFSDefault=python35.PyUnicode\_EncodeFSDefault
\- PyUnicode\_InternFromString=python35.PyUnicode\_InternFromString
\- PyUnicode\_InternImmortal=python35.PyUnicode\_InternImmortal
\- PyUnicode\_InternInPlace=python35.PyUnicode\_InternInPlace
PyUnicode\_Type=python35.PyUnicode\_Type DATA
\- PyWeakref\_GetObject=python35.PyWeakref\_GetObject DATA
\+ PyUnicode\_WriteChar=python35.PyUnicode\_WriteChar
\+ PyWeakref\_GetObject=python35.PyWeakref\_GetObject
PyWeakref\_NewProxy=python35.PyWeakref\_NewProxy
PyWeakref\_NewRef=python35.PyWeakref\_NewRef
PyWrapperDescr\_Type=python35.PyWrapperDescr\_Type DATA
@@ -633,6 +723,8 @@
Py\_BuildValue=python35.Py\_BuildValue
Py\_CompileString=python35.Py\_CompileString
Py\_DecRef=python35.Py\_DecRef
\+ Py\_DecodeLocale=python35.Py\_DecodeLocale
\+ Py\_EncodeLocale=python35.Py\_EncodeLocale
Py\_EndInterpreter=python35.Py\_EndInterpreter
Py\_Exit=python35.Py\_Exit
Py\_FatalError=python35.Py\_FatalError
@@ -660,44 +752,95 @@
Py\_NewInterpreter=python35.Py\_NewInterpreter
Py\_ReprEnter=python35.Py\_ReprEnter
Py\_ReprLeave=python35.Py\_ReprLeave
\+ Py\_SetPath=python35.Py\_SetPath
Py\_SetProgramName=python35.Py\_SetProgramName
Py\_SetPythonHome=python35.Py\_SetPythonHome
Py\_SetRecursionLimit=python35.Py\_SetRecursionLimit
Py\_SymtableString=python35.Py\_SymtableString
Py\_VaBuildValue=python35.Py\_VaBuildValue
\+ Py\_hexdigits=python35.Py\_hexdigits DATA
\+ \_PyDebug\_PrintTotalRefs=python35.\_PyDebug\_PrintTotalRefs
\+ \_PyDict\_Dummy=python35.\_PyDict\_Dummy
\+ \_PyDict\_GetItemId=python35.\_PyDict\_GetItemId
\+ \_PyDict\_GetItemIdWithError=python35.\_PyDict\_GetItemIdWithError
\+ \_PyDict\_SetItemId=python35.\_PyDict\_SetItemId
\_PyErr\_BadInternalCall=python35.\_PyErr\_BadInternalCall
\+ \_PyEval\_FiniThreads=python35.\_PyEval\_FiniThreads
\+ \_PyGILState\_Reinit=python35.\_PyGILState\_Reinit
\+ \_PyImportZip\_Init=python35.\_PyImportZip\_Init
\+ \_PyMethodWrapper\_Type=python35.\_PyMethodWrapper\_Type DATA
\+ \_PyNamespace\_New=python35.\_PyNamespace\_New
\+ \_PyNamespace\_Type=python35.\_PyNamespace\_Type DATA
\+ \_PyNone\_Type=python35.\_PyNone\_Type DATA
\+ \_PyNotImplemented\_Type=python35.\_PyNotImplemented\_Type DATA
\+ \_PyOS\_GetOpt=python35.\_PyOS\_GetOpt
\+ \_PyOS\_IsMainThread=python35.\_PyOS\_IsMainThread
\+ \_PyOS\_SigintEvent=python35.\_PyOS\_SigintEvent
\_PyObject\_CallFunction\_SizeT=python35.\_PyObject\_CallFunction\_SizeT
\+ \_PyObject\_CallMethodId=python35.\_PyObject\_CallMethodId
\+ \_PyObject\_CallMethodIdObjArgs=python35.\_PyObject\_CallMethodIdObjArgs
\+ \_PyObject\_CallMethodId\_SizeT=python35.\_PyObject\_CallMethodId\_SizeT
\_PyObject\_CallMethod\_SizeT=python35.\_PyObject\_CallMethod\_SizeT
\+ \_PyObject\_GC\_Calloc=python35.\_PyObject\_GC\_Calloc
\_PyObject\_GC\_Malloc=python35.\_PyObject\_GC\_Malloc
\_PyObject\_GC\_New=python35.\_PyObject\_GC\_New
\_PyObject\_GC\_NewVar=python35.\_PyObject\_GC\_NewVar
\_PyObject\_GC\_Resize=python35.\_PyObject\_GC\_Resize
\+ \_PyObject\_GetAttrId=python35.\_PyObject\_GetAttrId
\+ \_PyObject\_HasAttrId=python35.\_PyObject\_HasAttrId
\+ \_PyObject\_IsAbstract=python35.\_PyObject\_IsAbstract
\_PyObject\_New=python35.\_PyObject\_New
\_PyObject\_NewVar=python35.\_PyObject\_NewVar
\+ \_PyObject\_SetAttrId=python35.\_PyObject\_SetAttrId
\_PyState\_AddModule=python35.\_PyState\_AddModule
\+ \_PySys\_SetObjectId=python35.\_PySys\_SetObjectId
\+ \_PyThreadState\_DeleteExcept=python35.\_PyThreadState\_DeleteExcept
\_PyThreadState\_Init=python35.\_PyThreadState\_Init
\_PyThreadState\_Prealloc=python35.\_PyThreadState\_Prealloc
\_PyTrash\_delete\_later=python35.\_PyTrash\_delete\_later DATA
\_PyTrash\_delete\_nesting=python35.\_PyTrash\_delete\_nesting DATA
\_PyTrash\_deposit\_object=python35.\_PyTrash\_deposit\_object
\_PyTrash\_destroy\_chain=python35.\_PyTrash\_destroy\_chain
\+ \_PyTrash\_thread\_deposit\_object=python35.\_PyTrash\_thread\_deposit\_object
\+ \_PyTrash\_thread\_destroy\_chain=python35.\_PyTrash\_thread\_destroy\_chain
\+ \_PyUnicode\_ClearStaticStrings=python35.\_PyUnicode\_ClearStaticStrings
\+ \_PyUnicode\_FromId=python35.\_PyUnicode\_FromId
\_PyWeakref\_CallableProxyType=python35.\_PyWeakref\_CallableProxyType DATA
\_PyWeakref\_ProxyType=python35.\_PyWeakref\_ProxyType DATA
\_PyWeakref\_RefType=python35.\_PyWeakref\_RefType DATA
\+ \_Py\_AddToAllObjects=python35.\_Py\_AddToAllObjects
\_Py\_BuildValue\_SizeT=python35.\_Py\_BuildValue\_SizeT
\_Py\_CheckRecursionLimit=python35.\_Py\_CheckRecursionLimit DATA
\_Py\_CheckRecursiveCall=python35.\_Py\_CheckRecursiveCall
\_Py\_Dealloc=python35.\_Py\_Dealloc
\+ \_Py\_DumpTraceback=python35.\_Py\_DumpTraceback DATA
\+ \_Py\_DumpTracebackThreads=python35.\_Py\_DumpTracebackThreads DATA
\_Py\_EllipsisObject=python35.\_Py\_EllipsisObject DATA
\_Py\_FalseStruct=python35.\_Py\_FalseStruct DATA
\+ \_Py\_ForgetReference=python35.\_Py\_ForgetReference
\+ \_Py\_GetAllocatedBlocks=python35.\_Py\_GetAllocatedBlocks
\+ \_Py\_GetRefTotal=python35.\_Py\_GetRefTotal
\+ \_Py\_HashSecret\_Initialized=python35.\_Py\_HashSecret\_Initialized DATA
\+ \_Py\_NegativeRefcount=python35.\_Py\_NegativeRefcount
\+ \_Py\_NewReference=python35.\_Py\_NewReference
\_Py\_NoneStruct=python35.\_Py\_NoneStruct DATA
\_Py\_NotImplementedStruct=python35.\_Py\_NotImplementedStruct DATA
\+ \_Py\_PrintReferenceAddresses=python35.\_Py\_PrintReferenceAddresses
\+ \_Py\_PrintReferences=python35.\_Py\_PrintReferences
\+ \_Py\_RefTotal=python35.\_Py\_RefTotal DATA
\_Py\_SwappedOp=python35.\_Py\_SwappedOp DATA
\- \_Py\_TrueStruct=python35.\_Py\_TrueStruct DATA
\_Py\_VaBuildValue\_SizeT=python35.\_Py\_VaBuildValue\_SizeT
\- \_PyArg\_Parse\_SizeT=python35.\_PyArg\_Parse\_SizeT
\- \_PyArg\_ParseTuple\_SizeT=python35.\_PyArg\_ParseTuple\_SizeT
\- \_PyArg\_ParseTupleAndKeywords\_SizeT=python35.\_PyArg\_ParseTupleAndKeywords\_SizeT
\- \_PyArg\_VaParse\_SizeT=python35.\_PyArg\_VaParse\_SizeT
\- \_PyArg\_VaParseTupleAndKeywords\_SizeT=python35.\_PyArg\_VaParseTupleAndKeywords\_SizeT
\- \_Py\_BuildValue\_SizeT=python35.\_Py\_BuildValue\_SizeT
\+ \_Py\_add\_one\_to\_index\_C=python35.\_Py\_add\_one\_to\_index\_C
\+ \_Py\_add\_one\_to\_index\_F=python35.\_Py\_add\_one\_to\_index\_F
\+ \_Py\_device\_encoding=python35.\_Py\_device\_encoding
\+ \_Py\_fopen=python35.\_Py\_fopen
\+ \_Py\_fopen\_obj=python35.\_Py\_fopen\_obj
\+ \_Py\_read=python35.\_Py\_read
\+ \_Py\_stat=python35.\_Py\_stat
\+ \_Py\_wfopen=python35.\_Py\_wfopen
\+ \_Py\_wgetcwd=python35.\_Py\_wgetcwd
\+ \_Py\_wreadlink=python35.\_Py\_wreadlink
\+ \_Py\_wrealpath=python35.\_Py\_wrealpath
\+ \_Py\_write=python35.\_Py\_write
\+ \_Py\_write\_noraise=python35.\_Py\_write\_noraise
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: https://mail.python.org/mailman/options/python-dev/steve.dower%40microsoft.com