Visitar URL original
code.h uses MS-only C++ extensions · Issue #101907 · python/cpython · GitHub
Skip to content

code.h uses MS-only C++ extensions #101907

Description

@zooba

Issue #100222 added a struct to Include/cpython/code.h (which is included by default by Python.h) that is not compliant C++:

typedef union {
    uint16_t cache;
    struct {
        uint8_t opcode;
        uint8_t oparg;
    };
} _Py_CODEUNIT;

The struct member requires a name, as only anonymous structs are currently permitted in standard C++.

(And since the original issue invokes PEP 7, I'll do the same and point out that "The public C API should be compatible with C++". The intention of this clause is that standard C++ can #include <Python.h>, which is currently broken.)

Linked PRs

Activity

  1. added
    buildThe build process and cross-build
    3.12only security fixes
    on Feb 14, 2023
  2. added a commit that references this issue on Feb 14, 2023
  3. markshannon commented on Feb 14, 2023

    @markshannon
    Member

    Rather than replace all the .opcode and .oparg with SHOUTY MACROS, how about:

    typedef union {
        uint16_t cache;
        struct {
            uint8_t code;
            uint8_t arg;
        } op;
    } _Py_CODEUNIT;
    

    Then i.oparg becomes i.op.arg which is still readable.

  4. zooba commented on Feb 14, 2023

    @zooba
    MemberAuthor

    Do we want that to be the API then? And so we should remove the macros entirely?

    If we're going to have macros, I'd rather they be the only place we have to make a change like this.

  5. markshannon commented on Feb 14, 2023

    @markshannon
    Member

    Personally, I'd say get rid of the macros.

    At least the uses of them. We should probably keep the declarations in case any third-party code is using them.

  6. added a commit that references this issue on Feb 20, 2023
  7. added a commit that references this issue on Feb 20, 2023
  8. added 2 commits that reference this issue on Sep 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.12only security fixesbuildThe build process and cross-build

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions