GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — bpo-1635741: Add a global module state to unicodedata by vstinner · Pull Request #22712 · python/cpython

Conversation

@vstinner

@vstinner vstinner commented Oct 15, 2020 •
edited by bedevere-bot
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

Prepare unicodedata to add a state per module: start with a global
"module" state, pass it to subfunctions which access &UCD_Type. This
change also prepares the conversion of the UCD_Type static type to a
heap type.

https://bugs.python.org/issue1635741

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@vstinner
bpo-1635741: Add a global module state to unicodedata
771d816
Prepare unicodedata to add a state per module: start with a global
"module" state, pass it to subfunctions which access &UCD_Type. This
change also prepares the conversion of the UCD_Type static type to a
heap type.
@vstinner vstinner added the skip news label Oct 15, 2020
@the-knights-who-say-ni the-knights-who-say-ni added the CLA signed label Oct 15, 2020
@bedevere-bot bedevere-bot added the awaiting core review label Oct 15, 2020
@vstinner vstinner mentioned this pull request Oct 15, 2020
bpo-41861: Convert _sqlite3 CursorType and ConnectionType to heap types #22478
Merged
@vstinner

vstinner commented Oct 15, 2020

Copy link
Copy Markdown
Member Author

With this PR, I understood that my main concern comes from the PyCapsule API: unicodedata.ucnhash_CAPI.

_PyUnicode_DecodeUnicodeEscape() uses it like this:

ucnhash_CAPI->getcode(NULL, start, (int)namelen, &ch, 0)

No state is passed to _getcode() and so currently it can only access global variables.

I looked at how to create a C function which would be a wrapper to _getcode() which automatically pass a state. Problem: the only portable way is to use it with something like: func(closure, ...), you must pass a state to the wrapper as an argument. There is a non-portable way to really create a closure in C, but it requires libffi which sounds a heavy solution.

Hopefully we don't need to go that far. _PyUnicode_Name_CAPI is private and excluded from the limited C API. We can move it to the internal C API and introduce incompatible change, like require to pass a state. For example, we can add a state in the _PyUnicode_Name_CAPI structure and require the caller to pass it:

ucnhash_CAPI->getcode(ucnhash_CAPI->state, NULL, start, (int)namelen, &ch, 0)
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@vstinner vstinner changed the title [WIP] bpo-1635741: Add a global module state to unicodedata bpo-1635741: Add a global module state to unicodedata Oct 15, 2020
@vstinner
vstinner merged commit e6b8c52 into python:master Oct 15, 2020
@bedevere-bot bedevere-bot removed the awaiting core review label Oct 15, 2020
@vstinner
vstinner deleted the unicodedata_state branch October 15, 2020 14:22
xzy3 pushed a commit to xzy3/cpython that referenced this pull request Oct 18, 2020
@vstinner @xzy3-cdc
bpo-1635741: Add a global module state to unicodedata (pythonGH-22712)
3bedbcc
Prepare unicodedata to add a state per module: start with a global
"module" state, pass it to subfunctions which access &UCD_Type. This
change also prepares the conversion of the UCD_Type static type to a
heap type.
adorilson pushed a commit to adorilson/cpython that referenced this pull request Mar 13, 2021
@vstinner @adorilson
bpo-1635741: Add a global module state to unicodedata (pythonGH-22712)
f667e76
Prepare unicodedata to add a state per module: start with a global
"module" state, pass it to subfunctions which access &UCD_Type. This
change also prepares the conversion of the UCD_Type static type to a
heap type.
@kylotan kylotan mannequin mentioned this pull request Sep 19, 2022
Py_Finalize() doesn't clear all Python objects at exit #44470
Closed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

skip news

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

3 participants

@vstinner @the-knights-who-say-ni @bedevere-bot
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.