Issue #19219 Remove a lot of "retval = NULL" statements, now that retval
is pre-initialized to that value. Test show a 5% speedup as a bonus.
This commit is contained in:
parent
b4534ae704
commit
5983258bf2
101
Python/marshal.c
101
Python/marshal.c
|
@ -868,7 +868,6 @@ r_object(RFILE *p)
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
|
||||||
case TYPE_NULL:
|
case TYPE_NULL:
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TYPE_NONE:
|
case TYPE_NONE:
|
||||||
|
@ -911,7 +910,6 @@ r_object(RFILE *p)
|
||||||
{
|
{
|
||||||
char buf[256], *ptr;
|
char buf[256], *ptr;
|
||||||
double dx;
|
double dx;
|
||||||
retval = NULL;
|
|
||||||
n = r_byte(p);
|
n = r_byte(p);
|
||||||
if (n == EOF) {
|
if (n == EOF) {
|
||||||
PyErr_SetString(PyExc_EOFError,
|
PyErr_SetString(PyExc_EOFError,
|
||||||
|
@ -936,15 +934,11 @@ r_object(RFILE *p)
|
||||||
unsigned char *buf;
|
unsigned char *buf;
|
||||||
double x;
|
double x;
|
||||||
buf = (unsigned char *) r_string(8, p);
|
buf = (unsigned char *) r_string(8, p);
|
||||||
if (buf == NULL) {
|
if (buf == NULL)
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
x = _PyFloat_Unpack8(buf, 1);
|
x = _PyFloat_Unpack8(buf, 1);
|
||||||
if (x == -1.0 && PyErr_Occurred()) {
|
if (x == -1.0 && PyErr_Occurred())
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
retval = PyFloat_FromDouble(x);
|
retval = PyFloat_FromDouble(x);
|
||||||
R_REF(retval);
|
R_REF(retval);
|
||||||
break;
|
break;
|
||||||
|
@ -954,7 +948,6 @@ r_object(RFILE *p)
|
||||||
{
|
{
|
||||||
char buf[256], *ptr;
|
char buf[256], *ptr;
|
||||||
Py_complex c;
|
Py_complex c;
|
||||||
retval = NULL;
|
|
||||||
n = r_byte(p);
|
n = r_byte(p);
|
||||||
if (n == EOF) {
|
if (n == EOF) {
|
||||||
PyErr_SetString(PyExc_EOFError,
|
PyErr_SetString(PyExc_EOFError,
|
||||||
|
@ -993,25 +986,17 @@ r_object(RFILE *p)
|
||||||
unsigned char *buf;
|
unsigned char *buf;
|
||||||
Py_complex c;
|
Py_complex c;
|
||||||
buf = (unsigned char *) r_string(8, p);
|
buf = (unsigned char *) r_string(8, p);
|
||||||
if (buf == NULL) {
|
if (buf == NULL)
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
c.real = _PyFloat_Unpack8(buf, 1);
|
c.real = _PyFloat_Unpack8(buf, 1);
|
||||||
if (c.real == -1.0 && PyErr_Occurred()) {
|
if (c.real == -1.0 && PyErr_Occurred())
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
buf = (unsigned char *) r_string(8, p);
|
buf = (unsigned char *) r_string(8, p);
|
||||||
if (buf == NULL) {
|
if (buf == NULL)
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
c.imag = _PyFloat_Unpack8(buf, 1);
|
c.imag = _PyFloat_Unpack8(buf, 1);
|
||||||
if (c.imag == -1.0 && PyErr_Occurred()) {
|
if (c.imag == -1.0 && PyErr_Occurred())
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
retval = PyComplex_FromCComplex(c);
|
retval = PyComplex_FromCComplex(c);
|
||||||
R_REF(retval);
|
R_REF(retval);
|
||||||
break;
|
break;
|
||||||
|
@ -1021,24 +1006,18 @@ r_object(RFILE *p)
|
||||||
{
|
{
|
||||||
char *ptr;
|
char *ptr;
|
||||||
n = r_long(p);
|
n = r_long(p);
|
||||||
if (PyErr_Occurred()) {
|
if (PyErr_Occurred())
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
if (n < 0 || n > SIZE32_MAX) {
|
if (n < 0 || n > SIZE32_MAX) {
|
||||||
PyErr_SetString(PyExc_ValueError, "bad marshal data (string size out of range)");
|
PyErr_SetString(PyExc_ValueError, "bad marshal data (string size out of range)");
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
v = PyBytes_FromStringAndSize((char *)NULL, n);
|
v = PyBytes_FromStringAndSize((char *)NULL, n);
|
||||||
if (v == NULL) {
|
if (v == NULL)
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
ptr = r_string(n, p);
|
ptr = r_string(n, p);
|
||||||
if (ptr == NULL) {
|
if (ptr == NULL) {
|
||||||
Py_DECREF(v);
|
Py_DECREF(v);
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
memcpy(PyBytes_AS_STRING(v), ptr, n);
|
memcpy(PyBytes_AS_STRING(v), ptr, n);
|
||||||
|
@ -1051,13 +1030,10 @@ r_object(RFILE *p)
|
||||||
is_interned = 1;
|
is_interned = 1;
|
||||||
case TYPE_ASCII:
|
case TYPE_ASCII:
|
||||||
n = r_long(p);
|
n = r_long(p);
|
||||||
if (PyErr_Occurred()) {
|
if (PyErr_Occurred())
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
if (n < 0 || n > SIZE32_MAX) {
|
if (n < 0 || n > SIZE32_MAX) {
|
||||||
PyErr_SetString(PyExc_ValueError, "bad marshal data (unicode size out of range)");
|
PyErr_SetString(PyExc_ValueError, "bad marshal data (unicode size out of range)");
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
goto _read_ascii;
|
goto _read_ascii;
|
||||||
|
@ -1075,15 +1051,11 @@ r_object(RFILE *p)
|
||||||
{
|
{
|
||||||
char *ptr;
|
char *ptr;
|
||||||
ptr = r_string(n, p);
|
ptr = r_string(n, p);
|
||||||
if (ptr == NULL) {
|
if (ptr == NULL)
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
v = PyUnicode_FromKindAndData(PyUnicode_1BYTE_KIND, ptr, n);
|
v = PyUnicode_FromKindAndData(PyUnicode_1BYTE_KIND, ptr, n);
|
||||||
if (v == NULL) {
|
if (v == NULL)
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
if (is_interned)
|
if (is_interned)
|
||||||
PyUnicode_InternInPlace(&v);
|
PyUnicode_InternInPlace(&v);
|
||||||
retval = v;
|
retval = v;
|
||||||
|
@ -1098,30 +1070,23 @@ r_object(RFILE *p)
|
||||||
char *buffer;
|
char *buffer;
|
||||||
|
|
||||||
n = r_long(p);
|
n = r_long(p);
|
||||||
if (PyErr_Occurred()) {
|
if (PyErr_Occurred())
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
if (n < 0 || n > SIZE32_MAX) {
|
if (n < 0 || n > SIZE32_MAX) {
|
||||||
PyErr_SetString(PyExc_ValueError, "bad marshal data (unicode size out of range)");
|
PyErr_SetString(PyExc_ValueError, "bad marshal data (unicode size out of range)");
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (n != 0) {
|
if (n != 0) {
|
||||||
buffer = r_string(n, p);
|
buffer = r_string(n, p);
|
||||||
if (buffer == NULL) {
|
if (buffer == NULL)
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
v = PyUnicode_DecodeUTF8(buffer, n, "surrogatepass");
|
v = PyUnicode_DecodeUTF8(buffer, n, "surrogatepass");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
v = PyUnicode_New(0, 0);
|
v = PyUnicode_New(0, 0);
|
||||||
}
|
}
|
||||||
if (v == NULL) {
|
if (v == NULL)
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
if (is_interned)
|
if (is_interned)
|
||||||
PyUnicode_InternInPlace(&v);
|
PyUnicode_InternInPlace(&v);
|
||||||
retval = v;
|
retval = v;
|
||||||
|
@ -1134,22 +1099,17 @@ r_object(RFILE *p)
|
||||||
goto _read_tuple;
|
goto _read_tuple;
|
||||||
case TYPE_TUPLE:
|
case TYPE_TUPLE:
|
||||||
n = r_long(p);
|
n = r_long(p);
|
||||||
if (PyErr_Occurred()) {
|
if (PyErr_Occurred())
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
if (n < 0 || n > SIZE32_MAX) {
|
if (n < 0 || n > SIZE32_MAX) {
|
||||||
PyErr_SetString(PyExc_ValueError, "bad marshal data (tuple size out of range)");
|
PyErr_SetString(PyExc_ValueError, "bad marshal data (tuple size out of range)");
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
_read_tuple:
|
_read_tuple:
|
||||||
v = PyTuple_New(n);
|
v = PyTuple_New(n);
|
||||||
R_REF(v);
|
R_REF(v);
|
||||||
if (v == NULL) {
|
if (v == NULL)
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
v2 = r_object(p);
|
v2 = r_object(p);
|
||||||
if ( v2 == NULL ) {
|
if ( v2 == NULL ) {
|
||||||
|
@ -1167,21 +1127,16 @@ r_object(RFILE *p)
|
||||||
|
|
||||||
case TYPE_LIST:
|
case TYPE_LIST:
|
||||||
n = r_long(p);
|
n = r_long(p);
|
||||||
if (PyErr_Occurred()) {
|
if (PyErr_Occurred())
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
if (n < 0 || n > SIZE32_MAX) {
|
if (n < 0 || n > SIZE32_MAX) {
|
||||||
PyErr_SetString(PyExc_ValueError, "bad marshal data (list size out of range)");
|
PyErr_SetString(PyExc_ValueError, "bad marshal data (list size out of range)");
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
v = PyList_New(n);
|
v = PyList_New(n);
|
||||||
R_REF(v);
|
R_REF(v);
|
||||||
if (v == NULL) {
|
if (v == NULL)
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
v2 = r_object(p);
|
v2 = r_object(p);
|
||||||
if ( v2 == NULL ) {
|
if ( v2 == NULL ) {
|
||||||
|
@ -1200,10 +1155,8 @@ r_object(RFILE *p)
|
||||||
case TYPE_DICT:
|
case TYPE_DICT:
|
||||||
v = PyDict_New();
|
v = PyDict_New();
|
||||||
R_REF(v);
|
R_REF(v);
|
||||||
if (v == NULL) {
|
if (v == NULL)
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
PyObject *key, *val;
|
PyObject *key, *val;
|
||||||
key = r_object(p);
|
key = r_object(p);
|
||||||
|
@ -1225,13 +1178,10 @@ r_object(RFILE *p)
|
||||||
case TYPE_SET:
|
case TYPE_SET:
|
||||||
case TYPE_FROZENSET:
|
case TYPE_FROZENSET:
|
||||||
n = r_long(p);
|
n = r_long(p);
|
||||||
if (PyErr_Occurred()) {
|
if (PyErr_Occurred())
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
if (n < 0 || n > SIZE32_MAX) {
|
if (n < 0 || n > SIZE32_MAX) {
|
||||||
PyErr_SetString(PyExc_ValueError, "bad marshal data (set size out of range)");
|
PyErr_SetString(PyExc_ValueError, "bad marshal data (set size out of range)");
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
v = (type == TYPE_SET) ? PySet_New(NULL) : PyFrozenSet_New(NULL);
|
v = (type == TYPE_SET) ? PySet_New(NULL) : PyFrozenSet_New(NULL);
|
||||||
|
@ -1245,10 +1195,8 @@ r_object(RFILE *p)
|
||||||
if (idx < 0)
|
if (idx < 0)
|
||||||
Py_CLEAR(v); /* signal error */
|
Py_CLEAR(v); /* signal error */
|
||||||
}
|
}
|
||||||
if (v == NULL) {
|
if (v == NULL)
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
v2 = r_object(p);
|
v2 = r_object(p);
|
||||||
if ( v2 == NULL ) {
|
if ( v2 == NULL ) {
|
||||||
|
@ -1291,10 +1239,8 @@ r_object(RFILE *p)
|
||||||
PyObject *lnotab = NULL;
|
PyObject *lnotab = NULL;
|
||||||
|
|
||||||
idx = r_ref_reserve(flag, p);
|
idx = r_ref_reserve(flag, p);
|
||||||
if (idx < 0) {
|
if (idx < 0)
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
v = NULL;
|
v = NULL;
|
||||||
|
|
||||||
|
@ -1381,13 +1327,11 @@ r_object(RFILE *p)
|
||||||
n = r_long(p);
|
n = r_long(p);
|
||||||
if (n < 0 || n >= PyList_GET_SIZE(p->refs)) {
|
if (n < 0 || n >= PyList_GET_SIZE(p->refs)) {
|
||||||
PyErr_SetString(PyExc_ValueError, "bad marshal data (invalid reference)");
|
PyErr_SetString(PyExc_ValueError, "bad marshal data (invalid reference)");
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
v = PyList_GET_ITEM(p->refs, n);
|
v = PyList_GET_ITEM(p->refs, n);
|
||||||
if (v == Py_None) {
|
if (v == Py_None) {
|
||||||
PyErr_SetString(PyExc_ValueError, "bad marshal data (invalid reference)");
|
PyErr_SetString(PyExc_ValueError, "bad marshal data (invalid reference)");
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Py_INCREF(v);
|
Py_INCREF(v);
|
||||||
|
@ -1398,7 +1342,6 @@ r_object(RFILE *p)
|
||||||
/* Bogus data got written, which isn't ideal.
|
/* Bogus data got written, which isn't ideal.
|
||||||
This will let you keep working and recover. */
|
This will let you keep working and recover. */
|
||||||
PyErr_SetString(PyExc_ValueError, "bad marshal data (unknown type code)");
|
PyErr_SetString(PyExc_ValueError, "bad marshal data (unknown type code)");
|
||||||
retval = NULL;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue