Skip to content

Commit d5f2014

Browse files
author
marat
committed
Make replacement less complex
1 parent 6ff5f4f commit d5f2014

File tree

1 file changed

+6
-14
lines changed

1 file changed

+6
-14
lines changed

Modules/_datetimemodule.c

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1921,6 +1921,7 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
19211921
PyObject *colonzreplacement = NULL; /* py string, replacement for %:z */
19221922
PyObject *Zreplacement = NULL; /* py string, replacement for %Z */
19231923
PyObject *freplacement = NULL; /* py string, replacement for %f */
1924+
PyObject *dash_replacement = NULL; /* py string, replacement for %- */
19241925

19251926
assert(object && format && timetuple);
19261927
assert(PyUnicode_Check(format));
@@ -2058,13 +2059,12 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
20582059
Py_UCS4 next_ch = PyUnicode_READ_CHAR(format, i);
20592060
i++;
20602061

2061-
PyObject *tmp = make_dash_replacement(object, next_ch, timetuple);
2062-
if (tmp == NULL) {
2062+
Py_XDECREF(dash_replacement);
2063+
dash_replacement = make_dash_replacement(object, next_ch, timetuple);
2064+
if (dash_replacement == NULL) {
20632065
goto Error;
20642066
}
2065-
2066-
replacement = tmp;
2067-
need_decref_replacement = 1;
2067+
replacement = dash_replacement;
20682068
}
20692069
#endif
20702070
else {
@@ -2074,21 +2074,12 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
20742074
assert(replacement != NULL);
20752075
assert(PyUnicode_Check(replacement));
20762076
if (PyUnicodeWriter_WriteSubstring(writer, format, start, end) < 0) {
2077-
if (need_decref_replacement) {
2078-
Py_DECREF(replacement);
2079-
}
20802077
goto Error;
20812078
}
20822079
start = i;
20832080
if (PyUnicodeWriter_WriteStr(writer, replacement) < 0) {
2084-
if (need_decref_replacement) {
2085-
Py_DECREF(replacement);
2086-
}
20872081
goto Error;
20882082
}
2089-
if (need_decref_replacement) {
2090-
Py_DECREF(replacement);
2091-
}
20922083
} /* end while() */
20932084

20942085
PyObject *newformat;
@@ -2115,6 +2106,7 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
21152106
Py_XDECREF(colonzreplacement);
21162107
Py_XDECREF(Zreplacement);
21172108
Py_XDECREF(strftime);
2109+
Py_XDECREF(dash_replacement);
21182110
return result;
21192111

21202112
Error:

0 commit comments

Comments
 (0)