Navigation Menu

Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move internal headers to Include/internal/ #79262

Closed
vstinner opened this issue Oct 27, 2018 · 49 comments
Closed

Move internal headers to Include/internal/ #79262

vstinner opened this issue Oct 27, 2018 · 49 comments
Labels
3.8 only security fixes interpreter-core (Objects, Python, Grammar, and Parser dirs)

Comments

@vstinner
Copy link
Member

BPO 35081
Nosy @malemburg, @tim-one, @mdickinson, @scoder, @vstinner, @ericsnowcurrently, @serhiy-storchaka, @izbyshev
PRs
  • [WIP] bpo-35081: Include/internal/ becomes Include/pycore/ #10143
  • bpo-35081: Remove Py_BUILD_CORE from datetime.h #10238
  • bpo-35081: Move Include/pyatomic.c to Include/internal/ #10239
  • bpo-35081: Cleanup pystate.c and pystate.h #10240
  • bpo-35081: Move Py_BUILD_CORE code to internal/mem.h #10249
  • bpo-35081: Add pycore_ prefix to internal header files #10263
  • bpo-35081: Add _PyThreadState_GET() internal macro #10266
  • bpo-35081: Move accu.h to Include/internal/pycore_accu.h #10271
  • bpo-35081: Move _PyObject_GC_TRACK() to pycore_object.h #10272
  • bpo-35081: And pycore_lifecycle.h and pycore_pathconfig.h #10273
  • [WIP] bpo-35081: _testcapi is now compiled with Py_BUILD_CORE #10274
  • bpo-35081: Rename internal headers #10275
  • bpo-35081: Move _PyObject_GC_TRACK() to pycore_object.h #10276
  • bpo-35081: Enhance Python-ast.h and ast.h #10277
  • bpo-35081: Add _PyCoreConfig_AsDict() #10362
  • bpo-35081: Internal headers require Py_BUILD_CORE #10363
  • bpo-35081: Add pycore_fileutils.h #10371
  • bpo-35081: Remove Py_BUILD_CORE from datetime.h #10416
  • bpo-35081: Make some _PyGC macros internal #10507
  • bpo-35081: Move _PyGC_FINALIZED() back to C API #10626
  • bpo-35081: Add Include/internal/pycore_object.h #10640
  • bpo-35081: Add Include/internal/pycore_object.h #10640
  • bpo-35081: Add Include/internal/pycore_object.h #10640
  • bpo-35081: add NEWS entry for new Include/internal/pycore_*.h files #10666
  • bpo-35081: Add new internal headers to Makefile #10670
  • bpo-35081: Add _PyTuple_CAST() #10704
  • bpo-35081: Add Include/internal/pycore_tupleobject.h #10705
  • bpo-37194: Add a new public PyObject_CallNoArgs() function #13890
  • bpo-35081: Move dtoa.h header to the internal C API #18489
  • bpo-35081: Move bytes_methods.h to the internal C API #18492
  • bpo-35081: Move interpreteridobject.h to Include/internal/ #28969
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = <Date 2022-01-30.23:33:22.200>
    created_at = <Date 2018-10-27.00:42:23.909>
    labels = ['interpreter-core', '3.8']
    title = 'Move internal headers to Include/internal/'
    updated_at = <Date 2022-01-30.23:33:22.199>
    user = 'https://github.com/vstinner'

    bugs.python.org fields:

    activity = <Date 2022-01-30.23:33:22.199>
    actor = 'vstinner'
    assignee = 'none'
    closed = True
    closed_date = <Date 2022-01-30.23:33:22.200>
    closer = 'vstinner'
    components = ['Interpreter Core']
    creation = <Date 2018-10-27.00:42:23.909>
    creator = 'vstinner'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 35081
    keywords = ['patch']
    message_count = 49.0
    messages = ['328619', '328620', '328623', '328854', '328920', '328921', '328922', '328923', '328942', '329006', '329009', '329026', '329029', '329030', '329031', '329035', '329037', '329062', '329082', '329086', '329362', '329398', '329509', '329608', '329693', '329739', '329812', '329814', '329819', '329830', '329955', '330045', '330067', '330068', '330163', '330164', '330187', '330218', '330304', '330326', '330328', '330334', '330399', '330400', '361917', '361920', '403979', '403997', '404057']
    nosy_count = 9.0
    nosy_names = ['lemburg', 'tim.peters', 'mark.dickinson', 'atuining', 'scoder', 'vstinner', 'eric.snow', 'serhiy.storchaka', 'izbyshev']
    pr_nums = ['10143', '10238', '10239', '10240', '10249', '10263', '10266', '10271', '10272', '10273', '10274', '10275', '10276', '10277', '10362', '10363', '10371', '10416', '10507', '10626', '10640', '10640', '10640', '10666', '10670', '10704', '10705', '13890', '18489', '18492', '28969']
    priority = 'normal'
    resolution = 'fixed'
    stage = 'resolved'
    status = 'closed'
    superseder = None
    type = None
    url = 'https://bugs.python.org/issue35081'
    versions = ['Python 3.8']

    @vstinner
    Copy link
    Member Author

    Currently, #include "pymem.h" may include Include/pymem.h or Include/internal/pymem.h depending where is the C file (.c) and if Include/internal/ is in the header search path or not.

    I propose to:

    • Rename Include/internal/ to Include/pycore/
    • In this subdirectory, rename xxx.h to pycore_xxx.h to avoid any risk of confusion
    • Automatically include pycore_xxx.h in xxx.h if Py_BUILD_CORE is defined: this should avoid the need of explicit #include "internal/xxx.h" in C files

    For example, Include/internal/pystate.h becomes Include/pycore/pycore_pystate.h.

    Attached PR implements this idea.

    I chose to rename "internal" subdirectory to "pycore" to prepare the addition of other subdirectories. See:

    Next steps:

    This change should be backward compatible since Include/internal/ must not be used outside CPython core. If someone does that, well, be ready for breakage :-) It's not supported.

    @vstinner vstinner added 3.8 only security fixes interpreter-core (Objects, Python, Grammar, and Parser dirs) labels Oct 27, 2018
    @vstinner
    Copy link
    Member Author

    I decided to work on this issue while trying to convert the _PyObject_GC_TRACK() macro into a "static inline" function. Currently, the macro uses _PyGC_generation0 which is defined earlier by "extern PyGC_Head *_PyGC_generation0;".

    Problem: _PyGC_generation0 no longer exists... Include/internal/mem.h now defines: "#define _PyGC_generation0 _PyRuntime.gc.generation0".

    Include/internal/mem.h includes Include/objimpl.h, but Include/objimpl.h requires Include/internal/mem.h. The include order matters here, many header files are inter-dependent, and have two header files with the same name in Include/ and Include/internal/ causes issues depending where the #include is done...

    My PR renames mem.h to pycore_objimpl.h and include pycore_objimpl.h at "the right place" in objimpl.h. Since objimpl.h controls where pycore_objimpl.h is imported, it's simpler to handle inter-dependencies simpler.

    Some inter-dependencies issues are hidden by the fact the C macros don't really require functions, macros and variables in the right order. They "just work". But converting C macros to proper "static inline" functions expose many issues.

    @vstinner
    Copy link
    Member Author

    See also bpo-35059 which converts C macros to static inline functions.

    @vstinner
    Copy link
    Member Author

    @vstinner
    Copy link
    Member Author

    New changeset 9204fb8 by Victor Stinner in branch 'master':
    bpo-35081: Cleanup pystate.c and pystate.h (GH-10240)
    9204fb8

    @vstinner
    Copy link
    Member Author

    New changeset 31368a4 by Victor Stinner in branch 'master':
    bpo-35081: Move Include/pyatomic.c to Include/internal/ (GH-10239)
    31368a4

    @vstinner
    Copy link
    Member Author

    Serhiy Storchaka asked: "Would not be better to move files with the content fully surrounded by #ifdef Py_BUILD_CORE out of the Include/ directory?"

    See his comment and my answer in the PR 10239:
    #10239 (comment)

    @vstinner
    Copy link
    Member Author

    My changes move Py_BUILD_CORE to Include/internal/. I'm not sure of the effect on the backward compatibility.

    Since Python 3.7, many "Py_BUILD_CORE" functions rely on Include/internal/, like PyThreadState_GET() which uses _PyRuntime.gilstate.tstate_current.

    On my Fedora 28, the python3-devel package doesn't proide Include/internal/ headers, only Include/*.h in /usr/include/python3.7m/. It seems like Include/internal/ is not usable by 3rd party modules on Fedora at least.

    I understand that even if a 3rd party C extension used the Py_BUILD_CORE API, Python 3.7 already broke these extensions.

    I don't want C extensions to use Py_BUILD_CORE: Py_BUILD_CORE API is really designed to only be used inside Python. If this API is used outside Python, we cannot modify the API anymore since it would break extensions. But I want to make sure that we can break this API for different reasons.

    In Python 3.7, pyatomic.h is included by Python.h. In Python 3.7.0, pyatomic.h content wasn't surrounded by Py_BUILD_CORE and this header file caused multiple compilation issues: see bpo-23644 and bpo-25150. The content is now restricted to Py_BUILD_CORE since Python 3.7.1. It allows us to more easily change the implementation.

    @vstinner
    Copy link
    Member Author

    Include/internal/pystate.h uses #include "pystate.h" to include Include/pystate.h, but it tries to include itself (Include/internal/pystate.h) which does nothing because of "#ifndef Py_INTERNAL_PYSTATE_H #define Py_INTERNAL_PYSTATE_H ... #endif".

    Remove the #ifndef #define to see the bug:

    diff --git a/Include/internal/pystate.h b/Include/internal/pystate.h
    index 38845d32ec..2ef023a9a5 100644
    --- a/Include/internal/pystate.h
    +++ b/Include/internal/pystate.h
    @@ -1,5 +1,3 @@
    -#ifndef Py_INTERNAL_PYSTATE_H
    -#define Py_INTERNAL_PYSTATE_H
     #ifdef __cplusplus
     extern "C" {
     #endif
    @@ -222,4 +220,3 @@ PyAPI_FUNC(void) _PyInterpreterState_DeleteExceptMain(void);
     #ifdef __cplusplus
     }
     #endif
    -#endif /* !Py_INTERNAL_PYSTATE_H */

    Compilation fails with:

    In file included from ./Include/internal/pystate.h:5,
                     from ./Include/internal/pystate.h:5,
                     from ./Include/internal/pystate.h:5,
                     from ./Include/internal/pystate.h:5,
                     from ./Include/internal/pystate.h:5,
                     from ./Include/internal/pystate.h:5,
                     from ./Include/internal/pystate.h:5,
                     ...
    ./Include/internal/pystate.h:5:21: error: #include nested too deeply
     #include "pystate.h"

    @vstinner
    Copy link
    Member Author

    New changeset 2be00d9 by Victor Stinner in branch 'master':
    bpo-35081: Move Py_BUILD_CORE code to internal/mem.h (GH-10249)
    2be00d9

    @vstinner
    Copy link
    Member Author

    Include/internal/pystate.h uses #include "pystate.h" to include Include/pystate.h, but it tries to include itself (Include/internal/pystate.h) which does nothing because of "#ifndef Py_INTERNAL_PYSTATE_H #define Py_INTERNAL_PYSTATE_H ... #endif".

    I proposed to rename internal header files, add an "internal_" prefix, to avoid this issue: PR 10263.

    @vstinner
    Copy link
    Member Author

    New changeset 27e2d1f by Victor Stinner in branch 'master':
    bpo-35081: Add pycore_ prefix to internal header files (GH-10263)
    27e2d1f

    @vstinner
    Copy link
    Member Author

    vstinner commented Nov 1, 2018

    New changeset 50b4857 by Victor Stinner in branch 'master':
    bpo-35081: Add _PyThreadState_GET() internal macro (GH-10266)
    50b4857

    @vstinner
    Copy link
    Member Author

    vstinner commented Nov 1, 2018

    New changeset e281f7d by Victor Stinner in branch 'master':
    bpo-35081: Move accu.h to Include/internal/pycore_accu.h (GH-10271)
    e281f7d

    @vstinner
    Copy link
    Member Author

    vstinner commented Nov 1, 2018

    Copy of my comment on PR 10271:
    #10271 (comment)

    I tried to enforce to require Py_BUILD_CORE in pycore_accu.h to be defined using:

    #ifndef Py_BUILD_CORE
    #  error "Py_BUILD_CORE must be defined to include this header"
    #endif

    But the compilation of the _json module failed, because it isn't compiled with Py_BUILD_CORE. Moreover, _json.c contains:

    /* Core extension modules are built-in on some platforms (e.g. Windows). */
    #ifdef Py_BUILD_CORE
    #define Py_BUILD_CORE_BUILTIN
    #undef Py_BUILD_CORE
    #endif

    @vstinner vstinner changed the title Rename Include/internals/ to Include/pycore/ Move internal headers to Include/internal/ Nov 1, 2018
    @vstinner
    Copy link
    Member Author

    vstinner commented Nov 1, 2018

    New changeset a1c249c by Victor Stinner in branch 'master':
    bpo-35081: And pycore_lifecycle.h and pycore_pathconfig.h (GH-10273)
    a1c249c

    @vstinner
    Copy link
    Member Author

    vstinner commented Nov 1, 2018

    bpo-35081: And pycore_lifecycle.h and pycore_pathconfig.h (GH-10273)

    I tried to add the Py_BUILD_CORE guard in pycore_pathconfig.h:

    +#ifndef Py_BUILD_CORE
    +# error "Py_BUILD_CORE must be defined to include this header"
    +#endif

    But it breaks the compilation of _testcapimodule.c: get_coreconfig() uses _Py_wstrlist_as_pylist(), and _Py_wstrlist_as_pylist() is defined in pycore_pathconfig.h.

    IMHO _testcapi should be compiled with Py_BUILD_CORE defined. I wrote PR 10274 but then _testcapi fails because of datetime.h: this bug should be fixed by PR 10238.

    @vstinner
    Copy link
    Member Author

    vstinner commented Nov 1, 2018

    I created bpo-35134: Move !Py_LIMITED_API to Include/pycapi/.

    @serhiy-storchaka
    Copy link
    Member

    Please don't change Include/datetime.h without consulting with original authors of this code (see bpo-876130).

    @vstinner
    Copy link
    Member Author

    vstinner commented Nov 1, 2018

    Please don't change Include/datetime.h without consulting with original authors of this code (see bpo-876130).

    FYI I tried to be very careful on each change to never modify the *public* C API.

    But I modified the Py_BUILD_CORE API. This is fine since this API can change anytime, and it must not be used outside Python.

    @vstinner
    Copy link
    Member Author

    vstinner commented Nov 6, 2018

    New changeset 5ed6995 by Victor Stinner in branch 'master':
    bpo-35081: Add _PyCoreConfig_AsDict() (GH-10362)
    5ed6995

    @vstinner
    Copy link
    Member Author

    vstinner commented Nov 6, 2018

    New changeset 9fc57a3 by Victor Stinner in branch 'master':
    bpo-35081: Add pycore_fileutils.h (GH-10371)
    9fc57a3

    @vstinner
    Copy link
    Member Author

    vstinner commented Nov 9, 2018

    New changeset 130893d by Victor Stinner in branch 'master':
    bpo-35081: Internal headers require Py_BUILD_CORE (GH-10363)
    130893d

    @izbyshev
    Copy link
    Mannequin

    izbyshev mannequin commented Nov 10, 2018

    Victor, you moved declarations of some functions to other headers, but didn't include the new headers into files that implement the functions in some cases. For example, _PyGILState_Init was moved into Include/internal/pycore_lifecycle.h in a1c249c, but it's implemented in Python/pystate.c, which doesn't include the new header.

    This may lead to subtle problems because the compiler can't check that signatures of the declaration and the implementation match. I suggest to use -Wmissing-prototypes and -Wmissing-declarations to detect such situations:

    ../../cpython/Python/pystate.c: At top level:
    ../../cpython/Python/pystate.c:968:1: warning: no previous prototype for ‘_PyGILState_Init’ [-Wmissing-prototypes]
    _PyGILState_Init(PyInterpreterState *i, PyThreadState *t)
    ^~~~~~~~~~~~~~~~
    ../../cpython/Python/pystate.c:988:1: warning: no previous prototype for ‘_PyGILState_Fini’ [-Wmissing-prototypes]
    _PyGILState_Fini(void)
    ^~~~~~~~~~~~~~~~

    Sadly, there are many other similar issues in Python now, but you can at least compare the number of warnings before and after your changes.

    @vstinner
    Copy link
    Member Author

    Python/pystate.c:968:1: warning: no previous prototype for ‘_PyGILState_Init’ [-Wmissing-prototypes]
    _PyGILState_Init(PyInterpreterState *i, PyThreadState *t)
    ^~~~~~~~~~~~~~~~

    Oh, I never saw this warning before. It seems to not be included in -Wall. Would you mind to open a new issue to discuss it?

    I will try to fix the regressions that I introduced, but I'm interested by a more general discussion on this issue.

    @vstinner
    Copy link
    Member Author

    New changeset 621cebe by Victor Stinner in branch 'master':
    bpo-35081: Rename internal headers (GH-10275)
    621cebe

    @vstinner
    Copy link
    Member Author

    New changeset 0d12672 by Victor Stinner (Paul Ganssle) in branch 'master':
    bpo-35081: Remove Py_BUILD_CORE from datetime.h (GH-10416)
    0d12672

    @vstinner
    Copy link
    Member Author

    Status: only pyport. and tupleobject.h use Py_BUILD_CORE, and only tupleobject.h uses "#ifdef Py_BUILD_CORE" (contains code specific to internals).

    $ grep Py_BUILD_CORE Include/*.h
    Include/pyport.h:#               if defined(Py_BUILD_CORE) || defined(Py_BUILD_CORE_BUILTIN)
    Include/pyport.h:#               else /* Py_BUILD_CORE */
    Include/pyport.h:#               endif /* Py_BUILD_CORE */
    Include/pyport.h:#if defined(Py_BUILD_CORE) || defined(Py_BUILD_CORE_BUILTIN)
    Include/pyport.h:#endif /* Py_BUILD_CORE */
    Include/tupleobject.h:#ifdef Py_BUILD_CORE

    tupleobject.c:

    #ifdef Py_BUILD_CORE
    #  define _PyTuple_ITEMS(op) ((((PyTupleObject *)(op))->ob_item))
    #endif

    I added this macro in bpo-35199, to prepare the C code for a new C API hiding implementation details: see bpo-35206.

    @vstinner
    Copy link
    Member Author

    Hum, this issue is much harder than what I expected.

    Status:

    • Include/internal/ header files have been renamed to get a new "pycore_" prefix which avoids conflicts with Include/ header files. Example: "pycore_pystate.h" vs "pystate.h".
    • pyatomic.c has been moved to Include/internal/ and it is no longer
      included in Python.h.
    • Except of _PyTuple_ITEMS() and _PyObject_GC_TRACK(), all internal APIs have been moved to Include/internal/. Many new header files have been created, like pycore_lifecycle.h and pycore_pathconfig.h.

    TODO:

    • Move _PyObject_GC_TRACK() to Include/internal/
    • msg329608 describes bugs like: pystate.c:968:1: warning: no previous prototype for ‘_PyGILState_Init’ [-Wmissing-prototypes]
    • bpo-35134 now manages moving unstable API to a new separated Include/ subdirectory
    • bpo-35059 converts macros to static inline functions

    @vstinner
    Copy link
    Member Author

    New changeset 1a6be91 by Victor Stinner in branch 'master':
    bpo-35081: Make some _PyGC macros internal (GH-10507)
    1a6be91

    @izbyshev
    Copy link
    Mannequin

    izbyshev mannequin commented Nov 15, 2018

    Oh, I never saw this warning before. It seems to not be included in -Wall. Would you mind to open a new issue to discuss it?

    Victor, I've opened bpo-35258 as you suggested.

    @scoder
    Copy link
    Contributor

    scoder commented Nov 18, 2018

    Making _PyGC_FINALIZED() internal broke Cython (cython/cython#2721). It's used in the finaliser implementation (https://github.com/cython/cython/blob/da657c8e326a419cde8ae6ea91be9661b9622504/Cython/Compiler/ModuleNode.py#L1442-L1456), to determine if an object for which tp_dealloc() is called has already been finalised or whether we have to do it. I'm not sure how to deal with this on our side now. Any clue?

    @vstinner
    Copy link
    Member Author

    Making _PyGC_FINALIZED() internal broke Cython (...)

    Aha, interesting. Would you mind to open a new dedicated issue? So we can discuss how much of the GC details we want to leak into the API :-)

    @vstinner
    Copy link
    Member Author

    TODO: add a NEWS entry for all these changes.

    Copy of Nick Coghlan's comment:
    #10275 (comment)

    @vstinner For folks consuming source archives (Linux distros, anyone embedding Python in a larger application, etc) rather than prebuilt binaries, the build process is something that can break, even for Py_BUILD_CORE only changes.

    For those folks, when they pull a new source archive, their builds may break, especially if they're applying additional downstream patches the way Linux distros do.

    The NEWS entry for this header file rearrangement should go in the Build section (https://github.com/python/cpython/tree/master/Misc/NEWS.d/next/Build) rather than the C API section (since these headers aren't part of the public API at all), but it should still exist.

    @vstinner
    Copy link
    Member Author

    Stefan Behnel:

    Making _PyGC_FINALIZED() internal broke Cython (cython/cython#2721). It's used in the finaliser implementation (https://github.com/cython/cython/blob/da657c8e326a419cde8ae6ea91be9661b9622504/Cython/Compiler/ModuleNode.py#L1442-L1456), to determine if an object for which tp_dealloc() is called has already been finalised or whether we have to do it. I'm not sure how to deal with this on our side now. Any clue?

    I wrote PR 10626 to add _PyGC_FINALIZED() back to the C API.

    My intent was only to remove _PyObject_GC_TRACK(o) and _PyObject_GC_UNTRACK(o) from the public C API.

    I didn't expect that anyone would use _PyGC_FINALIZED() :-)

    @vstinner
    Copy link
    Member Author

    New changeset 3e21ad1 by Victor Stinner in branch 'master':
    bpo-35081: Move _PyGC_FINALIZED() back to C API (GH-10626)
    3e21ad1

    @vstinner
    Copy link
    Member Author

    Please review PR 10624 of bpo-35134: Create Include/unstable/ subdirectory. It's the second part of my plan :-)

    @vstinner
    Copy link
    Member Author

    New changeset bcda8f1 by Victor Stinner in branch 'master':
    bpo-35081: Add Include/internal/pycore_object.h (GH-10640)
    bcda8f1

    @vstinner
    Copy link
    Member Author

    New changeset 984061e by Victor Stinner in branch 'master':
    bpo-35081: Add new internal headers to Makefile (GH-10670)
    984061e

    @vstinner
    Copy link
    Member Author

    New changeset 4ac5328 by Victor Stinner in branch 'master':
    bpo-35081: add NEWS entry for new Include/internal/pycore_*.h files (GH-10666)
    4ac5328

    @vstinner
    Copy link
    Member Author

    I close the issue, it seems like all sub-tasks have been completed!

    Summary of the change:

    • Header files of Include/internal/ are now all prefixed by "pycore_" and the directory has been added to the header search path. For example, #include "pycore_pystate.h" is now used in C code, instead of #include "internal/pystate.h".
    • All "#ifdef Py_BUILD_CORE" code has been moved from Include/.h to Include/internal/.h (except of the _PyTuple_ITEMS() macro)
    • I created many new header files in Include/internal/
    • _json and _locale modules are now built with Py_BUILD_CORE define
    • _PyObject_GC_TRACK() and _PyObject_GC_UNTRACK() have been removed from the public C API and moved to the internal API

    There are other issues to track following steps:

    @vstinner
    Copy link
    Member Author

    In bpo-35296, I modified "make install" to also install Include/internal/.

    @vstinner
    Copy link
    Member Author

    New changeset 8ac6539 by Victor Stinner in branch 'master':
    bpo-35081: Add _PyTuple_CAST() (GH-10704)
    8ac6539

    @vstinner
    Copy link
    Member Author

    New changeset ec13b93 by Victor Stinner in branch 'master':
    bpo-35081: Add Include/internal/pycore_tupleobject.h (GH-10705)
    ec13b93

    @vstinner
    Copy link
    Member Author

    New changeset 45876a9 by Victor Stinner in branch 'master':
    bpo-35081: Move bytes_methods.h to the internal C API (GH-18492)
    45876a9

    @vstinner
    Copy link
    Member Author

    New changeset e9e7d28 by Victor Stinner in branch 'master':
    bpo-35081: Move dtoa.h header to the internal C API (GH-18489)
    e9e7d28

    @vstinner
    Copy link
    Member Author

    I reopen the issue since there is still activity on it.

    @vstinner vstinner reopened this Oct 15, 2021
    @vstinner
    Copy link
    Member Author

    New changeset 063abd9 by Victor Stinner in branch 'main':
    bpo-35081: Move interpreteridobject.h to Include/internal/ (GH-28969)
    063abd9

    @ericsnowcurrently
    Copy link
    Member

    On Fri, Oct 15, 2021 at 3:56 AM STINNER Victor <report@bugs.python.org> wrote:

    New changeset 063abd9 by Victor Stinner in branch 'main':
    bpo-35081: Move interpreteridobject.h to Include/internal/ (GH-28969)

    FYI, _xxsubinterpretersmodule is supposed to be an extension module
    (not builtin), so it's not meant to use internal APIs. At some point
    that happened and I only noticed now. I've created bpo-45486 to
    address that.

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    3.8 only security fixes interpreter-core (Objects, Python, Grammar, and Parser dirs)
    Projects
    None yet
    Development

    No branches or pull requests

    4 participants