Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbf06c68

Browse files
gh-106078: Movecontext template to decimal module global state (#106346)
1 parent2028a4f commitbf06c68

File tree

2 files changed

+30
-32
lines changed

2 files changed

+30
-32
lines changed

‎Modules/_decimal/_decimal.c‎

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,14 @@ typedef struct {
4949

5050
/* Top level Exception; inherits from ArithmeticError */
5151
PyObject*DecimalException;
52+
53+
/* Template for creating new thread contexts, calling Context() without
54+
* arguments and initializing the module_context on first access. */
55+
PyObject*default_context_template;
56+
57+
/* Basic and extended context templates */
58+
PyObject*basic_context_template;
59+
PyObject*extended_context_template;
5260
}decimal_state;
5361

5462
staticdecimal_stateglobal_state;
@@ -147,14 +155,6 @@ static PyDecContextObject *cached_context = NULL;
147155
staticPyObject*current_context_var=NULL;
148156
#endif
149157

150-
/* Template for creating new thread contexts, calling Context() without
151-
* arguments and initializing the module_context on first access. */
152-
staticPyObject*default_context_template=NULL;
153-
/* Basic and extended context templates */
154-
staticPyObject*basic_context_template=NULL;
155-
staticPyObject*extended_context_template=NULL;
156-
157-
158158
/* Error codes for functions that return signals or conditions */
159159
#defineDEC_INVALID_SIGNALS (MPD_Max_status+1U)
160160
#defineDEC_ERR_OCCURRED (DEC_INVALID_SIGNALS<<1)
@@ -1272,8 +1272,8 @@ context_new(PyTypeObject *type, PyObject *args UNUSED, PyObject *kwds UNUSED)
12721272

12731273
ctx=CTX(self);
12741274

1275-
if (default_context_template) {
1276-
*ctx=*CTX(default_context_template);
1275+
if (state->default_context_template) {
1276+
*ctx=*CTX(state->default_context_template);
12771277
}
12781278
else {
12791279
*ctx=dflt_ctx;
@@ -1576,7 +1576,7 @@ current_context_from_dict(void)
15761576
}
15771577

15781578
/* Set up a new thread local context. */
1579-
tl_context=context_copy(default_context_template,NULL);
1579+
tl_context=context_copy(state->default_context_template,NULL);
15801580
if (tl_context==NULL) {
15811581
returnNULL;
15821582
}
@@ -1649,9 +1649,9 @@ PyDec_SetCurrentContext(PyObject *self UNUSED, PyObject *v)
16491649

16501650
/* If the new context is one of the templates, make a copy.
16511651
* This is the current behavior of decimal.py. */
1652-
if (v==default_context_template||
1653-
v==basic_context_template||
1654-
v==extended_context_template) {
1652+
if (v==state->default_context_template||
1653+
v==state->basic_context_template||
1654+
v==state->extended_context_template) {
16551655
v=context_copy(v,NULL);
16561656
if (v==NULL) {
16571657
returnNULL;
@@ -1675,7 +1675,8 @@ PyDec_SetCurrentContext(PyObject *self UNUSED, PyObject *v)
16751675
staticPyObject*
16761676
init_current_context(void)
16771677
{
1678-
PyObject*tl_context=context_copy(default_context_template,NULL);
1678+
decimal_state*state=GLOBAL_STATE();
1679+
PyObject*tl_context=context_copy(state->default_context_template,NULL);
16791680
if (tl_context==NULL) {
16801681
returnNULL;
16811682
}
@@ -1730,9 +1731,9 @@ PyDec_SetCurrentContext(PyObject *self UNUSED, PyObject *v)
17301731

17311732
/* If the new context is one of the templates, make a copy.
17321733
* This is the current behavior of decimal.py. */
1733-
if (v==default_context_template||
1734-
v==basic_context_template||
1735-
v==extended_context_template) {
1734+
if (v==state->default_context_template||
1735+
v==state->basic_context_template||
1736+
v==state->extended_context_template) {
17361737
v=context_copy(v,NULL);
17371738
if (v==NULL) {
17381739
returnNULL;
@@ -5980,10 +5981,10 @@ PyInit__decimal(void)
59805981

59815982

59825983
/* Init default context template first */
5983-
ASSIGN_PTR(default_context_template,
5984+
ASSIGN_PTR(state->default_context_template,
59845985
PyObject_CallObject((PyObject*)state->PyDecContext_Type,NULL));
59855986
CHECK_INT(PyModule_AddObject(m,"DefaultContext",
5986-
Py_NewRef(default_context_template)));
5987+
Py_NewRef(state->default_context_template)));
59875988

59885989
#ifndefWITH_DECIMAL_CONTEXTVAR
59895990
ASSIGN_PTR(tls_context_key,PyUnicode_FromString("___DECIMAL_CTX__"));
@@ -5995,18 +5996,18 @@ PyInit__decimal(void)
59955996
CHECK_INT(PyModule_AddObject(m,"HAVE_THREADS",Py_NewRef(Py_True)));
59965997

59975998
/* Init basic context template */
5998-
ASSIGN_PTR(basic_context_template,
5999+
ASSIGN_PTR(state->basic_context_template,
59996000
PyObject_CallObject((PyObject*)state->PyDecContext_Type,NULL));
6000-
init_basic_context(basic_context_template);
6001+
init_basic_context(state->basic_context_template);
60016002
CHECK_INT(PyModule_AddObject(m,"BasicContext",
6002-
Py_NewRef(basic_context_template)));
6003+
Py_NewRef(state->basic_context_template)));
60036004

60046005
/* Init extended context template */
6005-
ASSIGN_PTR(extended_context_template,
6006+
ASSIGN_PTR(state->extended_context_template,
60066007
PyObject_CallObject((PyObject*)state->PyDecContext_Type,NULL));
6007-
init_extended_context(extended_context_template);
6008+
init_extended_context(state->extended_context_template);
60086009
CHECK_INT(PyModule_AddObject(m,"ExtendedContext",
6009-
Py_NewRef(extended_context_template)));
6010+
Py_NewRef(state->extended_context_template)));
60106011

60116012

60126013
/* Init mpd_ssize_t constants */
@@ -6046,14 +6047,14 @@ PyInit__decimal(void)
60466047
Py_CLEAR(MutableMapping);/* GCOV_NOT_REACHED */
60476048
Py_CLEAR(SignalTuple);/* GCOV_NOT_REACHED */
60486049
Py_CLEAR(state->DecimalTuple);/* GCOV_NOT_REACHED */
6049-
Py_CLEAR(default_context_template);/* GCOV_NOT_REACHED */
6050+
Py_CLEAR(state->default_context_template);/* GCOV_NOT_REACHED */
60506051
#ifndefWITH_DECIMAL_CONTEXTVAR
60516052
Py_CLEAR(tls_context_key);/* GCOV_NOT_REACHED */
60526053
#else
60536054
Py_CLEAR(current_context_var);/* GCOV_NOT_REACHED */
60546055
#endif
6055-
Py_CLEAR(basic_context_template);/* GCOV_NOT_REACHED */
6056-
Py_CLEAR(extended_context_template);/* GCOV_NOT_REACHED */
6056+
Py_CLEAR(state->basic_context_template);/* GCOV_NOT_REACHED */
6057+
Py_CLEAR(state->extended_context_template);/* GCOV_NOT_REACHED */
60576058
Py_CLEAR(m);/* GCOV_NOT_REACHED */
60586059

60596060
returnNULL;/* GCOV_NOT_REACHED */

‎Tools/c-analyzer/cpython/globals-to-fix.tsv‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -422,10 +422,7 @@ Modules/_datetimemodule.c-us_per_day-
422422
Modules/_datetimemodule.c-us_per_week-
423423
Modules/_datetimemodule.c-seconds_per_day-
424424
Modules/_decimal/_decimal.c-global_state-
425-
Modules/_decimal/_decimal.c-basic_context_template-
426425
Modules/_decimal/_decimal.c-current_context_var-
427-
Modules/_decimal/_decimal.c-default_context_template-
428-
Modules/_decimal/_decimal.c-extended_context_template-
429426
Modules/_decimal/_decimal.c-round_map-
430427
Modules/_decimal/_decimal.c-Rational-
431428
Modules/_decimal/_decimal.c-SignalTuple-

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp