Check in my ultra-shortlived patch #597220.
Move some debugging checks inside Py_DEBUG.
They were causing cache misses according to cachegrind.
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index 7b6ea26..90cd952 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -238,13 +238,13 @@
if (builtin_object == NULL)
return NULL;
}
- if ((back != NULL && !PyFrame_Check(back)) ||
- code == NULL || !PyCode_Check(code) ||
- globals == NULL || !PyDict_Check(globals) ||
+#ifdef Py_DEBUG
+ if (code == NULL || globals == NULL || !PyDict_Check(globals) ||
(locals != NULL && !PyDict_Check(locals))) {
PyErr_BadInternalCall();
return NULL;
}
+#endif
ncells = PyTuple_GET_SIZE(code->co_cellvars);
nfrees = PyTuple_GET_SIZE(code->co_freevars);
extras = code->co_stacksize + code->co_nlocals + ncells + nfrees;