Skip to content

Refactor PyUnicodeError internal C helpers #127787

Closed
@picnixz

Description

@picnixz

Feature or enhancement

Proposal:

Some helpers make the realization of #126004 a bit harder as we end up with many duplicated code. In order to make the related PRs and #127694 smoother, I suggest refactoring the following helpers:

  • Unify get_unicode and get_string as a single as_unicode_error_attribute.
  • Allow to retrieve the underlying object attribute and its size in one function, say get_unicode_error_object_and_size. This is typically useful for unifying
  • The PyUnicode{Encode,Decode,Translate}Error_GetObject public functions can use a common implementation unicode_error_get_object_impl. Since this depends on the underlying object type, the implementation function would take a flag as a parameter to indicate whether it's a bytes or a string.
  • All PyUnicode{Encode,Decode}Error_GetEncoding public functions can use a common implementation unicode_error_get_encoding_impl. The encoding is always a string.
  • All PyUnicode{Encode,Decode,Translate}Error_{Get,Set}Reason public functions can use a common implementation unicode_error_{get,set}_reason_impl. The reason is always a string.
  • All PyUnicode{Encode,Decode,Translate}_{Get,Set}{Start,End} public functions can use a common implementation unicode_error_{get,set}_{start,end}_impl. Since this depends on the underlying object type, the implementation function would take a flag as a parameter to indicate whether it's a bytes or a string.

Has this already been discussed elsewhere?

This is a minor feature, which does not need previous discussion elsewhere

Links to previous discussion of this feature:

#127674 (comment)

Linked PRs

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

interpreter-core(Objects, Python, Grammar, and Parser dirs)type-featureA feature request or enhancement

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions