summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2024-10-14 13:18:57 (GMT)
committerGitHub <noreply@github.com>2024-10-14 13:18:57 (GMT)
commit06ca33020e1168459fc6c3e0df93664daf801339 (patch)
treebc5dfd378637cc905d6e2de5bcbfd6afc3ee1317 /Python
parent67f6e08147bc005e460d82fcce85bf5d56009cf5 (diff)
downloadcpython-06ca33020e1168459fc6c3e0df93664daf801339.zip
cpython-06ca33020e1168459fc6c3e0df93664daf801339.tar.gz
cpython-06ca33020e1168459fc6c3e0df93664daf801339.tar.bz2
GH-125323: Convert DECREF_INPUTS_AND_REUSE_FLOAT into a function that takes PyStackRefs. (GH-125439)
Diffstat (limited to 'Python')
-rw-r--r--Python/bytecodes.c12
-rw-r--r--Python/ceval_macros.h20
-rw-r--r--Python/executor_cases.c.h12
-rw-r--r--Python/generated_cases.c.h12
4 files changed, 18 insertions, 38 deletions
diff --git a/Python/bytecodes.c b/Python/bytecodes.c
index 299608f..b22916a 100644
--- a/Python/bytecodes.c
+++ b/Python/bytecodes.c
@@ -539,9 +539,9 @@ dummy_func(
double dres =
((PyFloatObject *)left_o)->ob_fval *
((PyFloatObject *)right_o)->ob_fval;
- PyObject *res_o;
- DECREF_INPUTS_AND_REUSE_FLOAT(left_o, right_o, dres, res_o);
+ PyObject *res_o = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
INPUTS_DEAD();
+ ERROR_IF(res_o == NULL, error);
res = PyStackRef_FromPyObjectSteal(res_o);
}
@@ -553,9 +553,9 @@ dummy_func(
double dres =
((PyFloatObject *)left_o)->ob_fval +
((PyFloatObject *)right_o)->ob_fval;
- PyObject *res_o;
- DECREF_INPUTS_AND_REUSE_FLOAT(left_o, right_o, dres, res_o);
+ PyObject *res_o = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
INPUTS_DEAD();
+ ERROR_IF(res_o == NULL, error);
res = PyStackRef_FromPyObjectSteal(res_o);
}
@@ -567,9 +567,9 @@ dummy_func(
double dres =
((PyFloatObject *)left_o)->ob_fval -
((PyFloatObject *)right_o)->ob_fval;
- PyObject *res_o;
- DECREF_INPUTS_AND_REUSE_FLOAT(left_o, right_o, dres, res_o);
+ PyObject *res_o = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
INPUTS_DEAD();
+ ERROR_IF(res_o == NULL, error);
res = PyStackRef_FromPyObjectSteal(res_o);
}
diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h
index e0e9cc1..6674c4c 100644
--- a/Python/ceval_macros.h
+++ b/Python/ceval_macros.h
@@ -327,26 +327,6 @@ GETITEM(PyObject *v, Py_ssize_t i) {
" in enclosing scope"
#define NAME_ERROR_MSG "name '%.200s' is not defined"
-#define DECREF_INPUTS_AND_REUSE_FLOAT(left, right, dval, result) \
-do { \
- if (Py_REFCNT(left) == 1) { \
- ((PyFloatObject *)left)->ob_fval = (dval); \
- _Py_DECREF_SPECIALIZED(right, _PyFloat_ExactDealloc);\
- result = (left); \
- } \
- else if (Py_REFCNT(right) == 1) {\
- ((PyFloatObject *)right)->ob_fval = (dval); \
- _Py_DECREF_NO_DEALLOC(left); \
- result = (right); \
- }\
- else { \
- result = PyFloat_FromDouble(dval); \
- if ((result) == NULL) GOTO_ERROR(error); \
- _Py_DECREF_NO_DEALLOC(left); \
- _Py_DECREF_NO_DEALLOC(right); \
- } \
-} while (0)
-
// If a trace function sets a new f_lineno and
// *then* raises, we use the destination when searching
// for an exception handler, displaying the traceback, and so on
diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h
index 5532c04..0ed361a 100644
--- a/Python/executor_cases.c.h
+++ b/Python/executor_cases.c.h
@@ -643,8 +643,8 @@
double dres =
((PyFloatObject *)left_o)->ob_fval *
((PyFloatObject *)right_o)->ob_fval;
- PyObject *res_o;
- DECREF_INPUTS_AND_REUSE_FLOAT(left_o, right_o, dres, res_o);
+ PyObject *res_o = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
+ if (res_o == NULL) JUMP_TO_ERROR();
res = PyStackRef_FromPyObjectSteal(res_o);
stack_pointer[-2] = res;
stack_pointer += -1;
@@ -664,8 +664,8 @@
double dres =
((PyFloatObject *)left_o)->ob_fval +
((PyFloatObject *)right_o)->ob_fval;
- PyObject *res_o;
- DECREF_INPUTS_AND_REUSE_FLOAT(left_o, right_o, dres, res_o);
+ PyObject *res_o = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
+ if (res_o == NULL) JUMP_TO_ERROR();
res = PyStackRef_FromPyObjectSteal(res_o);
stack_pointer[-2] = res;
stack_pointer += -1;
@@ -685,8 +685,8 @@
double dres =
((PyFloatObject *)left_o)->ob_fval -
((PyFloatObject *)right_o)->ob_fval;
- PyObject *res_o;
- DECREF_INPUTS_AND_REUSE_FLOAT(left_o, right_o, dres, res_o);
+ PyObject *res_o = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
+ if (res_o == NULL) JUMP_TO_ERROR();
res = PyStackRef_FromPyObjectSteal(res_o);
stack_pointer[-2] = res;
stack_pointer += -1;
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h
index 0eeb566..7bd1b7d 100644
--- a/Python/generated_cases.c.h
+++ b/Python/generated_cases.c.h
@@ -84,8 +84,8 @@
double dres =
((PyFloatObject *)left_o)->ob_fval +
((PyFloatObject *)right_o)->ob_fval;
- PyObject *res_o;
- DECREF_INPUTS_AND_REUSE_FLOAT(left_o, right_o, dres, res_o);
+ PyObject *res_o = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
+ if (res_o == NULL) goto pop_2_error;
res = PyStackRef_FromPyObjectSteal(res_o);
}
stack_pointer[-2] = res;
@@ -251,8 +251,8 @@
double dres =
((PyFloatObject *)left_o)->ob_fval *
((PyFloatObject *)right_o)->ob_fval;
- PyObject *res_o;
- DECREF_INPUTS_AND_REUSE_FLOAT(left_o, right_o, dres, res_o);
+ PyObject *res_o = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
+ if (res_o == NULL) goto pop_2_error;
res = PyStackRef_FromPyObjectSteal(res_o);
}
stack_pointer[-2] = res;
@@ -322,8 +322,8 @@
double dres =
((PyFloatObject *)left_o)->ob_fval -
((PyFloatObject *)right_o)->ob_fval;
- PyObject *res_o;
- DECREF_INPUTS_AND_REUSE_FLOAT(left_o, right_o, dres, res_o);
+ PyObject *res_o = _PyFloat_FromDouble_ConsumeInputs(left, right, dres);
+ if (res_o == NULL) goto pop_2_error;
res = PyStackRef_FromPyObjectSteal(res_o);
}
stack_pointer[-2] = res;