Skip to content

Commits on Dec 10, 2022

  1. gh-99582: freeze zipimport into _bootstrap_python (#99583)

    Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
    kkpattern and kumaraditya303 committed Dec 10, 2022

Commits on Dec 9, 2022

  1. GH-98522: Add version number to code objects. (GH-98525)

    * Add version number to code object for better versioning of functions.
    
    * Improves specialization for closures and list comprehensions.
    markshannon committed Dec 9, 2022

Commits on Nov 24, 2022

  1. gh-98872: Fix a possible resource leak in Python 3.11.0 (GH-99047)

    Issue: #98872
    
    Automerge-Triggered-By: GH:kumaraditya303
    SQLPATCH committed Nov 24, 2022

Commits on Oct 30, 2022

  1. gh-96853: Restore test coverage for Py_Initialize(Ex) (GH-98212)

    * As most of `test_embed` now uses `Py_InitializeFromConfig`, add
      a specific test case to cover `Py_Initialize` (and `Py_InitializeEx`)
    * Rename `_testembed` init helper to clarify the API used
    * Add a `PyConfig_Clear` call in `Py_InitializeEx` to make
      the code more obviously correct (it already didn't leak as
      none of the dynamically allocated config fields were being
      populated, but it's clearer if the wrappers follow the
      documented API usage guidelines)
    ncoghlan committed Oct 30, 2022

Commits on Oct 27, 2022

  1. GH-96793: Change FOR_ITER to not pop the iterator on exhaustion. (G…

    …H-96801)
    
    Change FOR_ITER to have the same stack effect regardless of whether it branches or not.
    Performance is unchanged as FOR_ITER (and specialized forms jump over the cleanup code).
    markshannon committed Oct 27, 2022

Commits on Oct 26, 2022

  1. gh-98608: Change _Py_NewInterpreter() to _Py_NewInterpreterFromConfig…

    …() (gh-98609)
    
    (see #98608)
    
    This change does the following:
    
    1. change the argument to a new `_PyInterpreterConfig` struct
    2. rename the function to `_Py_NewInterpreterFromConfig()`, inspired by `Py_InitializeFromConfig()` (takes a `_PyInterpreterConfig`  instead of `isolated_subinterpreter`)
    3. split up the boolean `isolated_subinterpreter` into the corresponding multiple granular settings
       * allow_fork
       * allow_subprocess
       * allow_threads
    4. add `PyInterpreterState.feature_flags` to store those settings
    5. add a function for checking if a feature is enabled on an opaque `PyInterpreterState *`
    6. drop `PyConfig._isolated_interpreter`
    
    The existing default (see `Py_NewInterpeter()` and `Py_Initialize*()`) allows fork, subprocess, and threads and the optional "isolated" interpreter (see the `_xxsubinterpreters` module) disables all three.  None of that changes here; the defaults are preserved.
    
    Note that the given `_PyInterpreterConfig` will not be used outside `_Py_NewInterpreterFromConfig()`, nor preserved.  This contrasts with how `PyConfig` is currently preserved, used, and even modified outside `Py_InitializeFromConfig()`.  I'd rather just avoid that mess from the start for `_PyInterpreterConfig`.  We can preserve it later if we find an actual need.
    
    This change allows us to follow up with a number of improvements (e.g. stop disallowing subprocess and support disallowing exec instead).
    
    (Note that this PR adds "private" symbols.  We'll probably make them public, and add docs, in a separate change.)
    ericsnowcurrently committed Oct 26, 2022

Commits on Oct 17, 2022

  1. gh-97669: Create Tools/build/ directory (#97963)

    Create Tools/build/ directory. Move the following scripts from
    Tools/scripts/ to Tools/build/:
    
    * check_extension_modules.py
    * deepfreeze.py
    * freeze_modules.py
    * generate_global_objects.py
    * generate_levenshtein_examples.py
    * generate_opcode_h.py
    * generate_re_casefix.py
    * generate_sre_constants.py
    * generate_stdlib_module_names.py
    * generate_token.py
    * parse_html5_entities.py
    * smelly.py
    * stable_abi.py
    * umarshal.py
    * update_file.py
    * verify_ensurepip_wheels.py
    
    Update references to these scripts.
    vstinner committed Oct 17, 2022

Commits on Oct 3, 2022

  1. gh-96512: Move int_max_str_digits setting to PyConfig (#96944)

    It had to live as a global outside of PyConfig for stable ABI reasons in
    the pre-3.12 backports.
    
    This removes the `_Py_global_config_int_max_str_digits` and gets rid of
    the equivalent field in the internal `struct _is PyInterpreterState` as
    code can just use the existing nested config struct within that.
    
    Adds tests to verify unique settings and configs in subinterpreters.
    gpshead committed Oct 3, 2022

Commits on Jul 31, 2022

Commits on Jul 13, 2022

  1. gh-90815: Fix test_embed for Windows PGO build with mimalloc (GH-94790)

    Fixes the failure of PGO building with `mimalloc` on Windows, ensuring that `test_bpo20891` does not break profiling data (`python31*.pgc`).
    neonene committed Jul 13, 2022

Commits on Jul 5, 2022

  1. gh-94485: Set line number of module's RESUME instruction to 0, as spe…

    …cified by PEP 626 (GH-94552)
    
    Co-authored-by: Mark Shannon <mark@hotpy.org>
    iritkatriel and markshannon committed Jul 5, 2022

Commits on Jun 21, 2022

  1. GH-91432: Specialize FOR_ITER (GH-91713)

    * Adds FOR_ITER_LIST and FOR_ITER_RANGE specializations.
    
    * Adds _PyLong_AssignValue() internal function to avoid temporary boxing of ints.
    sweeneyde committed Jun 21, 2022

Commits on Jun 16, 2022

Commits on Jun 3, 2022

  1. gh-93382: Cache result of PyCode_GetCode in codeobject (GH-93383)

    Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
    Co-authored-by: Dennis Sweeney <36520290+sweeneyde@users.noreply.github.com>
    3 people committed Jun 3, 2022

Commits on May 19, 2022

Commits on May 5, 2022

  1. gh-57684: Add -P cmdline option and PYTHONSAFEPATH env var (#31542)

    Add the -P command line option and the PYTHONSAFEPATH environment
    variable to not prepend a potentially unsafe path to sys.path.
    
    * Add sys.flags.safe_path flag.
    * Add PyConfig.safe_path member.
    * Programs/_bootstrap_python.c uses config.safe_path=0.
    * Update subprocess._optim_args_from_interpreter_flags() to handle
      the -P command line option.
    * Modules/getpath.py sets safe_path to 1 if a "._pth" file is
      present.
    vstinner committed May 5, 2022

Commits on May 4, 2022

  1. gh-78214: marshal: Stabilize FLAG_REF usage (GH-8226)

    Use FLAG_REF always for interned strings.
    
    Refcounts of interned string is very unstable.
    When compiling same source, refcounts of interned string in the output may be 1 or >1.
    It makes FLAG_REF usage unstable.
    
    To help reproducible build, use FLAG_REF for interned string even if refcnt(obj)==1.
    methane committed May 4, 2022

Commits on Apr 21, 2022

  1. GH-88116: Use a compact format to represent end line and column offse…

    …ts. (GH-91666)
    
    * Stores all location info in linetable to conform to PEP 626.
    
    * Remove column table from code objects.
    
    * Remove end-line table from code objects.
    
    * Document new location table format
    markshannon committed Apr 21, 2022

Commits on Feb 21, 2022

  1. bpo-46329: Streamline calling sequence a bit. (GH-31465)

    * Move handling of bound-methods to PRECALL.
    
    * Remove call_shape.postcall_shrink
    
    * Remove call_shape.callable
    
    * Remove call_shape.callable. Change CALL oparg to match PRECALL oparg.
    
    * Move KW_NAMES before PRECALL.
    
    * Update opcode docs in dis.rst
    markshannon committed Feb 21, 2022

Commits on Feb 18, 2022

  1. bpo-46329: Change calling sequence (again) (GH-31373)

    * Change calling sequence: Add PUSH_NULL. Merge PRECALL_FUNCTION and PRECALL_METHOD into PRECALL.
    markshannon committed Feb 18, 2022

Commits on Feb 8, 2022

  1. bpo-46541: Replace core use of _Py_IDENTIFIER() with statically initi…

    …alized global objects. (gh-30928)
    
    We're no longer using _Py_IDENTIFIER() (or _Py_static_string()) in any core CPython code.  It is still used in a number of non-builtin stdlib modules.
    
    The replacement is: PyUnicodeObject (not pointer) fields under _PyRuntimeState, statically initialized as part of _PyRuntime.  A new _Py_GET_GLOBAL_IDENTIFIER() macro facilitates lookup of the fields (along with _Py_GET_GLOBAL_STRING() for non-identifier strings).
    
    https://bugs.python.org/issue46541#msg411799 explains the rationale for this change.
    
    The core of the change is in:
    
    * (new) Include/internal/pycore_global_strings.h - the declarations for the global strings, along with the macros
    * Include/internal/pycore_runtime_init.h - added the static initializers for the global strings
    * Include/internal/pycore_global_objects.h - where the struct in pycore_global_strings.h is hooked into _PyRuntimeState
    * Tools/scripts/generate_global_objects.py - added generation of the global string declarations and static initializers
    
    I've also added a --check flag to generate_global_objects.py (along with make check-global-objects) to check for unused global strings.  That check is added to the PR CI config.
    
    The remainder of this change updates the core code to use _Py_GET_GLOBAL_IDENTIFIER() instead of _Py_IDENTIFIER() and the related _Py*Id functions (likewise for _Py_GET_GLOBAL_STRING() instead of _Py_static_string()).  This includes adding a few functions where there wasn't already an alternative to _Py*Id(), replacing the _Py_Identifier * parameter with PyObject *.
    
    The following are not changed (yet):
    
    * stop using _Py_IDENTIFIER() in the stdlib modules
    * (maybe) get rid of _Py_IDENTIFIER(), etc. entirely -- this may not be doable as at least one package on PyPI using this (private) API
    * (maybe) intern the strings during runtime init
    
    https://bugs.python.org/issue46541
    ericsnowcurrently committed Feb 8, 2022

Commits on Jan 28, 2022

  1. bpo-46329: Split calls into precall and call instructions. (GH-30855)

    * Add PRECALL_FUNCTION opcode.
    
    * Move 'call shape' varaibles into struct.
    
    * Replace CALL_NO_KW and CALL_KW with KW_NAMES and CALL instructions.
    
    * Specialize for builtin methods taking using the METH_FASTCALL | METH_KEYWORDS protocol.
    
    * Allow kwnames for specialized calls to builtin types.
    
    * Specialize calls to tuple(arg) and str(arg).
    markshannon committed Jan 28, 2022

Commits on Jan 27, 2022

  1. bpo-46476: Fix memory leak in code objects generated by deepfreeze (G…

    …H-30853)
    
    Add _Py_Deepfreeze_Fini() and _PyStaticCode_Dealloc() functions.
    kumaraditya303 committed Jan 27, 2022

Commits on Jan 21, 2022

  1. bpo-46417: _testembed.c avoids Py_SetProgramName() (GH-30732)

    * _testembed_Py_Initialize() now uses the PyConfig API, rather than
      deprecated Py_SetProgramName().
    * Reduce INIT_LOOPS from 16 to 4: test_embed now takes 8.7 seconds
      rather than 14.7 seconds.
    vstinner committed Jan 21, 2022
Older