[Python-Dev] Python3 Stable ABI

Steve Dower Steve.Dower at microsoft.com
Thu Apr 16 01:51:10 CEST 2015


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<mailto:zachary.ware+pydev at gmail.com>
Sent: ‎4/‎13/‎2015 17:29
To: Python-Dev<mailto:python-dev at python.org>
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 at python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: https://mail.python.org/mailman/options/python-dev/steve.dower%40microsoft.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20150415/c582f628/attachment-0001.html>


More information about the Python-Dev mailing list