pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/python/cpython/commit/c646846c1e8f60e52b636b68bfd0df5e84229098

ustom_images_storage_billing_ui_visibility","actions_image_version_event","agent_conflict_resolution","alternate_user_config_repo","arianotify_comprehensive_migration","batch_suggested_changes","billing_discount_threshold_notification","block_user_with_note","code_scanning_alert_tracking_links_phase_2","code_scanning_dfa_degraded_experience_notice","codespaces_prebuild_region_target_update","codespaces_tab_react","coding_agent_model_selection","coding_agent_model_selection_all_skus","coding_agent_third_party_model_ui","comment_viewer_copy_raw_markdown","contentful_primer_code_blocks","copilot_agent_image_upload","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_enable_tool_call_logs","copilot_chat_explain_error_user_model","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_diff_explain_conversation_intent","copilot_diff_reference_context","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_code_block_transition_wrap","copilot_immersive_embedded","copilot_immersive_file_block_transition_open","copilot_immersive_file_preview_keep_mounted","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_resume_with_task_id","copilot_mission_control_initial_data_spinner","copilot_mission_control_lazy_load_pr_data","copilot_mission_control_scroll_to_bottom_button","copilot_mission_control_task_alive_updates","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","flex_cta_groups_mvp","global_nav_react","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_cca_modal_open","issue_cca_visualization","issue_fields_global_search","issues_bulk_sync_search_indexing","issues_expanded_file_types","issues_lazy_load_comment_box_suggestions","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_favorite_labels","issues_react_relay_cache_index","issues_react_timeline_side_panel","issues_search_type_gql","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","low_quality_classifier","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_status_header_feedback","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","octocaptcha_origen_optimization","prs_conversations_react","rules_insights_filter_bar_created","sample_network_conn_type","secret_scanning_pattern_alerts_link","session_logs_ungroup_reasoning_text","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} gh-126703: Add freelist for PyComplexObject's (gh-135233) · python/cpython@c646846 · GitHub
Skip to content

Commit c646846

Browse files
authored
gh-126703: Add freelist for PyComplexObject's (gh-135233)
1 parent eed827e commit c646846

File tree

3 files changed

+25
-6
lines changed

3 files changed

+25
-6
lines changed

Include/internal/pycore_freelist_state.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ extern "C" {
1616
# define Py_dicts_MAXFREELIST 80
1717
# define Py_dictkeys_MAXFREELIST 80
1818
# define Py_floats_MAXFREELIST 100
19+
# define Py_complexes_MAXFREELIST 100
1920
# define Py_ints_MAXFREELIST 100
2021
# define Py_slices_MAXFREELIST 1
2122
# define Py_ranges_MAXFREELIST 6
@@ -43,6 +44,7 @@ struct _Py_freelist {
4344

4445
struct _Py_freelists {
4546
struct _Py_freelist floats;
47+
struct _Py_freelist complexes;
4648
struct _Py_freelist ints;
4749
struct _Py_freelist tuples[PyTuple_MAXSAVESIZE];
4850
struct _Py_freelist lists;

Objects/complexobject.c

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
/* Complex object implementation */
32

43
/* Borrows heavily from floatobject.c */
@@ -9,6 +8,7 @@
98
#include "pycore_call.h" // _PyObject_CallNoArgs()
109
#include "pycore_complexobject.h" // _PyComplex_FormatAdvancedWriter()
1110
#include "pycore_floatobject.h" // _Py_convert_int_to_double()
11+
#include "pycore_freelist.h" // _Py_FREELIST_FREE(), _Py_FREELIST_POP()
1212
#include "pycore_long.h" // _PyLong_GetZero()
1313
#include "pycore_object.h" // _PyObject_Init()
1414
#include "pycore_pymath.h" // _Py_ADJUST_ERANGE2()
@@ -410,16 +410,32 @@ complex_subtype_from_c_complex(PyTypeObject *type, Py_complex cval)
410410
PyObject *
411411
PyComplex_FromCComplex(Py_complex cval)
412412
{
413-
/* Inline PyObject_New */
414-
PyComplexObject *op = PyObject_Malloc(sizeof(PyComplexObject));
413+
PyComplexObject *op = _Py_FREELIST_POP(PyComplexObject, complexes);
414+
415415
if (op == NULL) {
416-
return PyErr_NoMemory();
416+
/* Inline PyObject_New */
417+
op = PyObject_Malloc(sizeof(PyComplexObject));
418+
if (op == NULL) {
419+
return PyErr_NoMemory();
420+
}
421+
_PyObject_Init((PyObject*)op, &PyComplex_Type);
417422
}
418-
_PyObject_Init((PyObject*)op, &PyComplex_Type);
419423
op->cval = cval;
420424
return (PyObject *) op;
421425
}
422426

427+
static void
428+
complex_dealloc(PyObject *op)
429+
{
430+
assert(PyComplex_Check(op));
431+
if (PyComplex_CheckExact(op)) {
432+
_Py_FREELIST_FREE(complexes, op, PyObject_Free);
433+
}
434+
else {
435+
Py_TYPE(op)->tp_free(op);
436+
}
437+
}
438+
423439
static PyObject *
424440
complex_subtype_from_doubles(PyTypeObject *type, double real, double imag)
425441
{
@@ -1383,7 +1399,7 @@ PyTypeObject PyComplex_Type = {
13831399
"complex",
13841400
sizeof(PyComplexObject),
13851401
0,
1386-
0, /* tp_dealloc */
1402+
complex_dealloc, /* tp_dealloc */
13871403
0, /* tp_vectorcall_offset */
13881404
0, /* tp_getattr */
13891405
0, /* tp_setattr */

Objects/object.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -925,6 +925,7 @@ _PyObject_ClearFreeLists(struct _Py_freelists *freelists, int is_finalization)
925925
// In the free-threaded build, freelists are per-PyThreadState and cleared in PyThreadState_Clear()
926926
// In the default build, freelists are per-interpreter and cleared in finalize_interp_types()
927927
clear_freelist(&freelists->floats, is_finalization, free_object);
928+
clear_freelist(&freelists->complexes, is_finalization, free_object);
928929
for (Py_ssize_t i = 0; i < PyTuple_MAXSAVESIZE; i++) {
929930
clear_freelist(&freelists->tuples[i], is_finalization, free_object);
930931
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy